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