본문 바로가기
Database

[SQL] 서브쿼리

by hunbal 2023. 2. 12.
SMALL

서브쿼리 (Sub Query)

 

SELECT 쿼리문 안에 포함 되어있는 또 하나의 별도 SELECT 쿼리문을 말한다.

 

 

1. 단일 행 서브쿼리 (Single Row SubQuery)

SELECT절에서 단일 행 연산자를 사용하여 서브쿼리의 결과 값을 하나만 출력하는 쿼리이다.

 

(※ 단일 행 연산자)

: >, <, =, <=, >=, !=, <>

 

1-1) 쿼리 예제

SELECT * 
    FROM [테이블 A]
    WHERE [컬럼 명] [단일 행 연산자] (SELECT [컬럼명] FROM [테이블 B] WHERE [조건절])
    
/* 단일 행 연산자를 사용하여 결과 값을 하나만 도출해내는 형식*/

/* 테이블 예시 */
tb_Student 테이블
tb_StudentInfo 테이블

---------------------------------------------------------
tb_Student 테이블		tb_StudentInfo 테이블
ID	NAME 				S_ID	S_WEIGHT
1	원석				1	  50
2	경록				2	  75
3	치혁				3	  80
4	준석				4	  65
---------------------------------------------------------

-- 단일 행 서브쿼리
SELECT ID, NAME
	FROM TB_Student
    	WHERE ID = (SELECT S_ID 
    		FROM tb_StudentInfo
                WHERE S_WEIGHT < 60)
                
-- 결과 값
tb_Student
ID	NAME
1	원석

 

위의 예제처럼 단일 행 연산자를 사용해서 하나의 결과 값을 도출하는 것이 단일 행 서브쿼리이다.

 


2. 다중 행 서브쿼리 (Multi Row SubQuery)

SELECT절에서 다중 행 연산자를 사용하여 서브쿼리의 여러개의 결과 값을 출력하는 쿼리이다.

(단일 행 서브쿼리와 비교해보면 연산자만 바뀌고 하나가 아닌 여러 값을 출력하는 차이가 있음.)

 

(※ 다중 행 연산자)

: IN, ANY, ALL

  • IN : 검색된 값 중에 하나만 일치하면 True
  • ANY : 검색된 값 중에서 조건에 맞는 것이 하나 이상이면 True
  • ALL : 모든 검색된 값과 조건이 맞을 경우 True

다중 행 연산자는 단일 행 서브쿼리에서도 사용할 수 있지만

반대로 단일 행 연산자는 다중 행 서브쿼리에서 사용할 수 없다!

 

 

2-1) 쿼리 예제

 
 
SELECT * 
    FROM [테이블 A]
    WHERE [컬럼 명] [다중 행 연산자] (SELECT [컬럼명] FROM [테이블 B] WHERE [조건절])
    
/* 다중 행 연산자를 사용하여 조건에 맞는 여러개의 결과 값을 도출해내는 형식*/

/* 테이블 예시 */
tb_Student 테이블
tb_StudentInfo 테이블

---------------------------------------------------------
tb_Student 테이블		tb_StudentInfo 테이블
ID	NAME 				S_ID	S_WEIGHT
1	원석				1	  50
2	경록				2	  75
3	치혁				3	  80
4	준석				4	  65
---------------------------------------------------------

-- 다중 행 서브쿼리
SELECT ID, NAME
	FROM TB_Student
    	WHERE ID <> (SELECT S_ID 
    		FROM tb_StudentInfo
                WHERE S_WEIGHT < 70)
                
-- 결과 값
tb_Student
ID	NAME
2	경록
3	치혁

 


 

3. 다중 열 서브쿼리 (Multi Column SubQuery)

다중 열 서브쿼리란 여러 개의 컬럼을 검색 하는 서브쿼리이다.

 

특징

  • Oracle, MariaDB 지원 O, SQL Server 지원 X
  • 비교 대상 컬럼과 1:1로 비교하여 검색하기때문에 비교 대상과 컬럼 개수가 반드시 일치해야함.
  • 주로 비교할 때는 IN을 사용하여 비교한다. 

 

3-1) 쿼리 예제

SELECT * 
    FROM [테이블 A]
    WHERE [컬럼 1], [컬럼 2], ... IN (SELECT [컬럼1], [컬럼 2], ... FROM [테이블 B] WHERE [조건절])
    
/* 다중 열 연산자를 사용하여 조건에 맞는 여러개의 컬럼 값을 도출해내는 형식*/

/* 테이블 예시 */
tb_Student 테이블

---------------------------------------------------------
tb_Student 테이블
ID	NAME 	AGE		WEIGHT
1	원석	26	  	50
2	경록	25	  	75
3	치혁	25	  	80
4	준석	24	  	65
5       용석    24              55
---------------------------------------------------------

-- 다중 열 서브쿼리 (나이별 가장 많은 몸무게를 차지하는 사람 조회)
SELECT ID, NAME, AGE, WEIGHT
	FROM TB_Student
    	WHERE (AGE,WEIGHT) IN (SELECT AGE,MAX(WEIGHT) 
        FROM tb_Student
        GROUP BY AGE)
                
-- 결과 값
tb_Student
ID	NAME 	AGE		WEIGHT
1       원석    26              50
3	치혁	25	  	80
4	준석	24	  	65

 

 

'Database' 카테고리의 다른 글

[SQL] 프로시저와 트리거의 차이점  (0) 2023.02.12
[SQL] RANK, DENSE_RANK, ROW_NUMBER 순위함수  (0) 2023.02.12
[SQL] 인라인 뷰 (Inline View)  (0) 2023.02.12
[SQL] 뷰(VIEW)  (0) 2023.02.12
[SQL] 집합연산자  (0) 2023.02.09

댓글