SQL 상관 하위 쿼리

SQL 상관 하위 쿼리

SQL에서 상관 하위 쿼리는 외부 쿼리의 열을 참조하는 하위 쿼리입니다. 하위 쿼리는 하위 쿼리를 수행하기 위해 현재 행의 값을 사용하여 외부 쿼리의 각 행에 대해 반복적으로 실행됩니다. 그런 다음 하위 쿼리의 결과는 외부 쿼리 평가에 사용됩니다.

행별 처리에는 상관 하위 쿼리가 사용됩니다. 각 하위 쿼리는 외부 쿼리의 모든 행에 대해 한 번씩 실행됩니다.

상관 하위 쿼리는 상위 명령문에서 처리된 각 행에 대해 한 번씩 평가됩니다. 상위 문은 다음과 같을 수 있습니다. 선택하다 , 업데이트 , 또는 삭제 성명.

통사론:

열1, 열2, …을 선택합니다.

FROM table1 외부

WHERE 컬럼1 연산자

(SELECT 열1, 열2

테이블 2에서

여기서 expr1 =

외부.expr2);

상관 하위 쿼리는 테이블의 모든 행을 읽고 각 행의 값을 관련 데이터와 비교하는 한 가지 방법입니다. 하위 쿼리가 기본 쿼리에서 고려한 각 후보 행에 대해 다른 결과 또는 결과 집합을 반환해야 할 때마다 사용됩니다. 즉, 상관 하위 쿼리를 사용하여 상위 문에서 처리되는 각 행의 값에 따라 답변이 달라지는 다중 부분 질문에 답변할 수 있습니다.

중첩된 하위 쿼리와 상관 하위 쿼리 비교

일반적인 중첩 하위 쿼리를 사용하면 내부 선택하다 쿼리가 먼저 실행되고 한 번 실행되어 기본 쿼리에서 사용할 값을 반환합니다. 그러나 상관 하위 쿼리는 외부 쿼리에서 고려하는 각 후보 행에 대해 한 번 실행됩니다. 즉, 내부 쿼리는 외부 쿼리에 의해 구동됩니다.

메모: 다음을 사용할 수도 있습니다. 어느 그리고 모두 상관 하위 쿼리의 연산자. 상관 하위 쿼리의 예: 해당 부서에서 평균 급여보다 많은 급여를 받는 직원을 모두 찾아보세요.

질문:

SELECT last_name, salary, department_id  FROM employees outer  WHERE salary>(SELECT AVG(salary) FROM 직원 WHERE Department_id = external.department_id 그룹 by Department_id); 

상관관계의 다른 용도는 다음과 같습니다. 업데이트 그리고 삭제

관련 업데이트

UPDATE table1 alias1  SET column = (SELECT expression   FROM table2 alias2  WHERE alias1.column =  alias2.column); 

다른 테이블의 행을 기반으로 한 테이블의 행을 업데이트하려면 상관 하위 쿼리를 사용합니다.

상관 삭제

DELETE FROM table1 alias1  WHERE column1 operator  (SELECT expression  FROM table2 alias2  WHERE alias1.column = alias2.column); 

다른 테이블의 행을 기반으로 한 테이블의 행을 삭제하려면 상관 하위 쿼리를 사용합니다.

EXISTS 연산자 사용

EXISTS 연산자는 하위 쿼리의 결과 집합에 행이 있는지 테스트합니다. 하위 쿼리 행 값이 발견되면 해당 조건에 플래그가 지정됩니다. 진실 내부 쿼리에서는 검색이 계속되지 않으며, 찾을 수 없으면 조건에 플래그가 지정됩니다. 거짓 검색은 내부 쿼리에서 계속됩니다.
EXIST 연산자 사용 예:
보고하는 사람이 한 명 이상 있는 직원을 찾습니다.

질문:

SELECT employee_id, last_name, job_id, department_id FROM employees outer WHERE EXISTS ( SELECT ’X’ FROM employees WHERE manager_id = outer.employee_id); 

출력 :

NOT EXIST 연산자를 사용하는 예
직원이 없는 부서를 모두 찾아보세요.

질문:

SELECT department_id, department_name FROM departments d WHERE NOT EXISTS (SELECT ’X’ FROM employees WHERE department_id = d.department_id); 

출력 :

SQL 상관 하위 쿼리에 대해 자주 묻는 질문 – FAQ

상관 하위 쿼리와 일반 하위 쿼리의 차이점은 무엇입니까?

일반 하위 쿼리(비상관)는 외부 쿼리와 독립적이며 기본 쿼리가 실행되기 전에 한 번만 평가됩니다. 이와 대조적으로 상관 하위 쿼리는 외부 쿼리에 종속되며 기본 쿼리의 각 행에 대해 실행됩니다.

상관 하위 쿼리는 언제 사용해야 합니까?

상관 하위 쿼리는 외부 쿼리 자체의 값을 참조해야 하는 일부 조건을 기반으로 외부 쿼리의 결과를 필터링해야 할 때 유용합니다. 조건이 관련 테이블의 데이터에 의존하는 시나리오에서 일반적으로 사용됩니다.