SQL

2012-09-23 3 views
134

可能性の重複:
Difference between CTE and SubQuery?SQL

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

私が理解したところでは、WITHという句は、通常のサブクエリに代わるものでした。

詳細については、誰も私に説明できますか?

+3

http://msdn.microsoft.com/en-us/library/ms175972(v=sql.105).aspx – Vikdor

+1

MYSQLを使用していますか? b/cサポートされていません。 –

+0

WITH句を使用して一時的な静的テーブルを作成する方法の例をまとめます。クエリにWITH句を使用する方法の例がいくつか含まれているので、これは便利です。 http://www.giombetti.com/2014/02/14/using-sql-with-clause-to-create-temporary-static-tables-at-query-time/ –

答えて

178

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

WITH SQLについて

構文WITH句SQLの構文です。

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句の後にサブクエリに与える意味のある名前です。各サブクエリはカンマで区切る必要がありますExample for WITH statement。残りのクエリは、単純で複雑なSQL SELECTクエリの標準形式に従います。詳細については

http://www.brighthub.com/internet/web-development/articles/91893.aspx

+1

:私はすでに見ましたあなたが立つのがより簡単な小さな例でこれを説明できますか? –

+12

複数のサブクエリエイリアスを使用する場合は、WITH '<別名_A> AS(sql_subquery_statement)'の後にカンマが必要です。 – Jason

53

は、これは完全にhereに答えてきました。

どのようにサブクエリファクタリング作品を見ることがOracle's docs on SELECTを参照してください、とマルコ例:

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

特に最初の文章のリンクありがとうございました:) –

+0

ええ、基本的にサブクエリが置き換えられますが、複数の場所で「サブクエリ」の結果を参照することができます。 – kiradotee