SELECT (Transact-SQL)

Ruft Zeilen aus der Datenbank ab und ermöglicht die Auswahl einer oder vieler Zeilen oder Spalten aus einer Tabelle oder aus zahlreichen Tabellen in SQL Server 2008 R2. Die vollständige Syntax der SELECT-Anweisung ist komplex, die Hauptklauseln können jedoch wie folgt zusammengefasst werden:

[ WITH <common_table_expression>]

SELECT select_list [ INTO new_table ]

[ FROM table_source ] [ WHERE search_condition ]

[ GROUP BY group_by_expression ]

[ HAVING search_condition ]

[ ORDER BY order_expression [ ASC | DESC ] ]

Die Operatoren UNION, EXCEPT und INTERSECT können zwischen Abfragen verwendet werden, um deren Ergebnisse in einem Resultset zu kombinieren oder zu vergleichen.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

        <SELECT statement> ::=  

    [WITH <common_table_expression> [,...n]]
    <query_expression> 
    [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } 
  [ ,...n ] ] 
    [ COMPUTE 
  { { AVG | COUNT | MAX | MIN | SUM } (expression )} [ ,...n ] 
  [ BY expression [ ,...n ] ] 
    ] 
    [ <FOR Clause>] 
    [ OPTION ( <query_hint> [ ,...n ] ) ] 

<query_expression> ::= 
    { <query_specification> | ( <query_expression> ) } 
    [  { UNION [ ALL ] | EXCEPT | INTERSECT }
        <query_specification> | ( <query_expression> ) [...n ] ] 

<query_specification> ::= 
SELECT [ ALL | DISTINCT ] 
    [TOP (expression) [PERCENT] [ WITH TIES ] ] 

    < select_list > 
    [ INTO new_table ] 
    [ FROM { <table_source> } [ ,...n ] ] 
    [ WHERE <search_condition> ] 
    [ <GROUP BY> ] 
    [ HAVING < search_condition > ] 

Hinweise

Da die SELECT-Anweisung relativ komplex ist, werden detaillierte Syntaxelemente und Argumente nach Klauseln zusammengefasst aufgeführt:

Die Reihenfolge der Klauseln in der SELECT-Anweisung ist von Bedeutung. Jede der optionalen Klauseln kann ausgelassen werden. Wenn sie jedoch verwendet werden, müssen sie in der richtigen Reihenfolge stehen.

SELECT-Anweisungen sind in benutzerdefinierten Funktionen nur dann zulässig, wenn die Auswahllisten dieser Anweisungen Ausdrücke enthalten, die lokalen Variablen der Funktionen Werte zuweisen.

Ein mit der OPENDATASOURCE-Funktion als Servername konstruierter vierteiliger Name kann als Tabellenquelle überall dort verwendet werden, wo ein Tabellenname in einer SELECT-Anweisung vorkommen kann.

Für SELECT-Anweisungen, die Remotetabellen einbeziehen, gelten einige Syntaxeinschränkungen. Weitere Informationen finden Sie unter Richtlinien für die Verwendung von verteilten Abfragen.

Logische Verarbeitungsreihenfolge der SELECT-Anweisung

Die folgenden Schritte beschreiben die logische Verarbeitungs- oder Bindungsreihenfolge der SELECT-Anweisung. Diese Reihenfolge bestimmt, wann die in einem Schritt definierten Objekte für die Klauseln in nachfolgenden Schritten verfügbar gemacht werden. Wenn der Abfrageprozessor zum Beispiel eine Bindung mit den Tabellen oder Ansichten herstellen kann (darauf zugreifen kann), die in der FROM-Klausel definiert sind, werden diese Objekte und ihre Spalten für alle nachfolgenden Schritte verfügbar gemacht.  Da die SELECT-Klausel Schritt 8 darstellt, kann umgekehrt nicht durch vorausgehende Klauseln auf Spaltenaliase oder abgeleitete Spalten, die in dieser Klausel definiert wurden, verwiesen werden. Allerdings kann darauf durch nachfolgende Klauseln wie die ORDER BY-Klausel verwiesen werden. Die tatsächliche physische Ausführung der Anweisung wird durch den Abfrageprozessor bestimmt, und die Reihenfolge kann von dieser Liste abweichen.

  1. FROM

  2. ON

  3. JOIN

  4. WHERE

  5. GROUP BY

  6. WITH CUBE oder WITH ROLLUP

  7. HAVING

  8. SELECT

  9. DISTINCT

  10. ORDER BY

  11. TOP

Berechtigungen

Die Auswahl von Daten erfordert die Berechtigung SELECT für die Tabelle oder Sicht, die über einen höheren Bereich, beispielsweise über die Berechtigung SELECT für das Schema oder die Berechtigung CONTROL für die Tabelle vererbt werden konnte. Erfordert alternativ die Mitgliedschaft in der festen Datenbankrolle db_datareader bzw. db_owner oder in der festen Serverrolle sysadmin. Das Erstellen einer neuen Tabelle mit SELECTINTO erfordert auch die Berechtigungen CREATETABLE und ALTERSCHEMA für das Schema, das die neue Tabelle besitzt.

Siehe auch

Verweis