인라인 뷰 방법과 상관 하위 쿼리 방법의 실행 흐름을 자세히 살펴보겠습니다. 이러한 쿼리의 단계별 실행을 이해하면 SQL이 원하는 결과를 얻기 위해 각 시나리오를 처리하는 방법을 명확히 하는 데 도움이 됩니다.
인라인 뷰 방식은 FROM 절의 하위 쿼리를 사용하여 임시 결과 집합(인라인 뷰)을 생성한 후 이를 외부 쿼리에서 처리합니다.
쿼리:
부서 ID, MAX(급여)를 최고 급여로 선택
에서 (
부서 ID, 급여
선택
직원으로부터
) AS InlineView
부서 ID별 그룹;
실행 단계:
내부 쿼리(SELECT DepartmentId, Salary FROM Employee)가 먼저 실행됩니다.
Employee 테이블에서 DepartmentId 및 Salary 열을 선택합니다.
이 단계에서는 기본적으로 Employee 테이블의 모든 행을 포함하지만 DepartmentId 및 Salary 열만 포함하는 임시 결과 집합(인라인 보기)을 생성합니다.
내부 쿼리의 샘플 결과:
인라인 뷰(임시 결과 집합)가 생성된 후 외부 쿼리는 이 결과 집합을 가져와 MAX(Salary) 함수를 사용하여 집계를 수행합니다.
GROUP BY DepartmentId를 사용하면 각 부서의 최대 급여가 계산됩니다.
외부 쿼리는 인라인 보기의 행을 검색하고 DepartmentId를 기준으로 행을 그룹화합니다. 그런 다음 각 그룹의 최대 급여를 계산합니다.
쿼리는 각 부서의 최고 급여를 반환합니다.
최종 결과:
실행 흐름 요약:
내부 쿼리를 실행하여 인라인 뷰를 생성합니다.
외부 쿼리는 MAX를 사용하여 결과를 집계하고 DepartmentId별로 그룹화합니다.
최종 결과를 반환합니다.
상관 하위 쿼리 방법에서는 외부 쿼리의 각 행에 대해 내부 하위 쿼리가 실행되므로 인라인 뷰 방법보다 더 동적이지만 잠재적으로 느릴 수 있습니다.
쿼리:
부서 ID, 직원 ID, 급여를 최고 급여로 선택
FROM 직원 e
급여 = (
SELECT MAX(급여)
직원으로부터
WHERE 부서 ID = e.DepartmentId
);
실행 단계:
외부 쿼리는 Employee 테이블의 각 행을 읽는 것으로 시작됩니다.
Employee 테이블의 각 행에 대해 쿼리는 DepartmentId, EmployeeId 및 Salary를 검색합니다.
외부 쿼리의 행별 처리 샘플:
외부 쿼리의 각 행에 대해 내부 쿼리(SELECT MAX(Salary) FROM Employee WHERE DepartmentId = e.DepartmentId)가 실행됩니다.
하위 쿼리는 현재 행의 DepartmentId에 해당하는 부서의 최대 급여를 계산합니다.
외부 쿼리와 하위 쿼리 간의 상관 관계는 DepartmentId 조건(WHERE DepartmentId = e.DepartmentId)을 통해 발생합니다.
예:
EmployeeId = 1인 행의 경우 하위 쿼리는 DepartmentId = 101의 최대 급여(6000)를 계산합니다.
EmployeeId = 3인 행의 경우 하위 쿼리는 DepartmentId = 102의 최대 급여(7500)를 계산합니다.
각 행에 대한 하위 쿼리 실행 샘플:
해당 DepartmentId에 대한 최대 급여를 계산한 후 외부 쿼리는 현재 행의 Salary를 하위 쿼리에서 반환된 최대 급여와 비교합니다.
급여가 부서의 최대 급여와 일치하면 해당 행이 유지됩니다.
일치하지 않는 행은 필터링됩니다.
예:
EmployeeId = 2에 대한 행은 급여 6000이 부서 101의 최대 급여와 일치하므로 유지됩니다.
EmployeeId = 1에 대한 행은 해당 급여 5000이 부서 101의 최대 급여보다 적기 때문에 필터링됩니다.
외부 쿼리는 직원의 급여가 해당 부서의 최대 급여와 일치하는 행을 반환합니다.
최종 결과:
실행 흐름 요약:
외부 쿼리의 각 행에 대해 내부 상관 하위 쿼리를 실행합니다.
하위 쿼리는 현재 부서 ID에 대한 최대 급여를 계산합니다.
서브 쿼리 결과와 직원의 급여를 비교해보세요.
직원의 급여가 해당 부서의 최대 급여와 일치하는 행을 필터링하여 반환합니다.
실행 흐름의 주요 차이점:
성능 고려 사항:
인라인 뷰 방식은 자세한 직원 정보 없이 부서별 최고 연봉만 확인할 때 더 효율적입니다. 데이터에 대한 단일 전달로 집계를 수행합니다.
상관 하위 쿼리 방법은 외부 쿼리의 모든 행에 대해 하위 쿼리를 실행하여 잠재적으로 중복 계산이 많이 발생하므로 대규모 데이터세트의 경우 속도가 느려질 수 있습니다. 그러나 부서의 최고 급여와 자세한 직원 정보(예: EmployeeId, 이름)를 모두 검색할 수 있습니다.
위 내용은 인라인 뷰 방법 및 SQL의 상관 하위 쿼리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!