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
상관 하위 쿼리와 일반 하위 쿼리의 차이점은 무엇입니까?
일반 하위 쿼리(비상관)는 외부 쿼리와 독립적이며 기본 쿼리가 실행되기 전에 한 번만 평가됩니다. 이와 대조적으로 상관 하위 쿼리는 외부 쿼리에 종속되며 기본 쿼리의 각 행에 대해 실행됩니다.
상관 하위 쿼리는 언제 사용해야 합니까?
상관 하위 쿼리는 외부 쿼리 자체의 값을 참조해야 하는 일부 조건을 기반으로 외부 쿼리의 결과를 필터링해야 할 때 유용합니다. 조건이 관련 테이블의 데이터에 의존하는 시나리오에서 일반적으로 사용됩니다.