Пример предложения SQL WITH

Возможный дубликат:
Разница между CTE и SubQuery?

Я пытался понять, как использовать предложение WITH и цель предложения WITH.

Все, что я понял, было предложением WITH заменой обычных подзапросов.

Может кто-нибудь объяснить это мне небольшим примером?

Ответ 1

Предложение SQL WITH было представлено Oracle в базе данных Oracle 9i release 2. Предложение SQL WITH позволяет вам предоставить подзапрос блоку имени (процесс также называется рефакторингом подзапроса), на который можно ссылаться в нескольких местах основного SQL-запроса. Имя, назначенное подзапросу, обрабатывается так, как если бы оно было встроенным представлением или таблицей. Предложение SQL WITH в основном является заменой обычного суб-запроса.

Синтаксис для предложения SQL WITH

Ниже приведен синтаксис предложения SQL WITH при использовании одного псевдонима подзапроса.

WITH <alias_name> AS (sql_subquery_statement)
SELECT column_list FROM <alias_name>[,tablename]
[WHERE <join_condition>]

При использовании нескольких псевдонимов подзапросов sysntax выглядит следующим образом.

WITH <alias_name_A> AS (sql_subquery_statement),
<alias_name_B> AS(sql_subquery_statement_from_alias_name_A
or sql_subquery_statement )
SELECT <column_list>
FROM <alias_name_A>, <alias_name_B>, [tablenames]
[WHERE <join_condition>]

В приведенной выше синтаксической документации вхождения alias_name являются значимым именем, которое вы предоставили суб-запросу после предложения AS. Каждый подзапрос должен быть разделен запятой Пример для оператора WITH. Остальные запросы следуют стандартным форматам для простых и сложных запросов SQL SELECT.

Для получения дополнительной информации: http://www.brighthub.com/internet/web-development/articles/91893.aspx

Ответ 2

Здесь был дан полный ответ здесь.

Смотрите Oracle docs на SELECT, чтобы увидеть, как работает подзапрос факторинга, и пример Mark:

WITH employee AS (SELECT * FROM Employees)
SELECT * FROM employee WHERE ID < 20
UNION ALL
SELECT * FROM employee WHERE Sex = 'M'