SQL - JOIN

gang_shik·2022년 5월 10일
1

Database

목록 보기
3/9

Join

  • 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법, 연결하려면 테이블들이 적어도 하나의 컬럼을 공유하고 있어야함

  • 공유하고 있는 컬럼PK 또는 FK값으로 사용

  • 예시 테이블

  • A 테이블

IDENAME
1AAA
2BBB
3CCC
  • B 테이블
IDKNAME
1
2
4
5

INNER JOIN

  • 교집합, 공통적인 부분만 SELECT 됨(내부 조인), 두 테이블 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야함
SELECT A.ID, A.ENAME, A.KNAME
FROM A INNER JOIN B
ON A.ID = B.ID;
IDENAMEKNAME
1AAA
2BBB

LEFT JOIN

  • 조인기준 왼쪽에 있는거 다 SELECT 됨(공통적인 부분 + LEFT에 있는거만)
SELECT A.ID, A.ENAME, A.KNAME
FROM A LEFT OUTER JOIN B
ON A.ID = B.ID;
IDENAMEKNAME
1AAA
2BBB
3CCCNULL
  • 조인기준 왼쪽에 있는거만 SELECT됨(LEFT에 있는거만 : A-B), LEFT가 가지고 있는 것 중 공통적인 부분을 제외한 값

  • 그냥 LEFT JOIN 값 중에서 WHERE 조건으로 NULL인 값을 조회, B가 NULL의 값을 가지고 있는건 A만 가지고 있는 값이니까

SELECT A.ID, A.ENAME, A.KNAME
FROM A LEFT OUTER JOIN B
ON A.ID = B.ID;
WHERE B.ID IS NULL
IDENAMEKNAME
3CCCNULL

RIGHT JOIN

  • 조인기준 오른쪽에 있는거 다 SELECT 됨(공통적인 부분 + RIGHT에 있는거만)
SELECT A.ID, A.ENAME, A.KNAME
FROM A RIGHT OUTER JOIN B
ON A.ID = B.ID;
IDENAMEKNAME
1AAA
2BBB
4NULL
5NULL
  • 조인기준 오른쪽에 있는거만 SELECT 됨(RIGHT에 있는거만 : B-A), RIGHT가 가지고 있는 것 중 공통적인 부분을 제외한 값

  • 그냥 RIGHT JOIN 값 중에서 WHERE 조건으로 NULL인 값을 조회

SELECT A.ID, A.ENAME, A.KNAME
FROM A RIGHT OUTER JOIN B
ON A.ID = B.ID
WHERE A.ID IS NULL
IDENAMEKNAME
4NULL
5NULL

OUTER JOIN

  • A테이블이 가지고 있는거 B테이블이 가지고 있느거 둘 다 SELECT, 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나옴
SELECT A.ID, A.ENAME, A.KNAME
FROM A FULL OUTER JOIN B
ON A.ID = B.ID
IDENAMEKNAME
1AAA
2BBB
3CCCNULL
4NULL
5NULL
  • 오른쪽에 있는거만 + 왼쪽에 있는거만 SELECT, FULL OUTER가 가지고 있는 것 중 공통적인 부분을 제외한 값
SELECT A.ID, A.ENAME, A.KNAME
FROM A FULL OUTER JOIN B
ON A.ID = B.ID
WHERE A.ID IS NULL OR B.ID IS NULL
IDENAMEKNAME
3CCCNULL
4NULL
5NULL

CROSS JOIN

  • 한 쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능

  • 양쪽의 데이터를 곱집합을 함

SELECT * FROM A CROSS JOIN B
IDENAMEIDKNAME
1AAA1
2BBB1
3CCC1
1AAA2
2BBB2
3CCC2
1AAA4
2BBB4
3CCC4
1AAA5
2BBB5
3CCC5

SELF JOIN

  • 자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용함, 자체 조인이 됨

  • 특별한 문법이 존재하지 않고 INNER JOIN을 응용해서 사용할 수 있음

  • 자신의 테이블을 참조해서 아래와 같이 셀프 조인을 활용, 하나의 테이블로 사원과 직속상관의 관계 정리 가능

  • 아래와 같이 id와 superior_id 활용, 셀프 조인으로 묶음

idnamesuperior_id
1김사장NULL
2정과장1
3최대리2
4이대리2
5박고문NULL
SELECT em1.id, em1.name, em2.name
FROM employee em1
JOIN employee em2
ON em1.superior_id = em2.id;
idnamename
2정과장김사장
3최대리정과장
4이대리정과장
profile
측정할 수 없으면 관리할 수 없고, 관리할 수 없으면 개선시킬 수도 없다

0개의 댓글