Рубрики

SQL | С предложением

Предложение 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: Найти всех сотрудников, чья зарплата превышает среднюю зарплату всех сотрудников.
Наименование отношения: Сотрудник

EmployeeIDNameSalary
100011Smith50000
100022Bill94000
100027Sam70550
100845Walden80000
115585Erik60000
1100070Kate69000

SQL-запрос:

WITH temporaryTable(averageValue) as
    (SELECT avg(Salary)
    from Employee), 
        SELECT EmployeeID,Name, Salary 
        FROM Employee, temporaryTable 
        WHERE Employee.Salary > temporaryTable.averageValue;

Выход :

EmployeeIDNameSalary
100022Bill94000
100845Walden80000

Пояснение: Средняя заработная плата всех работников составляет 70591. Следовательно, все работники, чья зарплата больше, чем полученная средняя, находятся в соотношении выпуска.


Пример 2: Найти все авиакомпании, в которых общая зарплата всех пилотов этой авиакомпании превышает среднюю общую зарплату всех пилотов в базе данных.

Наименование отношения: Пилот

EmployeeIDAirlineNameSalary
70007Airbus 380Kim60000
70002BoeingLaura20000
10027Airbus 380Will80050
10778Airbus 380Warren80780
115585BoeingSmith25000
114070Airbus 380Katy78000

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 | С предложением

0.00 (0%) 0 votes