[SQLD]「2」(2.4) 서브쿼리, 뷰, 집합 연산자
「1」 데이터 모델링의 이해
> 「2」 SQL 기본 / 활용
「3」 관리 구문
> 1. 서브쿼리
> 2. 뷰
> 3. 집합 연산자
4. 그룹 함수
5. 윈도우 함수
6. Top-N 쿼리
7. 셀프 조인
8. 계층 쿼리
1. 서브쿼리
Sub Query
⸰메인쿼리
: 바깥에 있는 쿼리,서브쿼리
: 안에 있는 쿼리

⸰ 서브쿼리의 위치에 따라 분류함
-스칼라 서브쿼리
: SELECT 절
-인라인 뷰
: FROM 절
-중첩 서브쿼리
: WHERE 절, HAVING 절
스칼라 서브쿼리
⸰ SELECT 절 등 칼럼이 올 수 있는 대부분의 위치에 사용 가능, 하나의 값만 반환해야 함
SELECT A.칼럼명1,
...
(SELECT B.칼럼명2,
...
FROM 테이블명2 B
WHERE B.공통칼럼명 = A.공통칼럼명) AS 칼럼명3,
...
FROM 테이블명1 A;
인라인 뷰
⸰ FROM 절 등 테이블명이 올 수 있는 위치에 사용 가능
SELECT A.칼럼명1,
...
B.칼럼명2,
...
FROM 테이블명1 A,
(SELECT 칼럼명3,
...
FROM 테이블명2) B
WHERE A.공통칼럼명 = B.공통칼럼명;
중첩 서브쿼리
⸰ WHERE 절과 HAVING 절에 사용 가능
⸰ 메인쿼리와의 관계에 따라 분류함
-연관 서브쿼리
: 서브쿼리 내 메인쿼리의 칼럼이 포함됨
SELECT 칼럼명1, 칼럼명2, ...
FROM 테이블명1 A
WHERE 칼럼명2 = (SELECT MAX(칼럼명2)
FROM 테이블명2 B
WHERE B.공통칼럼명 = A.공통칼럼명);
-비연관 서브쿼리
: 서브쿼리 내 메인쿼리의 칼럼이 포함되지 않음
SELECT 칼럼명1, 칼럼명2, ...
FROM 테이블명1
WHERE 칼럼명2 = (SELECT 칼럼명2
FROM 테이블명2
WHERE 칼럼명3 = 조건);
⸰ 반환하는 데이터의 형태에 따라 분류함
-단일 행 서브쿼리
: 서브쿼리가 1건 이하의 데이터를 반환
: 단일 행 비교 연산자와 사용(=
>
<
<=
>=
<>
)
SELECT 칼럼명1, 칼럼명2, ... FROM 테이블명
WHERE 칼럼명2 = (SELECT MAX(칼럼명2) FROM 테이블명);
-다중 행 서브쿼리
: 서브쿼리가 2건 이상의 데이터를 반환
: 다중 행 비교 연산자와 사용(IN
ALL
ANY
SOME
EXISTS
)
SELECT 칼럼명1, 칼럼명2, ... FROM 테이블명1
WHERE 칼럼명2 IN (SELECT 칼럼명2 FROM 테이블명2);
-다중 칼럼 서브쿼리
: 서브쿼리가 여러 칼럼의 데이터를 반환
SELECT 칼럼명1, 칼럼명2, 칼럼명3, ... FROM 테이블명1
WHERE (칼럼명2, 칼럼명3) IN (SELECT 칼럼명2, 칼럼명5
FROM 테이블명2
WHERE 칼럼명5 = 조건);
2. 뷰
View
⸰ 특정 SELECT 문에 이름을 붙여 재사용이 가능하도록 저장한 가상 테이블
⸰ 실제 데이터를 저장되지 않고, SELECT 문으로 해당 데이터만 조회
⸰ 뷰의 특징
-보안성
: 보안이 필요한 칼럼을 제외하여 별도의 뷰로 생성하여 제공함으로 보안을 유지
-독립성
: 테이블 스키마가 변경되었을 경우, 애플리케이션은 변경하지 않고 뷰만 수정
-편리성
: 복잡한 쿼리 구문을 뷰로 단축시켜 가독성 높이고, 편리하게 사용
CREATE OR REPLACE VIEW 뷰명 AS
SELECT A.칼럼명1,
...
B.칼럼명2,
...
FROM 테이블명1 A LEFT OUTER JOIN 테이블명2 B
ON A.동일칼럼명 = B.동일칼럼명;
3. 집합 연산자
집합 연산자
⸰ 각 쿼리의 결과 집합을 가지고 연산을 하는 명령어
⸰UNION
ALL
UNION
INTERSECT
MINUS/EXCEPT
√. 출력 시 헤더값은 첫 번째 쿼리를 따라감
√. 대응되는 칼럼의 수가 서로 다른 경우 에러 발생
√. 대응되는 식의 데이터 유형이 서로 다른 경우 에러 발생
UNION ALL
⸰ Query1의 결과와 Query2의 결과를 합하여 출력,중복 포함

SELECT 칼럼명1, ... FROM 테이블명1
UNION ALL
SELECT 칼럼명2, ... FROM 테이블명2;
UNION
⸰ Query1의 결과와 Query2의 결과를 합하여 출력,중복 제거
√. UNION과 UNION ALL이 같은 결과를 도출하는 경우, 중복 제거 과정 때문에 UNOIN이 성능상 불리

SELECT 칼럼명1, ... FROM 테이블명1
UNION
SELECT 칼럼명2, ... FROM 테이블명2;
INTERSECT
⸰ Query1의 결과와 Query2의 결과의 공통된 부분만 출력,중복 제거

SELECT 칼럼명1, ... FROM 테이블명1
INTERSECT
SELECT 칼럼명2, ... FROM 테이블명2;
MINUS / EXCEPT
⸰ Query1의 결과에서 Query2의 결과를 제거하여 출력,중복 제거

SELECT 칼럼명1, ... FROM 테이블명1
MINUS
SELECT 칼럼명2, ... FROM 테이블명2;
유선배 SQLD 과외노트
'💠기타 > 자격증' 카테고리의 다른 글
[SQLD]「2」(2.6) RANK, MAX/AVG/SUM, WINDOWING 절 (0) | 2024.06.20 |
---|---|
[SQLD]「2」(2.5) ROLLUP/CUBE/GROUPING SETS/GROUPING (0) | 2024.06.20 |
[SQLD]「2」(2.3) JOIN, STANDARD JOIN (1) | 2024.06.18 |
[SQLD]「2」(2.2) WHERE 절, GROUP BY 절/HAVING 절, ORDER BY 절 (0) | 2024.06.17 |
[SQLD]「2」(2.1) SELECT 문, 다양한 함수 (0) | 2024.05.31 |