web-dev-qa-db-ja.com

SQL WITH句の例

可能な重複:
CTEとSubQueryの違い

私はWITH句の使い方とWITH句の目的を理解しようとしていました。

私が理解したのは、WITH節は通常のサブクエリの代わりになったということだけでした。

誰かが細かい例で私にこれを説明できますか?

173
user1213167

SQL WITH句は、Oracle 9iリリース2データベースでOracleによって導入されました。 SQL WITH句を使用すると、サブクエリブロックに名前(サブクエリリファクタリングとも呼ばれるプロセス)を付けることができます。これは、メインSQLクエリ内の複数の場所で参照できます。サブクエリに割り当てられた名前は、インラインビューまたはテーブルのように扱われます。 SQL WITH句は基本的に通常のサブクエリの代わりになるドロップインです。

SQLのWITH句の構文

以下は、単一の副照会別名を使用している場合のSQL WITH文節の構文です。

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

複数のサブクエリエイリアスを使用する場合、構文は次のとおりです。

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> [,table_names]
[WHERE <join_condition>]

上記の構文ドキュメントでは、alias_nameの出現箇所は、AS句の後にサブクエリに付ける意味のある名前です。各サブクエリはカンマで区切る必要があります WITHステートメントの例 残りのクエリは、単純で複雑なSQL SELECTクエリの標準形式に従います。

詳細情報: http://www.brighthub.com/internet/web-development/articles/91893.aspx

220
cc4re

これは完全に答えられました ここ

副問合せの因数分解がどのように機能するかについては、 SELECT に関するOracleのドキュメントおよびMarkの例を参照してください。

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