Предложение SQL WITH было введено Oracle в базе данных Oracle 9i выпуск 2. Предложение SQL WITH позволяет дать блоку подзапроса имя (процесс, также называемый рефакторингом подзапроса), на которое можно ссылаться в нескольких местах основного SQL-запроса.
- Предложение используется для определения временного отношения, так что выходные данные этого временного отношения доступны и используются запросом, связанным с предложением WITH.
- Запросы, связанные с предложением WITH, также могут быть записаны с использованием вложенных подзапросов, но это усложняет чтение / отладку SQL-запроса.
- Предложение WITH поддерживается не всеми системами баз данных.
- Имя, присвоенное подзапросу, обрабатывается так, как если бы оно было встроенным представлением или таблицей.
- Предложение SQL WITH было введено Oracle в базе данных Oracle 9i выпуск 2.
Синтаксис:
WITH temporaryTable (averageValue) as (SELECT avg(Attr1) FROM Table), SELECT Attr1 FROM Table WHERE Table.Attr1 > temporaryTable.averageValue;
В этом запросе предложение WITH используется для определения временного отношения временная таблица, которая имеет только 1 атрибут averageValue. averageValue содержит среднее значение столбца Attr1, описанного в отношении табл. Оператор SELECT, следующий за предложением WITH, создаст только те кортежи, в которых значение Attr1 в отношении таблицы больше среднего значения, полученного из оператора предложения WITH.
Примечание. Когда выполняется запрос с предложением WITH, сначала оценивается запрос, упомянутый в предложении, и выходные данные этой оценки сохраняются во временном отношении. После этого выполняется главный запрос, связанный с предложением WITH, который будет использовать созданное временное отношение.
Запросы
Пример 1: Найти всех сотрудников, чья зарплата превышает среднюю зарплату всех сотрудников.
Наименование отношения: Сотрудник
EmployeeID | Name | Salary |
---|---|---|
100011 | Smith | 50000 |
100022 | Bill | 94000 |
100027 | Sam | 70550 |
100845 | Walden | 80000 |
115585 | Erik | 60000 |
1100070 | Kate | 69000 |
SQL-запрос:
WITH temporaryTable(averageValue) as (SELECT avg(Salary) from Employee), SELECT EmployeeID,Name, Salary FROM Employee, temporaryTable WHERE Employee.Salary > temporaryTable.averageValue;
Выход :
EmployeeID | Name | Salary |
---|---|---|
100022 | Bill | 94000 |
100845 | Walden | 80000 |
Пояснение: Средняя заработная плата всех работников составляет 70591. Следовательно, все работники, чья зарплата больше, чем полученная средняя, находятся в соотношении выпуска.
Пример 2: Найти все авиакомпании, в которых общая зарплата всех пилотов этой авиакомпании превышает среднюю общую зарплату всех пилотов в базе данных.
Наименование отношения: Пилот
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-запрос:
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;
Выход :
Airline |
---|
Airbus 380 |
Пояснение: Общая зарплата всех пилотов Airbus 380 = 298 830 и Boeing = 45000. Средняя зарплата всех пилотов в таблице Pilot = 57305. Поскольку только общая зарплата всех пилотов Airbus 380 больше, чем средняя полученная зарплата Аэробус 380 лежит в выходном соотношении.
Важные моменты:
- Предложение SQL WITH подходит при использовании сложных операторов SQL, а не простых
- Это также позволяет разбивать сложные запросы SQL на более мелкие, что облегчает отладку и обработку сложных запросов.
- Предложение SQL WITH по сути является заменой обычному подзапросу.
Эта статья предоставлена Mayank Kumar . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- SQL | ИСПОЛЬЗОВАНИЕ
- SQL | Кроме пункта
- SQL | ГДЕ оговорка
- SQL | ПОЛОЖЕНИЕ
- Наличие vs, где предложение в SQL
- SQL | С галстуками
- PHP | MySQL WHERE Clause
- SQL | ВЫБЕРИТЕ ТОП
- SQL | Союзный пункт
- SQL | Отличительная оговорка
- SQL | Подзапросы в предложении From
- SQL | ОГРАНИЧЕНИЕ
- SQL | Пересечь и исключить оговорку
- SQL | Пункт OFFSET-FETCH
- MySQL | PARTITION BY Пункт
0.00 (0%) 0 votes