JOIN
- DB 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현해줌
INNER JOIN
- 첫 번째 테이블과 두 번째 테이블의 필드가 서로 일치하는 레코드만을 가져옴
SELECT * FROM
T1 INNER JOIN T2
ON T1.name = T2.name
# 또는
SELECT * FROM
T1 JOIN T2
ON 조건
# 다음과 같이 조인 구문 생략 가능
SELECT
FROM T1, T2
WHERE T1.name = T2.name
# T1과 T2 모두에 속한 열을 기준으로 Inner join
SELECT
T1 NATURAL JOIN T2
LEFT JOIN
- 첫 번째 테이블을 기준으로, 두 번째 테이블을 조합하는 JOIN
- ON 절의 조건을 만족하지 않는 경우에는 첫 번째 테이블의 필드 값은 그대로 가져오며
- 해당 레코드의 두 번째 테이블의 필드 값은 모두 NULL로 표시됨
RIGHT JOIN
- LEFT JOIN과는 반대로 두 번째 테이블을 기준으로, 첫 번째 테이블을 조합하는 JOIN
UNION
- 여러 개의 SELECT 문의 결과를 하나의 테이블이나 결과 집합으로 표현할 때 사용
- 각각의 SELECT 문으로 선택된 필드의 개수와 타입은 모두 같아야 하며, 필드의 순서 또한 같아야 함
SELECT 필드이름
FROM 테이블이름
UNION
SELECT 필드이름
FROM 테이블이름
# 예시
SELECT Name
FROM Reservation
UNION
SELECT Name
FROM Customer
UNOIN ALL
- UNION은 DISTINCT 키워드를 따로 명시하지 않아도 기본적으로 중복되는 레코드 제거
- 따라서 중복되는 레코드까지 모두 출력하고 싶다면 ALL 키워드 사용
# 예시
SELECT Name
FROM Reservation
UNION ALL
SELECT Name
FROM Customer
서브쿼리
- 다른 쿼리 내부에 포함되어 있는 SELECT 문을 의미함
- 서브쿼리를 포함하고 있는 쿼리를 외부쿼리(outer query)라고 부르며, 서브쿼리는 내부쿼리(inner query)라고도 부름
- 서브쿼리는 반드시 괄호로 감싸져 있어야만 함
# 예시 1
① SELECT ID, ReserveDate, RoomNum
FROM Reservation
② WHERE Name IN (SELECT Name
FROM Customer
WHERE Address = '서울')
# 예시 2
① SELECT Name, ReservedRoom
② FROM (SELECT Name, ReserveDate, (RoomNum + 1) AS ReservedRoom
FROM Reservation
WHERE RoomNum > 1001) AS ReservationInfo;
서브쿼리의 특징
- 서브쿼리는 쿼리를 구조화시키므로, 쿼리의 각 부분을 명확히 구분 가능
- 서브쿼리는 복잡한 JOIN이나 UNION과 같은 동작을 수행할 수 있는 또 다른 방법이며 좀 더 읽기 편해짐
'MySQL' 카테고리의 다른 글
[MySQL] MySQL 주요 문법 및 함수 정리 - 흐름 제어/패턴 매칭/타입 변환 (0) | 2023.05.13 |
---|