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 절은 기본적으로 일반 하위 쿼리를 즉시 대체합니다.