Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

단일 행 및 다중 행 하위 쿼리란 무엇입니까?

<시간/>

단일 행 하위 쿼리

단일 행 하위 쿼리는 외부 쿼리의 결과가 알 수 없는 단일 값을 기반으로 할 때 사용됩니다. 이 쿼리 유형은 공식적으로 "단일 행"이라고 하지만 이름은 쿼리가 여러 열을 반환하지만 결과의 행은 하나만 반환함을 의미합니다. 그러나 단일 행 하위 쿼리는 외부 쿼리에 대해 하나의 열로만 구성된 결과의 한 행만 반환할 수 있습니다.

아래 SELECT 쿼리에서 내부 MySQL은 회사의 최소 급여와 같은 하나의 행만 반환합니다. 그런 다음 이 값을 사용하여 모든 직원의 급여를 비교하고 급여가 최저 급여와 동일한 직원만 표시합니다.

SELECT first_name, salary, department_id
FROM employees
WHERE salary = (SELECT MIN (salary)
FROM employees);

HAVING 절은 어떤 조건에 따라 쿼리의 그룹 결과를 제한해야 할 때 사용됩니다. 하위 쿼리의 결과를 그룹 함수와 비교해야 하는 경우 외부 쿼리의 HAVING 절에 내부 쿼리를 중첩해야 합니다.

SELECT department_id, MIN (salary)
FROM employees
GROUP BY department_id
HAVING MIN (salary) < (SELECT AVG (salary)
FROM employees)

여러 행 하위 쿼리

여러 행 하위 쿼리는 상위 쿼리에 둘 이상의 결과 행을 반환할 수 있는 중첩 쿼리입니다. 다중 행 하위 쿼리는 WHERE 및 HAVING 절에서 가장 일반적으로 사용됩니다. 여러 행을 반환하므로 집합 비교 연산자(IN, ALL, ANY)로 처리해야 합니다. IN 연산자는 이전 장에서 설명한 것과 동일한 의미를 가지지만 ANY 연산자는 지정된 값을 하위 쿼리에서 반환된 각 값과 비교하는 반면 ALL은 값을 하위 쿼리에서 반환된 모든 값과 비교합니다. 아래 쿼리는 단일 행 하위 쿼리가 여러 행을 반환하기 때문에 오류를 표시합니다.

SELECT first_name, department_id FROM employees WHERE department_id = (SELECT department_id FROM employees WHERE LOCATION_ID = 100)