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;