SELECT-Anweisung (Microsoft Access SQL)

Gilt für: Access 2013 | Office 2013

Weist das Microsoft Access-Datenbankmodul an, Informationen aus der Datenbank als Gruppe von Datensätzen zurückzugeben.

Syntax

SELECT [Prädikat] { * | Tabelle.* | [Tabelle.]Feld1 [AS Alias1] [, [Tabelle.]Feld2 [AS alias2] [, …]]} FROM Tabellenausdruck [, …] [IN externaldatabase] [WO... ] [GROUP BY... ] [HAVING... ] [ORDER BY... ] [WITH OWNERACCESS OPTION]

Die SELECT-Anweisung besteht aus folgenden Teilen:

Komponente Beschreibung
Prädikat Eines der folgenden Prädikate: ALL, DISTINCT, DISTINCTROW, or TOP. Verwenden Sie das Prädikat, um die Anzahl der zurückgegebenen Datensätze einzuschränken. Wenn keine Angabe erfolgt, ist die Standardeinstellung ALL.
* Gibt an, dass alle Felder der angegebenen Tabelle oder Tabellen ausgewählt werden.
table Der Name der Tabelle mit den Feldern, aus denen Datensätze ausgewählt werden.
Feld1, Feld2 Die Namen der Felder mit den abzurufenden Daten. Wenn Sie mehr als ein Feld einschließen, werden sie in der aufgelisteten Reihenfolge abgerufen.
Alias1, Alias2 Die Namen, die anstelle der ursprünglichen Spaltennamen in der Tabelle als Spaltenüberschriften verwendet werden sollen.
Tabellenausdruck Der Name der Tabelle oder Tabellen mit den abzurufenden Daten.
externeDatenbank Der Name der Datenbank, die die Tabellen in tableexpression enthält, wenn sie sich nicht in der aktuellen Datenbank befinden.

Bemerkungen

Um diesen Vorgang durchzuführen, sucht das Microsoft Jet-Datenbankmodul die angegebene(n) Tabelle(n), extrahiert die ausgewählten Spalten, wählt Zeilen aus, die dem Krtierium entsprechen, und sortiert oder gruppiert die resultierenden Zeilen in der angegebenen Reihenfolge.

SELECT-Anweisungen ändern keine Daten in der Datenbank.

SELECT ist gewöhnlich das erste Wort in einer SQL-Anweisung. Die meisten SQL-Anweisungen sind SELECT- oder SELECT…INTO-Anweisungen.

Die minimale Syntax für eine SELECT-Anweisung lautet:

SELECT Felder FROM Tabelle

Sie können ein Sternchen (*) verwenden, um alle Felder in einer Tabelle auszuwählen. Im folgenden Beispiel werden alle Felder in der Tabelle Employees ausgewählt.

SELECT * FROM Employees;

Wenn ein Feldname in mehr als einer Tabelle in der FROM-Klausel enthalten ist, stellen Sie ihm den Tabellennamen und den Operator . (Punkt) voran. Im folgenden Beispiel ist das Feld "Department" in der Tabelle "Employees" und in der Tabelle "Supervisors" enthalten. Die SQL-Anweisung wählt Abteilungen aus der Tabelle "Employees" und die Namen von Vorgesetzten aus der Tabelle "Supervisors" aus:

SELECT Employees.Department, Supervisors.SupvName 
FROM Employees INNER JOIN Supervisors 
WHERE Employees.Department = Supervisors.Department;

Wenn ein Recordset -Objekt erstellt wird, verwendet das Microsoft Jet-Datenbankmodul den Feldnamen der Tabelle als Field -Objektnamen im Recordset -Objekt. Wenn Sie einen anderen Feldnamen oder einen Namen verwenden möchten, der nicht durch den Ausdruck zum Generieren des Felds impliziert wird, verwenden Sie das reservierte Wort AS. Das folgende Beispiel verwendet den Titel "Birth", um das zurückgegebene Field -Objekt im resultierenden Recordset -Objekt zu benennen:

SELECT BirthDate 
AS Birth FROM Employees;

Wenn Sie zusammenfassende Funktionen oder Abfragen verwenden, die mehrdeutige oder doppelte Field -Objektnamen zurückgeben, müssen Sie die AS-Klausel verwenden, um einen alternativen Namen für das Field -Objekt anzugeben. Das folgende Beispiel verwendet den Titel "HeadCount", um das zurückgegebene Field -Objekt im resultierenden Recordset -Objekt zu benennen:

SELECT COUNT(EmployeeID)
AS HeadCount FROM Employees;

Sie können die anderen Klauseln in einer SELECT-Anweisung verwenden, um die zurückgegebenen Daten weiter einzuschränken und zu organisieren. Weitere Informationen finden Sie im Hilfethema zur verwendeten Klausel.

Links zur Verfügung gestellt von: UtterAccess-Community. UtterAccess ist das führende Microsoft Access-Wiki und -Hilfeforum.

Beispiel

In einigen der folgenden Beispiele wird davon ausgegangen, dass in der Employees-Tabelle ein hypothetisches Salary-Feld zur Angabe des Gehalts enthalten ist. Beachten Sie, dass dieses Feld in der Northwind-Datenbank "Employees" nicht wirklich vorhanden ist.

Dieses Beispiel erstellt ein Recordset vom Typ "Dynaset" basierend auf einer SQL-Anweisung, die die Felder "LastName" und "FirstName" aus allen Datensätzen in der Tabelle "Employees" auswählt. Es ruft die "EnumFields"-Prozedur auf, die die Inhalte eines Recordset-Objekts im Fenster Debug ausgibt.

    Sub SelectX1() 
     
        Dim dbs As Database, rst As Recordset 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
        Set dbs = OpenDatabase("Northwind.mdb") 
     
        ' Select the last name and first name values of all  
        ' records in the Employees table. 
        Set rst = dbs.OpenRecordset("SELECT LastName, " _ 
            & "FirstName FROM Employees;") 
     
        ' Populate the recordset. 
        rst.MoveLast 
     
        ' Call EnumFields to print the contents of the 
        ' Recordset. 
        EnumFields rst,12 
     
        dbs.Close 
     
    End Sub

Dieses Beispiel zählt die Anzahl der Datensätze, die einen Eintrag im Feld "PostalCode" haben, und benennt das zurückgegebene Feld "Tally".

    Sub SelectX2() 
     
        Dim dbs As Database, rst As Recordset 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
        Set dbs = OpenDatabase("Northwind.mdb") 
     
        ' Count the number of records with a PostalCode  
        ' value and return the total in the Tally field. 
        Set rst = dbs.OpenRecordset("SELECT Count " _ 
            & "(PostalCode) AS Tally FROM Customers;") 
     
        ' Populate the Recordset. 
        rst.MoveLast 
     
        ' Call EnumFields to print the contents of  
        ' the Recordset. Specify field width = 12. 
        EnumFields rst, 12 
     
        dbs.Close 
     
    End Sub 

Dieses Beispiel zeigt die Anzahl der Mitarbeiter und die durchschnittlichen und maximalen Gehälter.

    Sub SelectX3() 
     
        Dim dbs As Database, rst As Recordset 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
        Set dbs = OpenDatabase("Northwind.mdb") 
     
        ' Count the number of employees, calculate the  
        ' average salary, and return the highest salary. 
        Set rst = dbs.OpenRecordset("SELECT Count (*) " _ 
            & "AS TotalEmployees, Avg(Salary) " _ 
            & "AS AverageSalary, Max(Salary) " _ 
            & "AS MaximumSalary FROM Employees;") 
     
        ' Populate the Recordset. 
        rst.MoveLast 
     
        ' Call EnumFields to print the contents of 
        ' the Recordset. Pass the Recordset object and 
        ' desired field width. 
        EnumFields rst, 17 
     
        dbs.Close 
     
    End Sub 

Die Sub -Prozedur "EnumFields" wird an ein Recordset -Objekt von der aufrufenden Prozedur übergeben. Die Prozedur formatiert und zeigt dann die Felder des Recordset im Fenster Debug. Die Variable ist die gewünschte Breite des ausgegebenen Felds. Einige Felder können abgeschnitten sein.

    Sub EnumFields(rst As Recordset, intFldLen As Integer) 
     
        Dim lngRecords As Long, lngFields As Long 
        Dim lngRecCount As Long, lngFldCount As Long 
        Dim strTitle As String, strTemp As String 
     
        ' Set the lngRecords variable to the number of 
        ' records in the Recordset. 
        lngRecords = rst.RecordCount 
     
        ' Set the lngFields variable to the number of 
        ' fields in the Recordset. 
        lngFields = rst.Fields.Count 
     
        Debug.Print "There are " & lngRecords _ 
            & " records containing " & lngFields _ 
            & " fields in the recordset." 
        Debug.Print 
     
        ' Form a string to print the column heading. 
        strTitle = "Record  " 
        For lngFldCount = 0 To lngFields - 1 
            strTitle = strTitle _ 
            & Left(rst.Fields(lngFldCount).Name _ 
            & Space(intFldLen), intFldLen) 
        Next lngFldCount     
     
        ' Print the column heading. 
        Debug.Print strTitle 
        Debug.Print 
     
        ' Loop through the Recordset; print the record 
        ' number and field values. 
        rst.MoveFirst 
     
        For lngRecCount = 0 To lngRecords - 1 
            Debug.Print Right(Space(6) & _ 
                Str(lngRecCount), 6) & "  "; 
     
            For lngFldCount = 0 To lngFields - 1 
                ' Check for Null values. 
                If IsNull(rst.Fields(lngFldCount)) Then 
                    strTemp = "<null>" 
                Else 
                    ' Set strTemp to the field contents.  
                    Select Case _ 
                        rst.Fields(lngFldCount).Type 
                        Case 11 
                            strTemp = "" 
                        Case dbText, dbMemo 
                            strTemp = _ 
                                rst.Fields(lngFldCount) 
                        Case Else 
                            strTemp = _ 
                                str(rst.Fields(lngFldCount)) 
                    End Select 
                End If 
     
                Debug.Print Left(strTemp _  
                    & Space(intFldLen), intFldLen); 
            Next lngFldCount 
     
            Debug.Print 
     
            rst.MoveNext 
     
        Next lngRecCount 
     
    End Sub