[MySQL] JOIN(feat. INNER, LEFT, RIGHT, OUTER)
2020. 11. 18. 21:19ㆍMySQL
#테스트 데이터
# a5 데이터베이스 삭제/생성/선택
DROP DATABASE IF EXISTS `a5`;
CREATE DATABASE `a5`;
USE `a5`;
SHOW DATABASES;
#people테이블 생성
CREATE TABLE `people`(
`name` CHAR(100) NOT NULL,
`phone` CHAR(100) NOT NULL,
`pid` INT(10) NOT NULL
);
DESC `people`;
INSERT INTO `people`
SET `name` = 'Mr b',
`phone` = '01225-708225',
`pid` = 1;
INSERT INTO `people`
SET `name` = 'Miss a',
`phone` = '01333-444444',
`pid` = 2;
INSERT INTO `people`
SET `name` = 'Mr c',
`phone` = '55555-546525',
`pid` = 3;
SELECT * FROM `people`;
#property테이블 생성
CREATE TABLE `property`(
`pid` INT(10) NOT NULL,
`spid` INT(10) NOT NULL,
`selling` CHAR(100) NOT NULL
);
DESC `property`;
INSERT INTO `property`
SET `spid` = 1,
`selling` = 'old',
`pid` = 1;
INSERT INTO `property`
SET `spid` = 2,
`selling` = 'will',
`pid` = 3;
INSERT INTO `property`
SET `spid` = 3,
`selling` = 'tail',
`pid` = 3;
INSERT INTO `property`
SET `spid` = 4,
`selling` = 'flo',
`pid` = 3;
INSERT INTO `property`
SET `spid` = 5,
`selling` = 'dum',
`pid` = 4;
SELECT * FROM `property`;
#INNER JOIN
-INNER 조인은 MySQL에서는 간략히 JOIN으로 나타낸다. 일반적으로 사용하는 JOIN 이다.
-핵심은 JOIN뒤에 ON인데, 두 테이블이 결합하는 조건을 나타낸다.
-(* ON 대신 WHERE를 쓸 수도 있다.)
SELECT people.name,
people.phone,
property.selling
FROM people
INNER JOIN property
ON people.pid = property.pid;
#LEFT JOIN
-왼쪽 테이블을 중심으로 오른쪽의 테이블을 매치시킨다.
-왼쪽 테이블의 한개의 레코드에 여러개의 오른쪽 테이블 레코드가 일치할 경우,
-해당 왼쪽 레코드를 여러번 표시하게 된다.
-왼쪽은 무조건 표시하고, 매치되는 레코드가 오른쪽에 없으면 NULL을 표시한다.
SELECT people.name,
people.phone,
property.selling
FROM people
LEFT JOIN property
ON people.pid = property.pid;
#RIGHT JOIN
-오른쪽 테이블을 중심으로 왼쪽 테이블을 매치시킨다.
-LEFT JOIN에서 방향을 오른쪽으로만 바꾼것이므로, 역시 해당 레코드가 여러번 표시되거나, NULL이 표시된다.
SELECT people.name,
people.phone,
property.selling
FROM people
RIGHT JOIN property
ON people.pid = property.pid;
#OUTER JOIN
-조건에 부합하지 않는 행까지도 포함시켜 결합하는 것
-기본적으로 LEFT, RIGHT 또는 FULL이 OUTER JOIN 이다.
-FULL JOIN은 사용할 일이 없으며, ODBC에 따라 지원하지 않는 경우도 있다.
'MySQL' 카테고리의 다른 글
[MySQL] MAX, MIN, COUNT, DISTINCT, IS NOT NULL (0) | 2020.11.22 |
---|---|
[MySQL] 여러기준으로 정렬하기, 상위 n개 레코드 (0) | 2020.11.20 |
[MySQL] VARCHAR와 CHAR의 차이 (0) | 2020.11.11 |
[MySQL] 기본적인 SQL 정리 (0) | 2020.11.11 |
20.11.10 SQLyog 학습 (0) | 2020.11.10 |