작성완료

MySQL 서브쿼리
서브쿼리는 다른 쿼리 내부에 포함된 SELECT 문으로, 외부쿼리와 내부쿼리로 구분된다. 서브쿼리는 괄호로 감싸야 하며, SELECT, INSERT, UPDATE, DELETE, SET, DO 문에서 사용할 수 있다. 서브쿼리는 쿼리를 구조화하고 복잡한 JOIN이나 UNION을 대체할 수 있으며, FROM 절에서도 사용 가능하다. 예를 들어, tb_user 테이블에서 ADDR_ID가 서울인 레코드를 조회하는 서브쿼리 사용법이 설명된다.
서브쿼리
서브쿼리(subquery)란 다른 쿼리 내부에 포함되어 있는 SELETE 문을 의미한다.
- 서브쿼리를 포함하고 있는 쿼리를 외부쿼리(outer query)라고 부르며, 서브쿼리는 내부쿼리(inner query)라고도 부른다.
- 서브쿼리는 반드시 괄호(소괄호)로 감싸져 있어야만 한다.
- MySQL에서 서브쿼리를 포함할 수 있는 외부쿼리는
SELECT,INSERT,UPDATE,DELETE,SET,DO문이 있다.
서브쿼리의 특징
- 서브쿼리는 쿼리를 구조화시키므로, 쿼리의 각 부분을 명확히 구분할 수 있게 해준다.
- 서브쿼리는 복잡한
JOIN이나UNION과 같은 동작을 수행할 수 있는 또 다른 방법을 제공다. - 서브쿼리는 복잡한
JOIN이나UNION보다 좀 더 읽기 편하다.
**FROM**절의 서브쿼리
서브쿼리는 SELECT 문의 FROM 절에서도 사용할 수 있고, 이때 서브쿼리에 의해 선택된 결과 집합은 FROM 절에서 하나의 테이블로써 사용된다.
SELECT ...
FROM (서브쿼리) AS 이름
SELECT문의FROM절에서 사용 되는 모든 테이블에는 이름이 필요한다.FROM절에서 사용 되는 서브쿼리는 위의 문법처럼 반드시 이름을 정의해야 한다.
예제
tb_user 테이블
| ID | NAME | AGE | ADDR_ID |
|---|---|---|---|
| 1 | 홍길동 | 26 | 1 |
| 2 | 홍길순 | 24 | 3 |
| 3 | 홍길동 | 31 | 7 |
tb_addr 테이블
| ID | ADDR |
|---|---|
| 1 | 서울 |
| 2 | 부산 |
| 3 | 인천 |
| 4 | 광주 |
| 5 | 울산 |
| 6 | 대구 |
| 7 | 대전 |
SELECT *
FROM tb_user
WHERE ADDR_ID IN (
SELECT ID
FROM tb_addr
WHERE ADDR = '서울'
)
| ID | NAME | AGE | ADDR_ID |
|---|---|---|---|
| 1 | 홍길동 | 26 | 1 |
tb_user테이블의SELECT문은 외부쿼리이며tb_addr테이블의SELECT문은 서브쿼리이다.- 서브쿼리가 먼저 실행되어
tb_addr테이블의ADDR필드의 값이 '서울'인 레코드의 ID를 조회한다. ADDR필드의 값이 '서울'인 ID는1이고,tb_user테이블에서ADDR_ID필드의 값이1인 레코드만 조회한다.