sanguk.dev
작성완료
MySQL 서브쿼리

MySQL 서브쿼리

서브쿼리는 다른 쿼리 내부에 포함된 SELECT 문으로, 외부쿼리와 내부쿼리로 구분된다. 서브쿼리는 괄호로 감싸야 하며, SELECT, INSERT, UPDATE, DELETE, SET, DO 문에서 사용할 수 있다. 서브쿼리는 쿼리를 구조화하고 복잡한 JOIN이나 UNION을 대체할 수 있으며, FROM 절에서도 사용 가능하다. 예를 들어, tb_user 테이블에서 ADDR_ID가 서울인 레코드를 조회하는 서브쿼리 사용법이 설명된다.

MySQL

서브쿼리

서브쿼리(subquery)란 다른 쿼리 내부에 포함되어 있는 SELETE 문을 의미한다.

  • 서브쿼리를 포함하고 있는 쿼리를 외부쿼리(outer query)라고 부르며, 서브쿼리는 내부쿼리(inner query)라고도 부른다.
  • 서브쿼리는 반드시 괄호(소괄호)로 감싸져 있어야만 한다.
  • MySQL에서 서브쿼리를 포함할 수 있는 외부쿼리는 SELECT, INSERT, UPDATE, DELETE, SET, DO 문이 있다.

서브쿼리의 특징

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

**FROM**절의 서브쿼리

서브쿼리는 SELECT 문의 FROM 절에서도 사용할 수 있고, 이때 서브쿼리에 의해 선택된 결과 집합은 FROM 절에서 하나의 테이블로써 사용된다.

sql
SELECT ...
FROM (서브쿼리) AS 이름
  • SELECT 문의 FROM 절에서 사용 되는 모든 테이블에는 이름이 필요한다.
  • FROM 절에서 사용 되는 서브쿼리는 위의 문법처럼 반드시 이름을 정의해야 한다.

예제

tb_user 테이블

IDNAMEAGEADDR_ID
1홍길동261
2홍길순243
3홍길동317

tb_addr 테이블

IDADDR
1서울
2부산
3인천
4광주
5울산
6대구
7대전
sql
SELECT *
FROM tb_user
WHERE ADDR_ID IN (
  SELECT ID
  FROM tb_addr
  WHERE ADDR = '서울'
)
IDNAMEAGEADDR_ID
1홍길동261
  1. tb_user 테이블의 SELECT문은 외부쿼리이며 tb_addr 테이블의 SELECT문은 서브쿼리이다.
  2. 서브쿼리가 먼저 실행되어 tb_addr 테이블의 ADDR 필드의 값이 '서울'인 레코드의 ID를 조회한다.
  3. ADDR 필드의 값이 '서울'인 ID는 1이고, tb_user 테이블에서 ADDR_ID 필드의 값이 1인 레코드만 조회한다.