수색…


비고

하위 쿼리는 외부 쿼리의 다른 절 또는 집합 연산에 나타날 수 있습니다.

괄호 () 로 묶어야합니다. 하위 쿼리의 결과가 다른 것과 비교되는 경우 열의 수가 일치해야합니다. 테이블 별칭은 임시 테이블의 이름을 지정하기 위해 FROM 절의 하위 쿼리에 필요합니다.

WHERE 절의 하위 쿼리

하위 쿼리를 사용하여 결과 집합을 필터링합니다. 예를 들어 가장 높은 유급 직원과 동일한 급여를 가진 모든 직원을 반환합니다.

SELECT *
FROM Employees
WHERE Salary = (SELECT MAX(Salary) FROM Employees)

FROM 절의 하위 쿼리

FROM 절의 하위 쿼리는 쿼리 실행 중에 생성되어 나중에 손실되는 임시 테이블과 유사하게 작동합니다.

SELECT Managers.Id, Employees.Salary
FROM (
  SELECT Id
  FROM Employees
  WHERE ManagerId IS NULL
) AS Managers
JOIN Employees ON Managers.Id = Employees.Id

SELECT 절의 하위 쿼리

SELECT
  Id, 
  FName, 
  LName,
  (SELECT COUNT(*) FROM Cars WHERE Cars.CustomerId = Customers.Id) AS NumberOfCars
FROM Customers

FROM 절의 하위 쿼리

하위 쿼리를 사용하여 임시 테이블을 정의하고이를 "외부"쿼리의 FROM 절에서 사용할 수 있습니다.

SELECT * FROM (SELECT city, temp_hi - temp_lo AS temp_var FROM weather) AS w
WHERE temp_var > 20;

위의 내용은 매일의 온도 변화가 20보다 큰 날씨 표 에서 도시를 찾습니다. 결과는 다음과 같습니다.

시티 temp_var
세인트루이스 21
로스 앤젤레스 31
로스 앤젤레스 23
로스 앤젤레스 31
로스 앤젤레스 27
로스 앤젤레스 28
로스 앤젤레스 28
로스 앤젤레스 32

.

WHERE 절의 하위 쿼리

다음 예는 인구가 평균 기온 (하위 qquery를 통해 얻은 것)보다 낮은 도시 ( 도시의 예 )를 찾습니다.

SELECT name, pop2000 FROM cities 
WHERE pop2000 < (SELECT avg(pop2000)  FROM cities);

여기에서 : 하위 쿼리 (SELECT avg (pop2000) FROM cities)는 WHERE 절에서 조건을 지정하는 데 사용됩니다. 결과는 다음과 같습니다.

이름 pop2000
샌프란시스코 776733
세인트루이스 348189
캔자스시 146866

SELECT 절의 하위 쿼리

하위 쿼리는 외부 쿼리의 SELECT 부분에서도 사용할 수 있습니다. 다음 쿼리는 cities 테이블 의 해당 상태가있는 모든 기상 테이블 열을 표시 합니다 .

SELECT w.*,  (SELECT c.state FROM cities AS c WHERE c.name = w.city ) AS state 
FROM weather AS w;

다른 테이블에서 쿼리를 사용하여 쿼리 결과 필터링

이 쿼리는 수퍼바이저 테이블에없는 모든 직원을 선택합니다.

SELECT *
FROM Employees
WHERE EmployeeID not in (SELECT EmployeeID
                            FROM Supervisors)

LEFT JOIN을 사용하여 동일한 결과를 얻을 수 있습니다.

SELECT *
FROM Employees AS e
LEFT JOIN Supervisors AS s ON s.EmployeeID=e.EmployeeID
WHERE s.EmployeeID is NULL

상관 하위 쿼리

상관 관계 (Synchronized 또는 Coordinated라고도 함) 하위 쿼리는 외부 쿼리의 현재 행을 참조하는 중첩 쿼리입니다.

SELECT EmployeeId
    FROM Employee AS eOuter
    WHERE Salary > (
       SELECT AVG(Salary)
       FROM Employee eInner
       WHERE eInner.DepartmentId = eOuter.DepartmentId
    )

하위 쿼리 SELECT AVG(Salary) ... 는 외부 쿼리에서 EmployeeeOuter 를 참조하므로 상관 관계 가 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow