logo

SQL | WITH 절

SQL WITH 절은 Oracle 9i 릴리스 2 데이터베이스에 도입되었습니다. SQL WITH 절을 사용하면 하위 쿼리 블록에 기본 SQL 쿼리 내의 여러 위치에서 참조할 수 있는 이름(하위 쿼리 리팩토링이라고도 하는 프로세스)을 지정할 수 있습니다.

  • 이 절은 임시 관계의 출력을 사용할 수 있고 WITH 절과 연결된 쿼리에서 사용되도록 임시 관계를 정의하는 데 사용됩니다.
  • 연결된 WITH 절이 있는 쿼리는 중첩된 하위 쿼리를 사용하여 작성할 수도 있지만 그렇게 하면 SQL 쿼리 읽기/디버깅이 더 복잡해집니다.
  • WITH 절은 모든 데이터베이스 시스템에서 지원되지 않습니다.
  • 하위 쿼리에 할당된 이름은 인라인 뷰나 테이블인 것처럼 처리됩니다.
  • SQL WITH 절은 Oracle 9i 릴리스 2 데이터베이스에 도입되었습니다.

통사론:



WITH temporaryTable (averageValue) as (SELECT avg(Attr1) FROM Table) SELECT Attr1 FROM Table, temporaryTable WHERE Table.Attr1>임시테이블.평균값;>

이 쿼리에서는 WITH 절을 사용하여 평균 값 속성이 1개만 있는 임시 관계 temporaryTable을 정의합니다. averageValue는 관계 Table에 기술된 Attr1 컬럼의 평균값을 담고 있다. WITH 절 뒤에 오는 SELECT 문은 관계 테이블의 Attr1 값이 WITH 절 문에서 얻은 평균 값보다 큰 튜플만 생성합니다.

메모: WITH 절이 포함된 쿼리가 실행되면 먼저 해당 절 내에 언급된 쿼리가 평가되고 이 평가의 출력이 임시 관계에 저장됩니다. 이후 생성된 임시 관계를 사용하는 WITH 절과 관련된 기본 쿼리가 최종적으로 실행됩니다.



마우스 스크롤이 작동하지 않습니다

쿼리

예시 1: 급여가 전체 사원의 평균 급여보다 많은 사원을 모두 찾아보세요.
관계 이름: 직원

직원ID 이름 샐러리
100011 스미스 50000
100022 청구서 94000
100027 그 자신 70550
100845 월든 80000
115585 에릭 60000
1100070 케이트 69000

SQL 쿼리:



WITH temporaryTable(averageValue) as (SELECT avg(Salary) from Employee) SELECT EmployeeID,Name, Salary FROM Employee, temporaryTable WHERE Employee.Salary>임시테이블.평균값;>

산출:

직원ID 이름 샐러리
100022 청구서 94000
100845 월든 80000

설명: 전체 사원의 평균 급여는 70591이다. 따라서 급여가 구해진 평균보다 많은 사원은 모두 출력 관계에 속한다.

예시 2: 해당 항공사의 모든 조종사의 총 급여가 데이터베이스에 있는 모든 조종사의 총 급여의 평균보다 많은 항공사를 모두 찾습니다.

관계 이름: 조종사

직원ID 공기 호스 이름 샐러리
70007 에어버스 380 60000
70002 보잉 로라 20000
10027 에어버스 380 할 것이다 80050
10778 에어버스 380 남자 이름 80780
115585 보잉 스미스 25000
114070 에어버스 380 케이티 78000

SQL 쿼리:

WITH totalSalary(Airline, total) as (SELECT Airline, sum(Salary) FROM Pilot GROUP BY Airline), airlineAverage(avgSalary) as (SELECT avg(Salary) FROM Pilot ) SELECT Airline FROM totalSalary, airlineAverage WHERE totalSalary.total>AirlinesAverage.avgSalary;>

산출:

공기 호스
에어버스 380

설명: Airbus 380의 모든 조종사의 총 급여 = 298,830이고 Boeing의 총 급여 = 45000입니다. Pilot 테이블에 있는 모든 조종사의 평균 급여 = 57305입니다. Airbus 380의 모든 조종사의 총 급여만 얻은 평균 급여보다 크므로 따라서 Airbus 380은 출력 관계에 있습니다.

중요한 사항:

  • SQL WITH 절은 단순한 SQL 문보다는 복잡한 SQL 문과 함께 사용할 때 좋습니다.
  • 또한 복잡한 SQL 쿼리를 더 작은 쿼리로 분할하여 복잡한 쿼리를 쉽게 디버깅하고 처리할 수 있습니다.
  • SQL WITH 절은 기본적으로 일반 하위 쿼리를 즉시 대체합니다.