반응형
서브쿼리 정의
하나의 쿼리 안에 포함된 또 하나의 쿼리 메인 쿼리가 서브쿼리를 포함하는 종속적인 관계
특징
알려지지 않은 기준을 이용한 검색
메인 쿼리 실행 이전 한 번만 실행
한 문장에 여러번 사용가능
기존의 검색 방법
사원 급여를 알고 있는 상태에서 더 높은 급여를 받는 사원을 조회
SELECT * FROM employee
WHERE 급여 > 2500;
사원 mj의 급여를 알지 못해도 검색 가능
SELECT * FROM employee
WHERE 급여 >
(SELECT 급여 FROM employee WHERE 이름=‘mj’);
서브쿼리 사용시 주의사항
- 서브쿼리는 괄호와 함께 사용되어야 한다.
- 서브쿼리 안에서 ORDER BY 절은 사용할 수 없음
- 서브쿼리는 연산자의 오른쪽에 사용되어야 함
- 서브쿼리는 오로지 SELECT 문으로 작성 가능
서브쿼리 기본문법
SELECT * FROM employee
WHERE 급여 >
(SELECT 급여 FROM employee WHERE 이름=‘elice’);
단일 행 서브쿼리
결과가 한 행만 나오는 서브쿼리, 서브쿼리 결과를 1개만 반환하고 이 결과를 메인쿼리로 전달
단일 행 서브쿼리 기본 문법
- 사원번호는 기본적으로 1개만 있으므로 한 개의 행만 반환함 = 단일 행
SELECT * FROM employee
WHERE 급여 >
(SELECT 급여 FROM employee WHERE 사원번호 = 1);
단일 행 서브쿼리 연산자
다중 행 서브쿼리 정의
서브쿼리 결과를 2개 이상 반환, 이 결과를 메인쿼리로 전달
다중 행 서브쿼리 기본 문법
SELECT * FROM employee
WHERE 급여 IN (
SELECT max(급여) FROM employee GROUP BY 부서번호);
다중 행 연산자
일반적인 서브쿼리 형태
WHERE 절에 사용되는 서브쿼리 가장 일반적인 형태의 서브쿼리
SELECT * FROM employee
WHERE 급여 >
(SELECT 급여 FROM employee WHERE 이름=‘mj’);
스칼라 서브쿼리
SELECT 절에서 사용하는 서브쿼리 스칼라 서브쿼리는 오로지 한 행만 반환함
JOIN과 같은 결과를 반환
SELECT students.name, (
SELECT math
FROM middle_test as m
WHERE m.student_id = students.student_id
) AS middle_avg
FROM students;
'SQL 이것저것' 카테고리의 다른 글
[SQL] 계층형 질의 (0) | 2022.08.30 |
---|---|
[SQL] Standard SQL (2) | 2022.08.30 |
[SQL] SQL 함수 (0) | 2022.08.12 |
[SQL] DML(데이터 조작어) 다루기 (0) | 2022.08.11 |
[SQL] SQL 데이터 다루기 (0) | 2022.08.05 |