728x90
목차
2021.12.11 - [Programming/기초 지식] - SQL 조인 질의문
1. 중첩질의문 개요
1.1. 중첩 질의문의 개념
- 하나의 SQL문의 결과를 다른 SQL문에 전달한다
- 두 개의 SQL문을 하나의 SQL로 처리한다
- 이론적으로 중첩 질의문은 조인 구문과 표현능력이 동일하다
- SQL문 안에 SQL무이 포함되어 있다.
1.2. 단일행 서브 쿼리와 다중행 서브 쿼리
- 단일행 서브쿼리
- 서브쿼리의 결과로 하나의 튜플만이 반환된다.
- 다중행 서브쿼리
- 서브쿼리의 결과로 여러 개의 튜플들이 반환된다
- 단일행 서브쿼리와 다중행 서브쿼리를 구분해야 하는 이유는?
- 일반적인 비교 연산자인 =, >, >=, <, <=, != 등은 속성값 간의 비교 연산이기 때문이다. (단일행)
- 다중행 비교 연산자
- IN
- 특정한 값으로 비교연산을 처리
- 속성값이 여러 값들 중 하나라도 만족 하면 참
- "=OR"의 의미
- IN
SELECT *
FROM Pitem
WHERE Itemprice IN (4000, 3000)
- ANY 또는 SOME
- IN연산자와는 달리 범위로 비교연산 처리
- 메인쿼리 비교 조건에서 서브쿼리의 결과와 하나라도 일치하면 참
- IN과의 차이점은 >,>=,<,<= 와 같은 범위 비교와도 같이 사용 가능하다
- ALL
- 메인쿼리 비교 조건에서 서브쿼리의 결과와 모두 일치하면 참
- EXISTS 연산자
- 서브쿼리의 결과가 하나라도 존재하면 참이 되는 연산자
- NOT EXISTS
- 서브쿼리의 결과가 하나라도 존재하면 거짓이 되는 연산자
2. 다양한 중첩 질의문
2.1. 다중 컬럼 서브쿼리
- 서브쿼리의 결과가 여러 개의 속성들로 구성되어 메인쿼리의 조건과 비교하는 서브쿼리
- 복수 개의 서브쿼리들로 구성된다
- 메인쿼리와 서브쿼리의 비교 대상 칼럼을 분리하여 개별적으로 비교한 후 AND연산에 의해 최종결과를 출력한다.
2.2. 상호 연관 서브쿼리
- 비상호 연관 서브쿼리
- 서브쿼리의 결과가 메인쿼리에서 검사하는 튜플에는 영향 받지 않고 그 결과가 일정하다.
- 상호 연관 서브쿼리
- 메인쿼리절과 서브쿼리 간에 검색 결과를 교환하는 서브쿼리
- 주의사항
- 메인쿼리에서 table1에 속한 튜플을 하나씩 접근하여 WHERE절 수행 시 서브쿼리가 반복적으로 수행됨으로 성능이 매우 떨어질 수 있다.
- 메인쿼리에서 table1에 속한 튜플을 하나씩 접근하여 WHERE절 수행 시 서브쿼리가 반복적으로 수행됨으로 성능이 매우 떨어질 수 있다.
2.3. 중첩 질의문 작성 시 주의점
- 중첩 질의문 사용 시 오류가 없도록 IN, ANY, ALL을 기본적으로 사용한다.
- 서브쿼리 내에는 ORDER BY절을 사용하면 안된다.
- 서브쿼리의 결과가 NULL일 경우, 메인쿼리의 결과 또한 NULL이다.
- 서브쿼리가 NULL을 반환할 경우, 메인쿼리에서 결과를 생성하고 싶으면 "NOT EXISTS"를 사용한다.
300x250