2012-09-23 1 views
134

Mögliche Duplizieren:
Difference between CTE and SubQuery?SQL WITH-Klausel Beispiel

Ich habe versucht, zu verstehen, wie die WITH Klausel verwenden und den Zweck der WITH Klausel.

Alles was ich verstand war, die WITH Klausel war ein Ersatz für normale Sub-Abfragen.

Kann mir jemand das mit einem kleinen Beispiel im Detail erklären?

+3

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

+1

verwendest du MYSQL? b/c wird nicht unterstützt. –

+0

Ich habe ein Beispiel zusammengestellt, wie man die WITH-Klausel benutzt, um eine temporäre statische Tabelle zu erstellen. Sie können dies nützlich finden, da es einige Beispiele zur Verwendung von WITH-Klauseln in Ihren Abfragen enthält. http://www.giombetti.com/2014/02/14/using-sql-with-clause-to-create-temporary-static-tables-at-query-time/ –

Antwort

178

Die SQL WITH-Klausel wurde von Oracle in der Oracle 9i Release 2-Datenbank eingeführt. Mit der SQL WITH-Klausel können Sie einem Unterabfrageblock einen Namen geben (ein Prozess, der auch als Unterabfrage-Refactoring bezeichnet wird), auf den an mehreren Stellen innerhalb der SQL-Hauptabfrage verwiesen werden kann. Der der Unterabfrage zugewiesene Name wird so behandelt, als wäre es eine Inline-Ansicht oder Tabelle. Die SQL WITH-Klausel ist im Grunde ein Ersatz für die normale Unterabfrage.

Syntax für die SQL-WITH-Klausel

Das Folgende ist die Syntax der SQL-WITH-Klausel, wenn eine einzelne Unter Abfrage Pseudonyms gestattet.

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

Bei Verwendung mehrerer Unterabfragealiase ist die Syntax wie folgt.

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>] 

In der Syntax Dokumentation oben, ist das Auftreten von alias_name ein sinnvoller Name für die Unterabfrage nach der AS-Klausel geben würde. Jede Unterabfrage sollte durch ein Komma Example for WITH statement getrennt werden. Die übrigen Abfragen folgen den Standardformaten für einfache und komplexe SQL SELECT-Abfragen.

Für weitere Informationen: http://www.brighthub.com/internet/web-development/articles/91893.aspx

+1

: Ich habe es schon gesehen Kannst du das mit einem kleinen Beispiel erklären, das leichter verständlich wäre? –

+12

Ich denke, Sie brauchen ein Komma nach der WITH ' AS (sql_subquery_statement)' bei der Verwendung mehrerer Unterabfragealiasnamen. – Jason

53

Dies wurde here vollständig beantwortet.

Siehe Oracle's docs on SELECT wie Unterabfrage factoring Werke zu sehen, und Beispiel Mark:

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

Vielen Dank für den ersten Satz mit einem Link :) –

+0

Ja, im Grunde ersetzt es eine Unterabfrage, aber Sie können das "Unterabfrage" -Ergebnis in mehreren Orten verweisen. – kiradotee