JOIN
- INNER JOIN : 교집합 (NULL인 값이 있는 행은 보여주지 않음)
- LEFT JOIN : A + A와 B의 교집합 (B가 NULL이어도 값을 표시해 준다)
- RIGHT JOIN : B + B와 A의 교집합 (A가 NULL이어도 값을 표시해 준다)
- FULL OUTER JOIN: A와 B 전부
INNER JOIN
ON을 생략하면 동일한 이름을 가진 칼럼으로 INNER JOIN 수행
SELECT A.ID, B.ID
FROM A [INNER] JOIN B ON A.ID = B.ID;
여러 개 테이블 JOIN 가능 (다른 OUTER JOIN 종류도 가능)
SELECT A.ID, B.ID, C.PID
FROM A INNER JOIN B ON A.UID = B.UID
JOIN C ON B.PID=C.PID;
OUTER JOIN
- LEFT JOIN
- 왼쪽 테이블과 오른쪽 테이블 JOIN, 오른쪽 테이블에 일치하는 행이 없는 경우 오른쪽 테이블 값을 NULL로 표시한 후 반환 → 왼쪽 테이블의 내용이 전부 출력된다
- RIGHT JOIN
- 왼쪽 테이블과 오른쪽 테이블 JOIN, 왼쪽 테이블에 일치하는 행이 없는 경우 왼쪽 테이블 값을 NULL로 표시한 후 반환 → 오른쪽 테이블의 내용이 전부 출력된다
- FULL JOIN
- 두 테이블을 JOIN, 각 테이블에 일치하는 행이 없으면 NULL로 표시한 후 반환 → 두 테이블의 내용이 전부 출력된다.
SELECT A.ID, B.ID
FROM A [LEFT/RIGHT/FULL] [OUTER] JOIN B ON A.ID = B.ID;
CROSS JOIN
두 테이블에서 가능한 모든 조합을 반환 (Cartesian product)
A 테이블 10개 행 X B 테이블 4개 행 = 총 40 개 행이 출력된다.
SELECT A.ID, B.ID
FROM A CROSS JOIN B;
// 단순히 SELECT를 하는 것과 동일한 결과
SELECT A.ID, B.ID
FROM A, B;
(추가) WITH
참고: https://www.geeksforgeeks.org/sql-with-clause/
쿼리 결과를 임시 테이블로 저장해서, WITH 절과 연결된 쿼리에서 임시 테이블을 사용할 수 있다.
서브 쿼리와 비슷하지만, 서브 쿼리의 경우 가독성이 떨어지고, 디버그가 복잡해진다.
WITH [임시 테이블명] AS (쿼리)
SELECT *
FROM [임시 테이블명]
ex)
WITH temporaryTable(averageValue) as
(SELECT avg(Salary)
from Employee)
SELECT EmployeeID,Name, Salary
FROM Employee, temporaryTable
WHERE Employee.Salary > temporaryTable.averageValue;
'CS > Backend' 카테고리의 다른 글
[JAVA] 예외 처리 (0) | 2023.05.28 |
---|---|
[MySQL] WINDOW 함수 (0) | 2023.05.26 |
[Java] Generic, 제네릭 (0) | 2023.05.26 |
[Java] 추상 클래스, 인터페이스 (0) | 2023.05.26 |
[MySQL] EXTRACT(part FROM date) (0) | 2023.05.26 |