DB
SQL JOIN 개념 정리
Okguri
2022. 6. 24. 11:28
ALIAS
- SELECT에서 사용. 열의 별칭을 지정.
- HAVING, WHERE 절에서 ALIAS 사용 불가. ALIAS는 맨 마지막에 붙여지므로, 조건 구문들이 ALIAS를 인식할 수 없음
SELECT AGE AS PP_AGE FROM PEOPLE WHERE PP_AGE > 100; -> UNKNOWN 에러 뜸
SELECT AGE AS PP_AGE FROM PEOPLE WHRER AGE >10; -> 정상
PEOPLE 회원명단
ID | NAME |
1 | ANN |
2 | EMILY |
3 | JOSH |
PARTY 파티 참석자
ID | NAME |
1 | EMILY |
2 | BILL |
3 | MJ |
INNER JOIN
- 테이블 A와 테이블 B가 모두가 가진 공통 데이터를 뽑아냄. A∩B
- 공통 데이터의 모든 열을 SELECT 하기 때문에, 중복된 열이 나타남. 따라서 필요한 열을 SELECT 해야
SELECT * FROM PEOPLE INNER JOIN PARTY ON PARTY.NAME = PEOPLE.NAME;
FULL OUTER JOIN
- 테이블 A와 테이블 B에 있는 모든 데이터를 뽑아냄. A+B-(A∩B) = A∪B
- 행에 해당 컬럼 데이터가 없으면 NULL
SELECT * FROM PEOPLE FULL OUTER JOIN PARTY ON PARTY.NAME = PEOPLE.NAME;
- 공통데이터(교집합)을 뺀, 독립 데이터만 뽑아내기
SELECT * FROM PEOPLE FULL OUTER JOIN PARTY ON PARTY.NAME = PEOPLE.NAME
WHRER PEOPLE.ID IS NULL OR PARTY.ID IS NULL; -- PEOPLE.ID가 NULL이거나 PARTY.ID가 NULL이거나
LEFT OUTER JOIN
- 테이블A와 테이블 B를 조인한다고 했을 때, 왼쪽 테이블 A를 먼저 참조함.
SELECT * FROM PEOPLE LEFT OUTER JOIN PARTY ON PARTY.NAME = PEOPLE.NAME;
- 테이블A에 있거나, 테이블A, 테이블B에 모두 있는 데이터를 반환!!!!!!!!!!!!!!!!!!
- 즉, 밴다이어그램에서 A만 반환! 테이블 B에만 있는 것은 반환하지 않는다.
- A테이블에만 있는 ROW에서 B 컬럼은 NULL 처리된다.
결과
ID(A테이블) | NAME(A테이블) | ID(B테이블) | NAME (B테이블) |
1 | ANN | NULL | NULL |
2 | EMILY | 1 | EMILY |
3 | JOSH | NULL | NULL |
UNION
- 각기 다른 두 SELECT 결과를 합치고 싶을 때. 종이 두 개 테이프로 붙이듯 붙이는 것!
- SELECT 문의 컬럼 수, 이름이 같아야 함. 컬럼 수가 다르면 합쳐지지 않는다.
- UNION 결과에는 중복 있어도 괜찮은 듯. KEY값과 상관없이 결과를 붙잉는 거니까?
SELECT * FROM PEOPLE
UNION ALL
SELECT * FROM PARTY;
ID NAME
1 | ANN |
2 | EMILY |
3 | JOSH |
1 | EMILY |
2 | BILL |
3 | MJ |