MySQL

[MySQL] MySQL 주요 문법 및 함수 정리 - 다중 테이블 연산

se-mumu 2023. 5. 13. 23:40

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;

서브쿼리의 특징

  1. 서브쿼리는 쿼리를 구조화시키므로, 쿼리의 각 부분을 명확히 구분 가능
  2. 서브쿼리는 복잡한 JOIN이나 UNION과 같은 동작을 수행할 수 있는 또 다른 방법이며 좀 더 읽기 편해짐