sql WITH 절은 Oracle9i release2 데이터베이스에서 Oracle 에 의해 도입되었습니다. SQL 항을 제공 할 수 있습니 하위 쿼리도록 차단 이름(프로세스 또한이라는 하위 쿼리 refactoring),참조할 수 있는 여러 가지 장소에 SQL 쿼리가 있습니다.
- 절은이 임시 관계의 출력을 사용할 수 있도록 임시 관계를 정의하는 데 사용되며 WITH 절과 관련된 쿼리에서 사용됩니다.
- 쿼리에 있는 와 관련된 절을 사용하여 작성할 수도 있습니다 중첩된 하위 쿼리를 하지만 그렇게 하면 더 많은 복잡성을 추가 읽기/디버깅 SQL 쿼리가 있습니다.
- WITH 절은 모든 데이터베이스 시스템에서 지원되지 않습니다.
- 에 할당된 이름 sub-쿼리로 처리되었지만 인라인 보거나 테이블
- SQL 항에 의해 도입되었 Oracle Oracle9i 릴리스 2 데이터베이스입니다.
구문:
WITH temporaryTable (averageValue) as (SELECT avg(Attr1) FROM Table), SELECT Attr1 FROM Table WHERE Table.Attr1 > temporaryTable.averageValue;
에서 쿼리를 절을 정의하는 데 사용되는 임시 관계 temporaryTable 만 있는 1 특성 averageValue. averageValue 는 관계 테이블에 설명 된 열 Attr1 의 평균값을 보유합니다. WITH 절 뒤에 오는 SELECT 문은 관계 테이블의 Attr1 값이 WITH 절 문에서 얻은 평균값보다 큰 튜플 만 생성합니다.
참고: WITH 절이있는 쿼리가 실행되면 먼저 절 내에 언급 된 쿼리가 평가되고이 평가의 출력은 임시 관계에 저장됩니다. 이 후,마지막으로 생성 된 임시 관계를 사용하는 WITH 절과 관련된 주요 쿼리가 실행됩니다.
쿼리
예제 1:모든 직원의 월급은 이상을 평균 급여의 모든 직원이다.
관계의 이름: Employee
EmployeeID | Name | Salary |
---|---|---|
100011 | Smith | 50000 |
100022 | Bill | 94000 |
100027 | Sam | 70550 |
100845 | Walden | 80000 |
115585 | Erik | 60000 |
1100070 | Kate | 69000 |
SQL Query:
WITH temporaryTable(averageValue) as (SELECT avg(Salary) from Employee), SELECT EmployeeID,Name, Salary FROM Employee, temporaryTable WHERE Employee.Salary > temporaryTable.averageValue;
Output:
EmployeeID | 이름 | 봉 |
---|---|---|
100022 | 빌 | 94000 |
100845 | Walden | 80000 |
설명:평균 급여의 모든 직원들은 70591. 따라서 급여가 얻은 평균보다 많은 모든 직원은 출력 관계에 있습니다.
실시예 2: 모든로부터 총 급여의 모든 조종사는 항공사는 더 이상의 평균 총 급여의 모든 파일에서 데이터베이스입니다.
관계의 이름: Pilot
EmployeeID | Airline | Name | Salary |
---|---|---|---|
70007 | Airbus 380 | Kim | 60000 |
70002 | Boeing | Laura | 20000 |
10027 | Airbus 380 | Will | 80050 |
10778 | Airbus 380 | Warren | 80780 |
115585 | Boeing | Smith | 25000 |
114070 | Airbus 380 | Katy | 78000 |
SQL Query:
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 > airlineAverage.avgSalary;
출력:
Airbus380
설명: 총 급여의 모든 조종사의 에어버스 380=298,830 과 그의 보잉=45000. 표 파일럿에있는 모든 조종사의 평균 급여=57305. 에어 버스 380 의 모든 조종사의 총 급여 만이 얻은 평균 급여보다 크기 때문에 에어 버스 380 은 출력 관계에 있습니다.
중요 사항:
- SQL 항은 좋은 함께 사용할 경우 복잡한 SQL 문을 보다는 오히려 단순한 사람
- 그것은 또한 당신이 휴식 복잡한 SQL 쿼리에는 작은 것들로 쉽게 디버깅을 위해 처리하는 복잡한 쿼리를 처리합니다.
- sql WITH 절은 기본적으로 일반 하위 쿼리에 대한 드롭 인 대체품입니다.
이 기사는 Mayank Kumar 가 기고 한 것입니다. 는 경우 다음과 같 GeeksforGeeks 및 참여하고 싶다면,당신은 또한 수를 사용하여 문서를 써주세요 contribute.geeksforgeeks.org 또는 메일을 귀하의 문서 [email protected]. GeeksforGeeks 메인 페이지에 나타나는 기사를보고 다른 괴짜를 도와주세요.