SQL/MySQL
[MySQL] JOIN 구문
jane.dev
2021. 7. 17. 21:44
반응형
2개 이상의 테이블을 결합
여러 테이블에 나눠져 삽입된 연관된 데이터를 결합해주는 기능으로
같은 내용의 컬럼이 존재해야만 사용할 수 있음
SELECT 테이블1.컬럼1, 테이블1.컬럼2, ..., 테이블2.컬럼1, 테이블2.컬럼2, ...
FROM 테이블1 JOIN구문 테이블2
ON 테이블1.공통컬럼 = 테이블2.공통컬럼;
WHERE
절로 조건을 만들 수 있음, 앞에 JOIN
구문이 실행되고 나면 실행된 내용에 조건을 적용
예시
이름(기본키), 나이 컬럼을 갖는 infoTbl1
CREATE TABLE infoTbl1(
name char(3) PRIMARY KEY,
age int NOT NULL
);
INSERT INTO infoTbl1 VALUES ('김가나', 30),
('박다라', 34),
('최마바', 29);
이름(기본키), 주소 컬럼을 갖는 infoTbl2
CREATE TABLE infoTbl2(
name char(3) PRIMARY KEY,
addr char(4) NOT NULL
);
INSERT INTO infotbl2 VALUES ('김가나', '서울'),
('박다라', '제주'),
('이아자', '경기');
INNER JOIN
결합한 두 테이블에서 교집합만 반환
SELECT * FROM infoTbl1 i1 INNER JOIN infoTbl2 i2 ON i1.name = i2.name;
OUTER JOIN
INNER JOIN
에서 누락된 데이터가 발생
반환될 데이터의 테이블과 교집합이 없는 다른 쪽 테이블의 데이터는 NULL 값으로 반환
LEFT OUTER JOIN
: JOIN
을 기준으로 왼쪽 테이블의 모든 데이터가 반환되고 오른쪽 테이블에서는 왼쪽 테이블의 교집합 데이터만 반환
SELECT * FROM infoTbl1 i1 LEFT OUTER JOIN infoTbl2 i2 ON i1.name = i2.name;
RIGHT OUTER JOIN
: JOIN
을 기준으로 오른쪽 테이블의 모든 데이터가 반환되고 왼쪽 테이블에서는 오른쪽 테이블의 교집합 데이터만 반환
SELECT * FROM infoTbl1 i1 RIGHT OUTER JOIN infoTbl2 i2 ON i1.name = i2.name;
두 테이블의 모든 데이터를 누락없이 반환하려면 UNION
을 이용해 두 개의 명령문을 이어 붙임
SELECT * FROM infoTbl1 i1 LEFT OUTER JOIN infoTbl2 i2 ON i1.name = i2.name
UNION
SELECT * FROM infoTbl1 i1 RIGHT OUTER JOIN infoTbl2 i2 ON i1.name = i2.name;