SELECT 조회할 열 목록
FROM 첫 번째 테이블
INNER JOIN 두 번째 테이블
ON 조인 조건
[WHERE 검색 조건];
-- Implicit Inner Join 예시
SELECT *
FROM lesson l, princes p
WHERE l.id = p.id;
-- Explicit Inner Join 예시
SELECT *
FROM lesson l
INNER JOIN prices p
ON l.id = p.id;
-- Non-equi Join + Implicit Inner Join 예시
-- 각 직원의 급여를 10%인상한 경우 급여 등급을 검색한다
SELECT e.eno, e.ename, e.sal, s.grade
FROM salgrade s, emp e
WHERE e.sal BETWEEN s.losal AND s.hisal;
- OUTER JOIN 외부 조인
조건에 일치하는 데이터와 일치하지 않는 데이터를 모두 가지고 옴
한쪽 테이블에만 데이터가 있어도 결과가 나옴
종류
FULL OUTER JOIN: 왼쪽 또는 오른쪽 테이블의 모든 값이 출력되는 조인 ❗오라클은 지원함. MySQL/MariaDB는 지원 X 👉 UNION 사용
LEFT OUTER JOIN: 왼쪽 테이블의 모든 값이 출력되는 조인
RIGHT OUTER JOIN: 오른쪽 테이블의 모든 값이 출력되는 조인
SELECT 조회할 열 목록
FROM 첫 번째 테이블(LEFT 테이블)
LEFT/RIGHT/FULL OUTER JOIN 두 번째 테이블(RIGHT 테이블)
ON 조인 조건
[WHERE 검색 조건];
-- LEFT OUTER JOIN 예시
SELECT *
FROM lesson l
LEFT OUTER JOIN prices s
ON l.id = s.id;
-- RIGHT OUTER JOIN 예시
-- lesson 테이블의 id=3인 데이터를 지우고 실행
SELECT *
FROM lesson l
RIGHT OUTER JOIN prices s
ON l.id = s.id;
-- FULL OUTER JOIN 예시
-- lesson 테이블의 id=3인 데이터를 지우고 실행
SELECT *
FROM lesson l
FULL OUTER JOIN prices s
ON l.id = s.id;
-- UNION 예시
SELECT *
FROM lesson l
LEFT OUTER JOIN prices s
ON l.id = s.id
UNION
SELECT *
FROM lesson l
RIGHT OUTER JOIN prices s
ON l.id = s.id;
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN (or UNION)
INNER JOIN과는 달리 존재하지 않는 데이터는 NULL로 SELECT
FULL OUTER JOIN =LEFT OUTER JOIN + RIGHT OUTER JOIN
- CROSS JOIN 상호 조인
= 카티션 곱 (CARTESIAN PRODUCT)
곱집합
한쪽 테이블의 모든 행과 다른쪽 테이블의 모든 행을 조인시키는 기능
상호 조인 결과의 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 수만큼임
SELECT *
FROM 첫 번째 테이블
CROSS JOIN 두 번째 테이블;
-- 예시
SELECT *
FROM lesson
CROSS JOIN prices;
lesson 테이블에는 4개의 데이터가 존재하고 PRICES 테이블에는 3개의 데이터가 존재함 👉 12개의 결과 출력
- SELF JOIN 자체 조인
자기 자신과 조인하므로 1개의 테이블을 사용함
자기 자신을 가지고 JOIN 하므로 어느 쪽의 열을 명시하는지 애매한 문제가 발생함 👉 SELF JOIN 시 별칭을 사용하는 것이 권고됨
SELECT 조회할 열 목록
FROM <테이블> 별칭A
INNER JOIN <테이블> 별칭B
ON 조인 조건
[WHERE 검색 조건];
-- 예시
SELECT *
FROM lesson l1
INNER JOIN lesson l2
ON l1.id = l2.id;