티스토리 뷰
4절 서브 쿼리
서브쿼리
하나의 SQL문 안의 SQL문
메인쿼리 내에서 실행되며, 메인쿼리의 데이터 필터링, 값 제공, 존재 여부 확인등의 역할
사용 위치
- WHERE 절의 조건
- FROM 절의 인라인뷰
- SELECT 절에서 특정 값을 선 계산
서브쿼리의 분류
동작 방식에 따른 분류
비연관 서브쿼리
SELECT emp_id name, salary FROM Employee
WHERE salary = (SELECT MAX(salary) FROM Employee);
메인쿼리 칼럼을 가지고 있지 않는 서브쿼리
서브쿼리가 먼저 실행되며, 그 결과는 메인쿼리와 독립적
메인쿼리에 값을 제공하기 위한 목적으로 주로 사용함
- Access Subquery: 제공자 역할
- Filter Subquery: 확인자 역할
- Early Filter Subquery: 데이터 필터링 역할
연관 서브쿼리
SELECT emp_id, name, salary FROM Employee E1
WHERE EXISTS (
SELECT 1 FROM Employee E2
WHERE E2.salary > E1.salary
);
메인쿼리의 결과를 조건이 맞는지 확인하기 위한 목적으로 주로 사용
메인쿼리의 값을 서브쿼리 내부에서 참조하며, 메인쿼리의 각 행에 대해 서브쿼리가 반복 시행됨
따라서 성능이 낮을 수 있음
반환 데이터 형태에 따른 분류
단일 행 서브쿼리
실행 결과가 1건 이하인 서브쿼리
단일 행 비교 연산자(=, <, >, <=, >=) 와 함께 사용
다중 행 서브쿼리
실행 결과가 여러 건인 서브쿼리
다중 행 비교 연산자와 함께 사용
• IN : 서브쿼리의 결과 중 하나의 값이라도 동일하면 참
• ANY : 서브쿼리의 결과 중 하나의 값이라도 만족하면 참
• ALL : 서브쿼리의 모든 결과값을 만족하면 참
• EXISTS : 서브쿼리의 결과가 존재하면 참, ‘WHERE EXISTS (SELECT ~)’ (항상 연관 서브쿼리로 사용)
다중 칼럼 서브쿼리
SELECT emp_id, name, department, salary
FROM Employee
WHERE (department, salary) IN (SELECT department, salary FROM Employee WHERE name = 'Alice');
실행 결과로 여러 칼럼 반환
주로 메인쿼리의 조건과 비교하기 위해 사용 (비교하고자 하는 칼럼의 개수와 위치가 동일해야 함)
스칼라 서브쿼리
SELECT emp_id, name, salary,
(SELECT AVG(salary) FROM Employee E2 WHERE E1.department = E2.department) AS avg_salary
FROM Employee E1;
값 하나를 반환하는 서브쿼리, SELECT절에 사용하는 서브쿼리
뷰
CREATE VIEW HighSalaryEmployees AS
SELECT emp_id, name, salary
FROM Employee
WHERE salary > 5000;
가상의 테이블, FROM절에 사용하는 뷰는 인라인 뷰(Inline View)라고 함
장점
- 독립성: 테이블 구조 변경 자동 반영
- 편리성: 쿼리를 단순하게 작성할 수 있음, 자주 사용하는 SQL문의 형태를 뷰로 생성하여 사용할 수 있음
- 보안성: 뷰를 생성할 때 칼럼을 제외할 수 있음
WITH
WITH HighSalary AS (
SELECT emp_id, name, salary FROM Employee WHERE salary > 5000
)
SELECT * FROM HighSalary;
서브쿼리를 이용하여 뷰로 사용할 수 있는 구문
최종 수정일 : 2025/03/07
틀린 사항이 있다면 댓글로 알려주시면 감사하겠습니다.
'SQL > SQLD 이론' 카테고리의 다른 글
| [SQLD] SQL 활용 : 6절 윈도우함수 (0) | 2025.03.07 |
|---|---|
| [SQLD] SQL 활용 : 5절 그룹 함수 (0) | 2025.03.07 |
| [SQLD] SQL 활용 : 3절 계층형 질의와 셀프 조인 (0) | 2025.03.07 |
| [SQLD] SQL 활용 : 2절 집합 연산자 (0) | 2025.03.07 |
| [SQLD] SQL 활용 : 1절 표준조인 (0) | 2025.03.07 |
- Total
- Today
- Yesterday
- dialect
- 배열
- db오브젝트
- 데이터베이스
- DB
- 테이블
- APS
- BufferedWriter
- 알고리즘
- BufferedReader
- Scanner
- 레코드
- SQL이란
- 자료구조
- 필드
- SQL
- StringBuilder
- DBMS
- oracle
- db의 역사
- Java
- 입출력
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |