T'SPACE

다채로운 에디터들의 이야기

컴퓨터공학/데이터베이스 DB

Correlated Subquery 상관 서브쿼리

Tonny Kang 2024. 10. 22. 08:23
반응형

서브쿼리 Subquery



DML의 서브쿼리


DELETE



서브쿼리는 WHERE 절에서 사용될 수 있습니다.

DELETE FROM ... WHERE ...

 

예시)
강사의 평균 급여보다 낮은 급여를 받는 모든 강사 삭제

 

DELETE FROM instructor
WHERE salary < (
            SELECT avg (salary)
            FROM instructor);

 

스칼라 Scalar 서브쿼리

  • 문제: 일부 튜플이 삭제되면 평균이 변경됨
    → 하지만 SQL은 먼저 평균을 계산하고 그 값과 비교합니다

INSERT



R에 튜플 삽입
원래는 다음과 같습니다

INSERT INTO R VALUES (attributes)

R에 튜플을 삽입하기 위해
서브쿼리를 사용하면

INSERT INTO R subquery

삽입할 일부 튜플을 관계에서 찾기 위해

 

UPDATE



서브쿼리는 WHERE 절에서 사용될 수 있습니다

UPDATE ... SET ... WHERE ...

 

반응형

Correlation Subquery 상관 서브쿼리



내부 쿼리가 외부 쿼리에서 제공하는 값에 의존함
→ 내부 쿼리는 외부 쿼리의 각 행에 대해 한 번씩 반복적으로 실행됨
따라서 비효율적일 수 있음

  • 하지만 EXISTS 또는 NOT EXISTS 연산자는 JOIN보다 더 효율적일 수 있음
    → 왜냐하면, 서브쿼리에서 행 값이 발견되면 내부 쿼리 검색이 종료됨
    → EXISTS는 True를 반환하고 NOT EXISTS는 False를 반환함

중첩 쿼리는 INTERSECT와 EXCEPT의 대안으로 사용될 수 있습니다

(SELECT R.A, R.B
 FROM R)
INTERSECT
(SELECT S.A, S.B
 FROM S)

 

다음과 같이 표현될 수 있습니다

SELECT R.A, R.B
FROM R
WHERE EXISTS(
            SELECT *
            FROM S
                WHERE R.A=S.A AND R.B=S.B)
728x90
(SELECT R.A, R.B
 FROM R)
EXCEPT
(SELECT S.A, S.B
 FROM S)

 

다음과 같이 표현될 수 있습니다

SELECT R.A, R.B
FROM R
WHERE NOT EXISTS(
            SELECT *
            FROM S
                WHERE R.A=S.A AND R.B=S.B)
반응형