상관 서브쿼리
Correlated subquerySQL 데이터베이스 쿼리에서 상관된 하위 쿼리(동기화된 하위 쿼리라고도 함)는 외부 쿼리의 값을 사용하는 하위 쿼리(다른 쿼리 내부에 중첩된 쿼리)입니다.외부 쿼리에 의해 처리되는 각 행에 대해 하위 쿼리가 한 번 평가될 수 있으므로 속도가 느려질 수 있습니다.
다음은 일반적인 상관 서브쿼리의 예입니다.이 예에서는 급여가 부서 평균보다 높은 모든 직원을 찾는 것이 목표입니다.
선택한다. employee_number, 이름. 부터 직원들. emp 어디에 급여 > ( 선택한다. AVG(급여) 부터 직원들. 어디에 부서 = emp.부서);
위의 쿼리에서 외부 쿼리는
선택한다. employee_number, 이름. 부터 직원들. emp 어디에 급여 > ...
내부 쿼리(관련 서브쿼리)는
선택한다. AVG(급여) 부터 직원들. 어디에 부서 = emp.부서
위의 중첩된 쿼리에서는 내부 쿼리를 각 직원에 대해 다시 실행해야 합니다.(충분히 스마트한 실장은 부문별로 내부 쿼리의 결과를 캐시할 수 있지만, 최선의 경우라도 부문별로 1회 내부 쿼리를 실행해야 합니다.)
관련 서브쿼리는 WHERE 절 이외의 다른 곳에 표시될 수 있습니다.예를 들어 이 쿼리는 SELECT 절의 관련 서브쿼리를 사용하여 직원 전체 목록을 각 부서의 평균 급여와 함께 인쇄합니다.하위 쿼리는 외부 쿼리의 열과 관련되므로 결과의 [citation needed]각 행에 대해 다시 실행해야 합니다.
선택한다. employee_number, 이름., (선택한다. AVG(급여) 부터 직원들. 어디에 부서 = emp.부서) ~하듯이 부문_평균 부터 직원들. emp
FROM 절의 테이블은 외부 쿼리를 평가하기 위해 필요하기 때문에 FROM 절에 관련 서브쿼리가 있는 것은 일반적으로 의미가 없지만 FROM 절의 관련 서브쿼리는 외부 쿼리를 평가하기 전에 평가할 수 없기 때문에 치킨 앤 에그 문제가 발생합니다.특히 MariaDB는 이를 [1]문서상의 제한사항으로 기재하고 있습니다.
단, 일부 데이터베이스 시스템에서는 FROM 구에 가입할 때 관련 서브쿼리를 사용할 수 있습니다.FROM 구에 가입하기 전에 지정된 키워드를 사용하여 가입 전에 나열된 테이블을 참조하고 관련 서브쿼리에 다수의 행을 생성하여 왼쪽 테이블에 결합할 수 있습니다.예를 들어 Postgre에서는SQL 오른쪽 서브쿼리 앞에 [2]RATIONAL 키워드를 추가하거나 Microsoft SQL Server에서 JOIN 대신[3] CROSS APPLY 또는 OUTER APPLY 키워드를 사용하면 효과가 나타납니다.
레퍼런스
- ^ "Subquery Limitations". MariaDB Knowledgebase. Retrieved 2020-12-24.
- ^ "Table Expressions". postgresql.org. Retrieved 2020-12-14.
- ^ "FROM clause plus JOIN, APPLY, PIVOT (Transact-SQL)". docs.microsoft.com. 2019-06-01. Retrieved 2020-12-24.