-
SQL JOIN 총정리SQL 2023. 9. 30. 13:14
- INNER JOIN
- 조인하는 테이블의 ON 조건이 일치하는 결과만 출력
- FROM 절에 콤마를 사용하면 INNER JOIN으로 사용 가능
- OUTER JOIN과 다르게 어느 테이블에서 기준으로 조인을 하든 조인 관계에 부합되는 record를 모두 가지게 된다.
- 조인에 부합되지 않는 record는 모두 삭제된다.
select t1.name from tbl_one as t1 inner join tbl_two as t2 on t1.seq = t2.seq where t1.seq = "1" -- join을 완료하고 그다음 조건을 따진다. -- inner join 함축 구문 select t1.seq from tbl_one t1, tbl_two t2 where t1.seq = t2.seq and t1.seq = "1"- OUTER JOIN
- 기준 테이블의 것은 모두 출력
- OUTER JOIN은 조인하는 테이블의 ON 조건 중 한쪽의 데이터를 모두 가져온다.
- LEFT, RIGHT, FULL OUTER JOIN이 존재한다. (FULL OUTER JOIN은 성능상 거의 사용하지 않는다.)
- LEFT JOIN
- 왼쪽 테이블 기준으로 오른쪽 테이블을 조합
- 여러 테이블을 LEFT JOIN하려면, 첫 번째 테이블로 SELECT문에 가장 많은 열을 가져와야할 테이블을 우선적으로 사용한다.
- 조인을 LEFT JOIN으로 했다면 나머지 조인도 LEFT JOIN으로 이어간다.
-- 예) 1학년 학생의 이름과 지도교수명을 출력하라. 단, 지도교수가 지정되지 않은 학생도 출력되게 하라. SELECT STUDENT.NAME , PROFESSOR.NAME FROM STUDENT LEFT OUTER JOIN PROFESSOR -- STUDENT를 기준으로 왼쪽 조인 ON STUDENT.PID = PROFESSOR.ID WHERE GRADE = 1- RIGHT JOIN
- 오른쪽 테이블 기준으로 왼쪽 테이블을 조합
-- 예) 1학년 학생의 이름과 지도교수명을 출력하라. 단, 지도교수가 지정되지 않은 학생도 출력되게 하라. SELECT STUDENT.NAME , PROFESSOR.NAME FROM STUDENT RIGHT OUTER JOIN PROFESSOR -- PROFESSOR를 기준으로 오른쪽 조인 ON STUDENT.PID = PROFESSOR.ID WHERE GRADE = 1- FULL OUTER JOIN
- 대부분 데이터베이스는 FULL OUTER JOIN을 지원하지 않는다.
select * from TBL_ONE T1 FULL OUTER JOIN TBL_TWO T2 on T1.SEQ = T2.SEQ -- 같은 구문 -- UNION 은 DISTICT자동 포함이라, 따로 중복제거 안해줘도 자동으로 중복제거 해준다 ( select * from TBL_ONE T1 LEFT JOIN TBL_TWO T2 on T1.SEQ = T2.SEQ ) UNION ( select * from TBL_ONE T1 RIGHT JOIN TBL_TWO T2 on T1.SEQ = T2.SEQ )- EXCLUSIVE LEFT JOIN
- 어느 특정 테이블에만 있는 컬럼만 출력
- 만약 2개의 테이블이 조인된다면 한개의 테이블에만 존재하는 데이터 출력
- LEFT JOIN과 WHERE절을 이용해 만든 JOIN
SELECT * FROM TBL_ONE A LEFT JOIN TBL_TWO B ON A.SEQ = B.SEQ WHERE B.SEQ IS NULL -- 조인한 B 테이블의 값이 null만 출력하라는 말은, 조인이 안된 A 레코드 나머지값만 출력하라는 말- SELF JOIN
- 자기 자신의 테이블을 조인해서 관계가 있는 데이터 출력
-- 예) 모든 사원에 대해 사원의 이름과 직속 상사의 이름을 검색 해라. -- EMPNAME 테이블에 어떤 사원의 MANAGER 번호가 같은 테이블 내에서 어떤 사원의 EMPNO와 같으면 그 사원이 직속 상관 SELECT E.EMPNAME as 사원 , M.EMPNAME as 직속상관 FROM EMPLOYEE E, EMPLOYEE M -- inner join WHERE E.MANAGER = M.EMPNO;- JOIN에서 DISTINCT 사용하기
-- DISTINCT를 사용하면 성능이 느리다. SELECT DISTINCT T1.SEQ , T2.NAME FROM TBL_ONE T1 INNER JOIN TBL_TWO T2 ON T1.SEQ = T2.SEQ; -- JOIN 전 중복 제거가 성능을 높일 수 있다. -- JION 전에 1:1 관계를 만들어 JOIN을 실행 select A.NM , A.CD from TBL_A A left join ( select distinct NM, CD from TBL_B ) as B on A.CD = B.CD -- 조인할 테이블에 먼저 distinct로 중복을 제거한 select문을 서브쿼리로 불러와 임시테이블로 만든뒤 조인한다- 그림으로 JOIN 정리하기

출처)
'SQL' 카테고리의 다른 글
[SQL] 키 정리 (0) 2023.11.07 [SQL] 관계선 정리 (0) 2023.11.07 sql html 태그 제거 쿼리문 (0) 2023.09.30 SQL UNION 간단하게 알아보기 (0) 2023.09.30 트랜잭션(Transaction)이란? (0) 2023.09.30 - INNER JOIN