🟨 목 차 🟨
1. 서브쿼리 란 ?
1-1. 서브쿼리의 장점
1-2. 서브쿼리와 JOIN,UNION 가독성 비교
1-3. FROM 절의 서브쿼리
저번 시간에 여러 개의 SELECT 문의 결과를 하나의 테이블로 표현할 때 사용하는 UNION/ UNION ALL 에 대해 알아보았습니다.
오늘 시간에는 다른 쿼리 내부에 포함되어 있는 SELECT문인 서브쿼리(SUBQUERY)에 대해 알아봅시다 :)
◼️ 1. 서브쿼리 란 ? ◼️
서브쿼리(SUBQUERY)란 다른 쿼리 내부에 포함되어 있는 SELECT문을 의미한다.
서브쿼리를 포함하고 있는 쿼리를 외부쿼리(outer query)라고 부르며, 서브쿼리는 내부쿼리(inner query)라고 부른다.
※ 서브쿼리는 반드시 괄호()로 감싸져야 한다.
MYSQL에서 서브쿼리를 포함할 수 있는 외부쿼리는 [ SELECT, INSERT, UPDATE, DELETE, SET, DO ] 문이 있다.
서브쿼리는 또 다시 다른 서브쿼리 안에 포함될 수 있다.
[주소가 서울인 고객이 예약한 예약 정보만을 선택하는 예제]
① SELECT ID, ReserveDate, RoomNum
FROM Reservation
② WHERE Name IN (SELECT Name
FROM Customer
WHERE Address = '서울')
==> 1번 라인의 SELECT문은 외부쿼리이며, 2번 라인의 SELECT 문은 서브쿼리이다. 2번 라인의 서브쿼리가 먼저 실행되어 Customer 테이블의 Address 필드의 값이 '서울'인 레코드의 Name 필드를 모두 선택하고 그 다음으로 1번 라인의 외부커리가 실행되어 Reservation 테이블에서 서브쿼리에 의해 선택된 결과 집합에 포함된 Name 필드와 일치하는 레코드만을 다시 선택한다.
◼️ 1-1. 서브쿼리의 장점
- 서브쿼리는 쿼리를 구조화시키므로, 쿼리의 각 부분을 명확히 구분할 수 있게 해준다.
- 서브쿼리는 복잡한 JOIN이나 UNION과 같은 동작을 수행할 수 있는 또 다른 방법을 제공한다.
- 서브쿼리는 복잡한 JOIN이나 UNION 보다 좀 더 읽기 편하다.
◼️ 1-2. 서브쿼리와 JOIN,UNION 가독성 비교
[JOIN을 사용하여 주소가 서울인 고객이 예약한 예약 정보만을 선택하는 예제]
SELECT r.ID, r.ReserveDate, r.RoomNum
FROM Reservation AS r, Customer AS c
WHERE c.Address = '서울' AND r.Name = c.Name;
==> 쿼리가 복잡한 경우에 JOIN 이나 UNION을 사용하는 것보다 서브쿼리를 사용하는 것이 가독성 측면에서 좋을 수 있다.
◼️ 1-3. FROM 절의 서브쿼리
서브쿼리는 SELECT문의 FROM절 에서도 사용할 수 있다. 이때 서브쿼리에 의해 선택된 FROM 결과 집합은 FROM절에서 하나의 테이블로써 사용된다.
[ 뷰처럼 결과가 동적으로 생성된 테이블로 사용할 수 있다. ]
[문법]
SELECT ...
FROM (서브쿼리) [AS] 이름
...
==> SELECT 문의 FROM절에서 사용되는 모든 테이블에는 이름이 필요하다. 따라서 FROM 절에서 사용되는 서브쿼리는 반드시 이름을 정의해야 한다.
[예제]
SELECT Name, ReservedRoom
① FROM (SELECT Name, ReserveDate, (RoomNum + 1) AS ReservedRoom
FROM Reservation
② WHERE RoomNum > 1001) AS ReservationInfo;
==> 우선 1번 라인의 서브쿼리가 먼저 실행된다. 해당 서브쿼리는 Reservation 테이블에서 RoomNum 필드의 값이 1001 이상인 레코드를 찾은 후에 RoomNum 필드값을 1씩 증가시킨다. 그리고 해당 결과 집합은 2번 라인에서 REservationinfo 라는 이름의 임시 테이블로 만들어진다. 그 후 외부쿼리에서는 이렇게 만들어진 임시 테이블에서 Name, ReservedRoom 필드만 선택한다.
'DB > MySQL' 카테고리의 다른 글
My SQL 테이블 제약 조건 feat.Workbench (0) | 2022.08.21 |
---|---|
MySQL 테이블에서 원하는 데이터 쉽고 빠르게 찾기(INDEX) feat.Workbench (0) | 2022.08.20 |
MySQL 여러개의 SELECT 합치기(UNION) feat. Workbench (0) | 2022.08.19 |
MySQL 테이블 레코드 조합(JOIN) feat.Workbench (0) | 2022.08.19 |
MySQL 기본문법 feat.Workbench (0) | 2022.08.19 |