반응형
SQL - 서브쿼리(subquery) 개념 및 사용법
목차
- 서브쿼리란?
- 서브쿼리 사용예제
- 단일행 서브쿼리
- 다중행 서브쿼리
1. 서브쿼리란?
서브쿼리(subquery)란 SQL문 내부에서 사용되는 SQL SELECT문을 말합니다.
아래의 쿼리문 예시에서 검정색 쿼리문이 메인쿼리이고, 뒤에 조건식 이후의 파랑색 쿼리문이 서브쿼리가 됩니다. 서브쿼리는 말 그대로 전체 메인쿼리안에 서브로 사용되는 쿼리문을 말합니다.
ex) SELECT * FROM usertable1 WHERE 조건식 (SELECT * FROM usertable2 WHERE 조건식);
2. 서브쿼리 사용예제
1) 단일행 서브쿼리 - 서브쿼리의 실행결과가 하나인 경우
서브쿼리의 값을 단일 연산자 (=, <, >, <=, >==, <>, ^=, !=)를 사용하여 비교할 수 있습니다.
ex) SELECT * FROM usertable WHERE age < (SELECT age FROM usertable WHERE name='John');
- 파랑색 (서브쿼리) : usertable에서 John의 나이를 구함
- 검정색 (메인쿼리) : usertable에서 (서브쿼리)의 값보다 나이가 적은 사람들의 목록을 구함
- 최종결과는 결국 usertable에서 John 보다 나이가 적은 사람들의 목록을 구함
2) 다중행 서브쿼리 - 서브쿼리의 실행결과가 여러개인 경우
서브쿼리의 값이 여러개인 경우 단일 연산자 사용이 불가능 하므로, 다중행 연산자 (IN, ANY, SOME, ALL, EXISTS)를 사용하여 비교할 수 있습니다.
ex) SELECT * FROM usertable WHERE score IN (SELECT MAX(score) FROM usertable GROUP BY class);
- 파랑색(서브쿼리) : usertable에서 각 반(class)별 최고점수(score)를 산출
- 검정색(메인쿼리) : usertable에서 (서브쿼리)의 값들과 일치하는 사람들의 목록을 구함
- 최종결과는 결국 usertable에서 각 반(class)별 최고점수(score)와 일치하는 사람들의 목록을 구함
반응형