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