✔ 서브쿼리
메인쿼리와 서브쿼리
- 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문
- SELECT 절, FROM 절, HAVING 절, ORDER BY 절 등에서 사용이 가능
- 메인쿼리의 결과가 서브쿼리로 제공될 수도 있고, 서브쿼리의 결과가 메인쿼리로 제공될 수도 있음
SELECT ...
FROM ...
WHERE ... (SELECT...
FROM...
WHERE...)
반환되는 데이터의 형태에 따른 서브쿼리 분류
- 단일 행 서브쿼리
- 서브쿼리의 실행 결과가 항상 1건 이하인 서브쿼리
- 단일 행 비교 연산자(=, <, <=, >, =>, <>)와 함께 사용
- 다중 행 서브쿼리
- 서브쿼리의 실행 결과가 여러 건이 서브쿼리
- 다중 행 비교 연산자(IN, ALL, ANY, SOME, EXISTS)와 함께 사용
- 다중 칼럼 서브쿼리
- 서브쿼리의 실행 결과로 여러 칼럼을 반환
- 메인쿼리의 조건절에 여러 칼럼을 동시에 비교할 수 있음
- 서브쿼리와 메인쿼리에서 비교하고자 하는 칼럼 개수와 칼럼의 위치가 동일해야 함
- SQL Server에서는 지원하지 않음
- 비연관 서브쿼리
- 서브쿼리가 메인쿼리 칼럼을 가지고 있지 않는 형태의 서브쿼리
- 메인쿼리에 서브쿼리가 실행된 결과 값을 제공하기 위한 목적으로 주로 사용
- 연관 서브쿼리
- 서브쿼리가 메인쿼리 칼럼을 가지고 있는 형태의 서브쿼리
- 메인쿼리가 먼저 수행되어 읽혀진 데이터를 서브쿼리에서 조건이 맞는지 확인하고자 할 때 주로 사용
- 그 밖에 위치에서 사용되는 서브쿼리
- SELECT 절에 사용하는 서브쿼리인 스칼라 서브쿼리
- FROM 절에 사용되는 서브쿼리인 인라인 뷰
- 그룹함수와 함께 사용되는 HAVING 절에 그룹핑된 결과에 대해 부가적인 조건을 추기 위해 서브쿼리 사용
- 그 외에 UPDATE문의 SET절, INSERT문의 VALUES절에 사용
서브쿼리를 사용 시 주의사항
- 서브쿼리는 괄호로 감싸서 사용함
- 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능
이때 단일 행 비교 연산자는 서브쿼리의 결과가 반드시 1건 이하여야 하고, 복수 행 비교 연산자는 결과 건수와 상관없음 - ORDER BY는 SELECT 절에서 오직 한 개만 올 수 있으므로 서브쿼리에서 사용하지 못하며 메인쿼리의 마지막 문장에 위치
인라인 뷰
- FROM 절에 사용되는 서브쿼리
- 서브쿼리의 결과가 마치 실행 시에 동적으로 생성된 테이블인 것처럼 사용할 수 있음
- SQL문이 실행될 때만 임시적으로 생성되는 동적인 뷰이기 때문에 데이터베이스에 해당 정보가 저장되지 않음
- 단지 정의만 가지고 있으며, 실행 시점에 질의를 재작성하여 수행
- 실제 데이터를 저장하고 있는 뷰를 생성하는 기능을 지원하는 DMBS도 있음
SELECT 속성명1, 속성명2, …
FROM (SELECT * FROM 테이블명) [AS]
WHERE 조건식;
뷰란?
- 실제 데이터를 가지고 있지 않고 단지 뷰 정의만을 가지고 있어
질의에서 뷰가 사용되면 뷰 정의를 참조해서 DBMS 내부적으로 질의를 재작성하여 질의를 수행 - 실제 데이터를 가지고 있지 않지만 테이블이 수행하는 역할을 수행하기 때문에 가상 테이블이라고도 함
뷰 사용의 장점
- 독립성
- 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 됨
- 편리성
- 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성할 수 있음
- 해당 형태의 SQL문을 자주 사용할 때 뷰를 이용하면 편리하게 사용할 수 있음
- 보안성
- 숨기고 싶은 정보가 존재한다면, 뷰를 생성할 때 해당 칼럼을 빼고 생성함으로써 사용자에게 정보를 감출 수 있음
// CREATE VIEW
CREATE VIEW 뷰명[(속성명[, 속성명, …])
AS SELECT문
// DROP VIEW
DROP VIEW 뷰명 [CASCADE | RESTRICT];
'Certificate > SQL개발자' 카테고리의 다른 글
[SQL개발자] SQL 활용 - 윈도우 함수 (0) | 2023.10.20 |
---|---|
[SQL개발자] SQL 활용 - 그룹 함수 (0) | 2023.10.20 |
[SQL개발자] SQL 활용 - 계층형 질의와 셀프 조인 (0) | 2023.10.20 |
[SQL개발자] SQL 활용 - 집합 연산자 (0) | 2023.10.20 |
[SQL개발자] SQL 활용 - 표준 조인 (0) | 2023.10.20 |
✔ 서브쿼리
메인쿼리와 서브쿼리
- 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문
- SELECT 절, FROM 절, HAVING 절, ORDER BY 절 등에서 사용이 가능
- 메인쿼리의 결과가 서브쿼리로 제공될 수도 있고, 서브쿼리의 결과가 메인쿼리로 제공될 수도 있음
SELECT ...
FROM ...
WHERE ... (SELECT...
FROM...
WHERE...)
반환되는 데이터의 형태에 따른 서브쿼리 분류
- 단일 행 서브쿼리
- 서브쿼리의 실행 결과가 항상 1건 이하인 서브쿼리
- 단일 행 비교 연산자(=, <, <=, >, =>, <>)와 함께 사용
- 다중 행 서브쿼리
- 서브쿼리의 실행 결과가 여러 건이 서브쿼리
- 다중 행 비교 연산자(IN, ALL, ANY, SOME, EXISTS)와 함께 사용
- 다중 칼럼 서브쿼리
- 서브쿼리의 실행 결과로 여러 칼럼을 반환
- 메인쿼리의 조건절에 여러 칼럼을 동시에 비교할 수 있음
- 서브쿼리와 메인쿼리에서 비교하고자 하는 칼럼 개수와 칼럼의 위치가 동일해야 함
- SQL Server에서는 지원하지 않음
- 비연관 서브쿼리
- 서브쿼리가 메인쿼리 칼럼을 가지고 있지 않는 형태의 서브쿼리
- 메인쿼리에 서브쿼리가 실행된 결과 값을 제공하기 위한 목적으로 주로 사용
- 연관 서브쿼리
- 서브쿼리가 메인쿼리 칼럼을 가지고 있는 형태의 서브쿼리
- 메인쿼리가 먼저 수행되어 읽혀진 데이터를 서브쿼리에서 조건이 맞는지 확인하고자 할 때 주로 사용
- 그 밖에 위치에서 사용되는 서브쿼리
- SELECT 절에 사용하는 서브쿼리인 스칼라 서브쿼리
- FROM 절에 사용되는 서브쿼리인 인라인 뷰
- 그룹함수와 함께 사용되는 HAVING 절에 그룹핑된 결과에 대해 부가적인 조건을 추기 위해 서브쿼리 사용
- 그 외에 UPDATE문의 SET절, INSERT문의 VALUES절에 사용
서브쿼리를 사용 시 주의사항
- 서브쿼리는 괄호로 감싸서 사용함
- 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능
이때 단일 행 비교 연산자는 서브쿼리의 결과가 반드시 1건 이하여야 하고, 복수 행 비교 연산자는 결과 건수와 상관없음 - ORDER BY는 SELECT 절에서 오직 한 개만 올 수 있으므로 서브쿼리에서 사용하지 못하며 메인쿼리의 마지막 문장에 위치
인라인 뷰
- FROM 절에 사용되는 서브쿼리
- 서브쿼리의 결과가 마치 실행 시에 동적으로 생성된 테이블인 것처럼 사용할 수 있음
- SQL문이 실행될 때만 임시적으로 생성되는 동적인 뷰이기 때문에 데이터베이스에 해당 정보가 저장되지 않음
- 단지 정의만 가지고 있으며, 실행 시점에 질의를 재작성하여 수행
- 실제 데이터를 저장하고 있는 뷰를 생성하는 기능을 지원하는 DMBS도 있음
SELECT 속성명1, 속성명2, …
FROM (SELECT * FROM 테이블명) [AS]
WHERE 조건식;
뷰란?
- 실제 데이터를 가지고 있지 않고 단지 뷰 정의만을 가지고 있어
질의에서 뷰가 사용되면 뷰 정의를 참조해서 DBMS 내부적으로 질의를 재작성하여 질의를 수행 - 실제 데이터를 가지고 있지 않지만 테이블이 수행하는 역할을 수행하기 때문에 가상 테이블이라고도 함
뷰 사용의 장점
- 독립성
- 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 됨
- 편리성
- 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성할 수 있음
- 해당 형태의 SQL문을 자주 사용할 때 뷰를 이용하면 편리하게 사용할 수 있음
- 보안성
- 숨기고 싶은 정보가 존재한다면, 뷰를 생성할 때 해당 칼럼을 빼고 생성함으로써 사용자에게 정보를 감출 수 있음
// CREATE VIEW
CREATE VIEW 뷰명[(속성명[, 속성명, …])
AS SELECT문
// DROP VIEW
DROP VIEW 뷰명 [CASCADE | RESTRICT];
'Certificate > SQL개발자' 카테고리의 다른 글
[SQL개발자] SQL 활용 - 윈도우 함수 (0) | 2023.10.20 |
---|---|
[SQL개발자] SQL 활용 - 그룹 함수 (0) | 2023.10.20 |
[SQL개발자] SQL 활용 - 계층형 질의와 셀프 조인 (0) | 2023.10.20 |
[SQL개발자] SQL 활용 - 집합 연산자 (0) | 2023.10.20 |
[SQL개발자] SQL 활용 - 표준 조인 (0) | 2023.10.20 |