SELECT-Klausel (Transact-SQL)

Gibt die Spalten an, die von der Abfrage zurückgegeben werden sollen.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

SELECT [ ALL | DISTINCT ]
[ TOP expression [ PERCENT ] [ WITH TIES ] ] 
<select_list> 
<select_list> ::= 
    { 
      | { table_name | view_name | table_alias }.* 
      | {
          [ { table_name | view_name | table_alias }. ]
               { column_name | $IDENTITY | $ROWGUID } 
          | udt_column_name [ { . | :: } { { property_name | field_name } 
            | method_name ( argument [ ,...n] ) } ]
          | expression
          [ [ AS ] column_alias ] 
         }
      | column_alias = expression 
    } [ ,...n ] 

Argumente

  • ALL
    Gibt an, dass das Resultset doppelte Zeilen enthalten darf. ALL ist die Standardeinstellung.
  • DISTINCT
    Gibt an, dass im Resultset nur eindeutige Zeilen vorkommen dürfen. NULL-Werte werden für das DISTINCT-Schlüsselwort als gleich angesehen.
  • TOP expression [ PERCENT ] [ WITH TIES ]
    Gibt an, dass das Resultset der Abfrage nur eine angegebene erste Gruppe oder einen Prozentsatz von Zeilen zurückgibt. expression kann entweder eine Anzahl oder ein Prozentsatz von Zeilen sein.

    Die TOP-Klausel kann in den Anweisungen SELECT, INSERT, UPDATE und DELETE verwendet werden. Klammern, die expression in TOP begrenzen, sind in INSERT-, UPDATE- und DELETE-Anweisungen erforderlich. Aus Gründen der Abwärtskompatibilität wird die Verwendung von TOP expression ohne Klammern in SELECT-Anweisungen unterstützt, jedoch nicht empfohlen. Weitere Informationen finden Sie unter TOP (Transact-SQL).

  • < select_list >
    Die für das Resultset auszuwählenden Spalten. Die Auswahlliste besteht aus einer Reihe von Ausdrücken, die durch Kommas voneinander getrennt sind. Maximal können in der Auswahlliste 4096 Ausdrücke angegeben werden.
  • *
    Gibt an, dass alle Spalten aus allen Tabellen und Sichten in der FROM-Klausel zurückgegeben werden sollen. Die Spalten werden wie in der FROM-Klausel angegeben nach Tabellen oder Sichten sortiert sowie in der Reihenfolge zurückgegeben, in der sie in der Tabelle vorhanden sind.
  • table_ name| view_ name| table_ alias.*
    Beschränkt den Gültigkeitsbereich von * auf die angegebene Tabelle oder Sicht.
  • column_ name
    Dies ist der Name einer Spalte, die zurückgegeben werden soll. Kennzeichnen Sie column_name, um einen mehrdeutigen Verweis zu verhindern, der vorkommen kann, wenn zwei Tabellen in der FROM-Klausel Spalten mit dem gleichen Namen enthalten. Beispiel: Die beiden Tabellen SalesOrderHeader und SalesOrderDetail in der AdventureWorks-Datenbank haben beide eine Spalte mit dem Namen ModifiedDate. Wenn beide Tabellen in einer Abfrage zusammengeführt werden, kann das modifizierte Datum der Einträge in SalesOrderDetail in der Auswahlliste als SalesOrderDetail.ModifiedDate angegeben werden.
  • expression
    Eine Konstante, eine Funktion oder eine beliebige, durch einen oder mehrere Operatoren verknüpfte Kombination von Spaltennamen, Konstanten und Funktionen oder eine Unterabfrage.
  • $ROWGUID
    Gibt die ROWGUID-Spalte zurück.

    Falls mehrere Tabellen in der FROM-Klausel eine Spalte mit der ROWGUIDCOL-Eigenschaft enthalten, muss $ROWGUID mit dem jeweiligen Tabellennamen gekennzeichnet werden, wie z. B. T1.$ROWGUID.

  • udt_column_name
    Der Name einer Spalte des CLR-benutzerdefinierten Typs, die zurückgegeben werden soll.

    ms176104.note(de-de,SQL.90).gifHinweis:
    SQL Server Management Studio gibt Werte für benutzerdefinierte Typen in binärer Darstellung zurück. Wenn Sie Werte für benutzerdefinierte Typen im Zeichenfolgen- oder XML-Format zurückgeben möchten, verwenden Sie CAST oder CONVERT.
  • { . | :: }
    Gibt eine Methode, Eigenschaft oder ein Feld eines CLR-benutzerdefinierten Typs an. Verwenden Sie . für eine (nicht statische) Instanzmethode, Eigenschaft oder ein Feld. Verwenden Sie :: für eine statische Methode, Eigenschaft oder ein Feld. Zum Aufrufen einer Methode, Eigenschaft oder eines Feldes eines CLR-benutzerdefinierten Typs müssen Sie über die EXECUTE-Berechtigung für den Typ verfügen.
  • property_name
    Eine öffentliche Eigenschaft von udt_column_name.
  • field_name
    Ein öffentliches Datenelement von udt_column_name.
  • method_name
    Eine öffentliche Methode von udt_column_name, die ein oder mehrere Argumente umfassen kann. method_name darf keine Mutatormethode sein.

    Im folgenden Beispiel werden die Werte für die Location-Spalte ausgewählt, für die der Typ point definiert ist. Die Auswahl erfolgt aus der Cities-Tabelle durch Aufruf einer Methode des Typs mit dem Namen Distance:

    CREATE TABLE Cities (
         Name varchar(20),
         State varchar(20),
         Location point );
    GO
    DECLARE @p point (32, 23), @distance float
    GO
    SELECT Location.Distance (@p)
    FROM Cities;
    
  • column_ alias
    Dies ist ein alternativer Name, der den Spaltennamen im Abfrageresultset ersetzt. Für eine Spalte namens quantity könnte z. B. ein Alias wie Quantity, Quantity to Date oder Qty angegeben werden.

    Aliasnamen werden auch verwendet, um Namen für die Ergebnisse von Ausdrücken anzugeben, beispielsweise:

    USE AdventureWorks;

    GO

    SELECT AVG(UnitPrice) AS 'Average Price'

    FROM Sales.SalesOrderDetail;

    column_alias kann in einer ORDER BY-Klausel verwendet werden. Sie kann jedoch nicht in einer WHERE-, GROUP BY- oder HAVING-Klausel verwendet werden. Falls der Abfrageausdruck Teil einer DECLARE CURSOR-Anweisung ist, kann column_alias nicht in der FOR UPDATE-Klausel verwendet werden.

Hinweise

Die Reihenfolge der Klauseln ist in der SELECT-Anweisung 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.

Die OPTION-Klausel ist in Sichten nicht zulässig.

Auf eine Variable des Typs table kann in ihrem Gültigkeitsbereich wie auf eine reguläre Tabelle zugegriffen werden. Sie kann daher als Quelltabelle in einer SELECT-Anweisung verwendet werden.

Ein mit der OPENDATASOURCE-Funktion als Servername konstruierter vierteiliger Name kann als Quelltabelle ü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.

Als Länge für die in der Auswahlliste enthaltenen Spalten vom Typ text oderntext wird jeweils die kleinste der folgenden Größen zurückgegeben: die tatsächliche Größe der text-Spalte, die Standardeinstellung für TEXTSIZE für die Sitzung oder die im Code der Anwendung festgelegte Größenbeschränkung. Sie können die Länge des zurückgegebenen Textes für eine Sitzung mit der SET-Anweisung ändern. Standardmäßig ist die Länge von Textdaten, die mit einer SELECT-Anweisung zurückgegeben werden, auf 4.000 Byte begrenzt.

SQL Server 2005-Datenbankmodul löst die Ausnahme 511 aus und führt einen Rollback für die derzeit ausgeführte Anweisung aus, wenn eine der folgenden Situationen auftritt:

  • Die SELECT-Anweisung erstellt eine Ergebniszeile oder eine Zeile in der temporären Arbeitstabelle, die 8.060 Byte überschreitet.
  • Die DELETE-, INSERT- oder UPDATE-Anweisung versucht, eine Aktion für eine Zeile durchzuführen, die größer als 8.060 Byte ist.

Ein Fehler tritt auf, wenn eine mit SELECT INTO oder CREATE VIEW erstellte Spalte keinen Spaltennamen besitzt.

Auswählen von Identitätsspalten

Bei der Auswahl einer vorhandenen Identitätsspalte in einer neuen Tabelle erbt die neue Spalte die IDENTITY-Eigenschaft, es sein denn, eine der folgenden Bedingungen trifft zu:

  • Die SELECT-Anweisung enthält eine Verknüpfung, eine GROUP BY-Klausel oder eine Aggregatfunktion.
  • Mehrere SELECT-Anweisungen sind mit UNION verknüpft.
  • Die Identitätsspalte ist mehrfach in der Auswahlliste aufgeführt.
  • Die Identitätsspalte ist Teil eines Ausdrucks.

Falls eine dieser Bedingungen erfüllt ist, wird die Spalte mit NOT NULL erstellt, anstatt die IDENTITY-Eigenschaft zu übernehmen. Sämtliche Regeln und Einschränkungen für die Identitätsspalten gelten auch für die neue Tabelle.

Äußere Verknüpfungen nach altem Muster

Von früheren Versionen von SQL Server wird die Definition von äußeren Verknüpfungen, die die Operatoren *= und =* in der WHERE-Klausel verwenden, unterstützt. Von SQL Server, Version 7.0, wird der SQL-92-Standard unterstützt. Damit werden Verknüpfungsoperatoren in der FROM-Klausel zur Verfügung gestellt. Wenn als Kompatibilitätsgrad der Datenbank 90 festgelegt ist, werden die äußeren Verknüpfungsoperatoren (*= und =*) nicht unterstützt.

Verarbeitungsreihenfolge von WHERE-, GROUP BY- und HAVING-Klauseln

In den folgenden Schritten wird die Verarbeitungsreihenfolge für eine SELECT-Anweisung mit den Klauseln WHERE, GROUP BY und HAVING dargestellt:

  1. Die FROM-Klausel gibt ein Anfangsresultset zurück.
  2. Die WHERE-Klausel schließt Zeilen aus, die die entsprechende Suchbedingung nicht erfüllen.
  3. Die GROUP BY-Klausel sammelt die ausgewählten Zeilen in jeweils einer Gruppe für jeden eindeutigen Wert in der GROUP BY-Klausel.
  4. Die in der Auswahlliste angegebenen Aggregatfunktionen berechnen zusammenfassende Werte für jede Gruppe.
  5. Die HAVING-Klausel schließt weitere Zeilen aus, die die Suchbedingung dieser Klausel nicht erfüllen.

Berechtigungen

Erfordert die Mitgliedschaft in der festen Serverrolle sysadmin, der festen Datenbankrollen db_owner und db_datareader und den Besitz der Tabelle. Mitglieder der Rollen sysadmin, db_owner und db_securityadmin sowie der Tabellenbesitzer können Berechtigungen an andere Benutzer übertragen.

Wird die INTO-Klausel zum Erstellen einer permanenten Tabelle verwendet, muss der Benutzer die CREATE TABLE-Berechtigung in der Zieldatenbank besitzen.

Siehe auch

Verweis

CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
CREATE VIEW (Transact-SQL)
DELETE (Transact-SQL)
EXECUTE (Transact-SQL)
Ausdrücke (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
INSERT (Transact-SQL)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
table (Transact-SQL)
UNION (Transact-SQL)
UPDATE (Transact-SQL)
EXCEPT und INTERSECT (Transact-SQL)
WHERE (Transact-SQL)

Andere Ressourcen

Volltextabfragen
Grundlegendes zu Verknüpfungen
Grundlegende Informationen zu Unterabfragen
Verwenden von Variablen und Parametern (Datenbankmodul)
Verwenden von Bezeichnern als Objektnamen

Hilfe und Informationen

Informationsquellen für SQL Server 2005