-
[한기교] SQL 활용 필기(10) - 중첩 질의문비전공자 공부일기/:: DB - SQL 2020. 5. 4. 14:08
< 중첩 질의문의 개념 >
ㅁ 중첩 질의문의 개념
- 하나의 SQL문의 결과를 다른 SQL문에 전달함
- 두 개의 SQL문을 하나의 SQL로 처리함
- 이론적으로 중첩 질의문은 조인 구문과 표현능력이 동일함
- SQL문 안에 SQL문이 포함되어 있음
ㅁ 조인 질의문과 중첩 질의문
이론적으로 중첩 질의문은 조인 구문과 표현능력이 동일.
따라서 중첩 질의문의 필요성 = 조인의 필요성
상황에 따라 취향에 따라(?) 조인 or 중첩 질의문이 더 편한 경우가 있기 때문에 사용
중첩 질의문이 좀더 직관적인 너낌적인 너낌
ㅁ 중첩 질의문의 표현
: SQL문 안에 SQL문이 포함되어 있음
< 서브쿼리 >
ㅁ 단일행 서브 쿼리와 다중행 서브 쿼리
- 단일행 서브 쿼리
: 서브 쿼리의 결과로 하나의 튜플만이 반환됨
- 다중행 서브 쿼리
: 서브 쿼리의 결과로 여러 개의 튜플들이 반환됨
- 단일행 서브 쿼리와 다중행 서브 쿼리를 구분해야 하는 이유
: 일반적인 비교 연산자인 =, <, <=, >, >=, !=등은 속성값 간의 비교 연산임
ㅁ 단일행 서브쿼리
: 서브 쿼리의 결과로 하나의 튜플만이 반환됨
--> 서브 쿼리의 검색 조건이 후보키에 연관되어 있을 경우가 많음
(ex) SELECT ENO, DNO FROM EMPLOYEE WHERE DNO = (SELECT DNO ---> 튜플이 DNO 하나만 반환 FROM EMPLOYEE WHERE EMPLOYEE.ENO=110)
ㅁ 다중행 서브쿼리
: 서브 쿼리의 결과로 여러 개의 튜플들이 반환됨
--> 단일행 비교 연산자 사용 시 오류
- IN
--- 속성값이 여러 값들 중 하나이기만 하면 참 / "= OR"의 의미
- ANY 또는 SOME
--- 메인쿼리 비교조건에서 서브쿼리의 결과와 하나라도 일치하면 참
--- IN과의 차이점은 > >= <= < 과 같은 범위 비교하고도 같이 사용 가능
--- = ANY와 = SOME은 IN과 같은 의미임
- ALL
--- 메인 쿼리 비교 조건에서 서브 쿼리의 결과와 모두 일치하면 참
- EXISTS 연산자
--- 서브 쿼리의 결과가 하나라도 존재하면 참이 되는 연산자
- NOT EXISTS
--- EXISTS와 상반되는 연산자
ㅁ 다중컬럼 서브쿼리
: 서브쿼리의 결과가 여러 개의 속성들로 구성되어 주 쿼리의 조건과 비교하는 서브쿼리임
- 복수 개의 서브쿼리들로 구성됨
- 메인쿼리와 서브쿼리의 비교대상 칼럼을 분리하여 개별적으로 비교한 후 AND 연산에 의해 최종결과를 출력
ㅁ 상호 연관 서브쿼리
- 비상호 연관 서브쿼리
: 앞서 보았던 서브 쿼리들은 서브쿼리의 결과가 메인쿼리에서 검사하는 튜플에 영향받지 않고 그 결과가 일정
- 상호 연관 서브 쿼리
: 메인 쿼리절과 서브 쿼리 간에 검색 결과를 교환하는 서브 쿼리* 주의 사항
: 메인 쿼리에서 table1에 속한 튜플을 하나씩 접근하여 WHERE 절 수행 시서브 쿼리가 반복적으로 수행됨으로 성능이 매우 떨어질 수 있음
ㅁ 중첩 질의문 작성 시 주의점
- 중첩 질의문 사용 시 오류가 없도록 IN, ANY, ALL을 기본적으로 사용함
- 서브 쿼리 내에서는 ORDER BY 절을 사용하면 안됨
- 서브 쿼리의 결과가 NULL일 경우, 메인 쿼리의 결과 또한 NULL임
- 서브 쿼리가 NULL을 반환할 경우, 메인 쿼리에서 결과를 생성하고 싶으면 “NOT EXISTS” 를 사용함'비전공자 공부일기 > :: DB - SQL' 카테고리의 다른 글
[한기교] SQL 활용 필기(12) - 순위 계산 (0) 2020.05.05 [한기교] SQL 활용 필기(11) - 집합연산자, 집단연산자 (0) 2020.05.04 [한기교] SQL 활용 필기(9) - JOIN (0) 2020.05.04 [한기교] SQL 활용 필기(8) - 트랜잭션, TCL (0) 2020.05.03 [한기교] SQL 활용 필기(7) - DML (INSERT, UPDATE, DELETE) (0) 2020.05.03