- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
[G_SQL] 6.4 존재검사 / 6.5 상관부질의
2012.05.30 22:23
6.4 존재검사
모든 부질의는 그 질의를 포함하는 질의에 대한 입력으로 사용된다. 지금까지는 리턴값을 다른 값과 비교하는 것에 다루어 왔다.
즉, WHERE 절을 만족하는 레코드만이 선택되었다. SQL에서는 레코드에 포함된 값에 상관없이 레코드가 존재하기기만 하면
참이 되도록 하는 기능을 제공한다. EXISTS와 NOT EXISTS 인 경우는 부질의가 리턴하는 레코드가 있으면 참이고 NOT EXISTS는
없으면 참이다(NULL 을 포함한 레코드도 레코드가 있는 것으로 간주한다).
존재검사(existence tests)는 개념적으로 간단하지만 매우 유용하다. 가장 널리 쓰이는 경우는 상관부질의(correlated subquery)에서의 사용이다.
6.5 상관부질의
지금까지의 예제에서는 부질의가 먼저 계산되고 나서 그 다음에 그 결과가 주질의의 입력으로 사용되었다.
SQL에서는 주질의기 매번 레코드에 접근할 때마다 부질의가 계산되는 경우가 있다. 그러한 부질의를 상관부질의(correlated subquery)라고
한다.
예를 들어 어떤 과목도 수강신청하지 않은 학생의 이름을 알고 싶을 경우 다음과 같이 질의를 표현할 수 있다.
|
SELECT student, student_name |
지금까지와는 달리 괄호안에 있는 부질의는 한 번만 계산되지 않고 STUDENTS 테이블의 각 레코드에 대해 한 번씩 계산된다.
그때마다 student의 앖이 ENROLLS에 있는 모든 레코드의 student값과 비교된다.(E.student = S.student가 있는 WHERE 절에서).
두 student가 일치될 때마다 ENROLLS 로부터의 레코드가 결과 테이블에 추가된다. NOT EXISTS는 부질의에 의해서 리턴된
테이블이 빈 것이면 참이고 그렇지 않으면 거짓이기 때문에 하라라도 일치하는 student가 있으면 주질의에 대한 결과가 될 수 없고
일치되는 것이 하나도 없는 student 만이 결과 테이블에 들어간다.
상관부질의는 ANY, ALL, EXISTS, 그리고 비교 연산자와 함께 사용될 수 있다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.

