자격증/SQL개발자(SQLD)
4-4장. SQL 활용(서브쿼리)
김엉배
2023. 5. 29. 16:20
728x90
반응형
SQLD 단원별 목록으로
1. 서브 쿼리(Subquery)
- 서브쿼리(Subquery)란 하나의 SQL문안에 포함되어 있는 또 다른 SQL문을 말한다.
- 서브쿼리는 메인쿼리 의 칼럼을 모두 사용할 수 있지만 메인쿼리는 서브쿼리의 칼럼을 사용할 수 없다.
- 서브쿼리를 사용할 때 다음 사항에 주의점
- 서브쿼리를 괄호로 감싸서 사용한다.
- 서브쿼리는 단일 행(Single Row) 또는 복수 행(Multiple Row) 비교 연산자와 함께 사용 가능하다. 단일 행 비교 연산자는
서브쿼리의 결과가 반드시 1건 이하이어야 하고 복수 행 비교 연산자는 서브쿼리의 결과 건수와 상관없다.
- 서브쿼리에서는 ORDER BY를 사용하지 못한다. ORDER BY절은 SELECT절에서 오직 한 개만 올 수 있기 때문에
ORDER BY절은 메인쿼리의 마지막 문장에 위치해야 한다.
2. 단일 행 서브 쿼리
- 서브쿼리가 단일 행 비교 연산자(=, <, <=, >, >=, <>)와 함께 사용할 때는 서브쿼리의 결과 건수가 반드시 1건 이하이어야 한다.
만약, 서브쿼리의 결과 건수가 2건 이상을 반환하면 SQL문은 실행시간(Run Time) 오류가 발생한다.
3. 다중 행 서브 쿼리
- 서브쿼리의 결과가 2건 이상 반환될 수 있다면 반드시 다중 행 비교 연산자(IN, ALL, ANY, SOME)와 함께 사용해야 한다.
그렇지 않으면 SQL문은 오류를 반환한다.
↓
4. 다중 칼럼 서브 쿼리
- 다중 칼럼 서브쿼리는 서브쿼리의 결과로 여러 개의 칼럼이 반환되어 메인쿼리의 조건과 동시에 비교되는 것을 의미한다.
5. 연관 서브 쿼리
- 연관 서브쿼리(Correlated Subquery)는 서브쿼리 내에 메인쿼리 칼럼이 사용된 서브쿼리이다.
- EXISTS 서브쿼리는 항상 연관 서브쿼리로 사용된다. 또한 EXISTS 서브쿼리의 특징은 아무리 조건을 만족하는 건이 여러
건이더라도 조건을 만족하는 1건만 찾으면 추가적인 검색을 진행하지 않는다.
6. 그 밖의 위치에서 사용하는 서브 쿼리
가) SELECT 절에 서브쿼리 사용하기
- 스칼라 서브쿼리는 한 행, 한 칼럼(1 Row 1 Column)만을 반환하는 서브쿼리 를 말한다. 스칼라 서브쿼리는 칼럼을 쓸 수 있는
대부분의 곳에서 사용할 수 있다. - 스칼라 서브쿼리 또한 단일 행 서브쿼리이기 때문에 결과가 2건 이상 반환되면 SQL문은 오류를 반환한다.


나) FROM 절에서 서브쿼리 사용하기
- FROM 절에서 사용되는 서브쿼리를 인라인 뷰(Inline View)라고 한다.
- 서브쿼 리의 결과가 마치 실행 시에 동적으로 생성된 테이블인 것처럼 사용할 수 있다.
- 인라인 뷰는 SQL문이 실행될 때만 임시적으로 생성되는 동적인 뷰이기 때문에 데이터베이스에 해당 정보가 저장되지 않는다.
다) HAVING 절에서 서브쿼리 사용하기
- HAVING 절은 그룹함수와 함께 사용될 때 그룹핑된 결과에 대해 부가적인 조건을 주기 위해서 사용한다.
라) UPDATE문의 SET 절에서 사용하기
- 현재 TEAM 테이블에는 STADIUM_NAME 칼럼이 없다. TEAM 테이블에 STADIUM_NAME을 추가
(ALTER TABLE ADD COLUMN)하였다고 가정하자. TEAM 테이블에 추가된 STADIUM_NAME의 값을 STADIUM 테이블을
이용하여 변경하고자 할 때 다음과 같이 SQL문을 작성할 수 있다.
마) INSERT문의 VALUES절에서 사용하기
- PLAYER 테이블에 '홍길동'이라는 선수를 삽입하고자 한다. 이때 PLAYER_ID의 값을 현재 사용 중인 PLAYER_ID에 1을 더한 값으로 넣고자 한다.
7. 뷰(View)
- 테이블은 실제로 데이터를 가지고 있는 반면, 뷰(View)는 실제 데이터를 가지고 있지 않다. 뷰는 단지 뷰 정의(View Definition)만을 가지고 있다. 질의에서 뷰가 사용되면 뷰 정의를 참조해서 DBMS 내부적으로 질의를 재작성(Rewrite)하여 질의를 수행한다.
- 뷰는 다음과 같이 CREATE VIEW문을 통해서 생성할 수 있다.
- 뷰를 제거하기 위해서는 DROP VIEW문을 사용한다.
728x90
반응형