Share via


ALL, DISTINCT, DISTINCTROW, TOP-Prädikate (Microsoft Access SQL)

Gilt für: Access 2013 | Access 2016

Geben die mit SQL-Abfragen ausgewählten Datensätze an.

Syntax

SELECT [ALLE | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]] FROM-Tabelle

Eine SELECT-Anweisung, die diese Prädikate enthält, weist die folgenden Teile auf.

  • ALL: Angenommen, wenn Sie keins der Prädikate einschließen. Vom Microsoft Access-Datenbankmodul werden alle Datensätze ausgewählt, die die Bedingungen in der SQL-Anweisung erfüllen.

    Die folgenden beiden Beispiele sind identisch und geben alle Datensätze aus der Employees-Tabelle (Personal) zurück:

      SELECT ALL * 
      FROM Employees 
      ORDER BY EmployeeID; 
    
    
      SELECT * 
      FROM Employees 
      ORDER BY EmployeeID;
    
  • DISTINCT: Lassen Datensätze aus, die doppelte Daten in den ausgewählten Feldern enthalten. Die Werte der einzelnen Felder in der SELECT-Anweisung müssen eindeutig sein, damit Sie in die Abfrageergebnisse aufgenommen werden. Beispielsweise können mehrere Mitarbeiter in der Employees-Tabelle (Personal) über denselben Nachnamen verfügen. Enthalten zwei Datensätze im LastName-Feld (Nachname) den Namen Buchner, wird von der folgenden SQL-Anweisung lediglich einer der Datensätze zurückgegeben:

      SELECT DISTINCT 
      LastName 
      FROM Employees;
    

    Wenn Sie das DISTINCT-Prädikat auslassen, werden von der Abfrage beide Datensätze mit dem Namen Buchner zurückgegeben. Enthält die SELECT-Klausel mehrere Felder, muss die Kombination der Werte aus allen Feldern für einen bestimmten Datensatz eindeutig sein, damit dieser in den Ergebnissen enthalten ist. Die Ausgabe einer Abfrage, die das DISTINCT-Prädikat verwendet, kann nicht aktualisiert werden und spiegelt keine Folgeänderungen wider, die von anderen Benutzern vorgenommen werden.

  • DISTINCTROW: Lässt Daten aus, die auf vollständigen doppelten Datensätzen basieren, nicht nur auf doppelten Feldern. Sie können beispielsweise eine Abfrage erstellen, mit der die Customers-Tabelle (Kunden) und die Orders-Tabelle (Bestellungen) im CustomerID-Feld (Kunden-Nr) verknüpft werden. Die Customers-Tabelle enthält keine doppelten Felder mit Namen CustomerID, in der Orders-Tabelle ist dies jedoch der Fall, da jedem Kunden mehrere Bestellungen zugeordnet sein können. Die folgende SQL-Anweisung zeigt, wie Sie mithilfe des DISTINCTROW-Prädikats eine Liste von Firmen erstellen können, die über mindestens eine Bestellung verfügen, ohne dass die Details zu den Bestellungen abgefragt werden:

      SELECT DISTINCTROW CompanyName 
      FROM Customers INNER JOIN Orders 
      ON Customers.CustomerID = Orders.CustomerID 
      ORDER BY CompanyName;
    

    Wenn Sie das DISTINCTROW-Prädikat auslassen, werden von dieser Abfrage mehrere Zeilen für alle Firmen erstellt, die über mehrere Bestellungen verfügen. DISTINCTROW wirkt sich nur dann aus, wenn Sie Felder aus einigen, jedoch nicht aus allen Tabellen der Abfrage auswählen. DISTINCTROW wird ignoriert, wenn die Abfrage nur eine Tabelle enthält oder wenn Sie Felder aus allen Tabellen ausgeben.

  • TOP n [PERCENT]: Gibt eine bestimmte Anzahl von Datensätzen zurück, die am oberen oder unteren Rand eines durch eine ORDER BY-Klausel angegebenen Bereichs liegen. Angenommen, Sie möchten die Namen der besten 25 Studenten des Jahrgangs 1994 abfragen:

      SELECT TOP 25 
      FirstName, LastName 
      FROM Students 
      WHERE GraduationYear = 1994 
      ORDER BY GradePointAverage DESC;
    

    Wenn Sie die ORDER BY-Klausel nicht einschließen, gibt die Abfrage einen beliebigen Satz von 25 Datensätzen aus der Students-Tabelle zurück, die die WHERE-Klausel erfüllen. Das TOP-Prädikat wählt nicht zwischen gleichen Werten aus. Im vorherigen Beispiel gibt die Abfrage 26 Datensätze zurück, wenn der Fünfundzwanzigste und der sechsundzwanzigste Notendurchschnitt gleich sind. Sie können auch das reservierte Wort PERCENT verwenden, um einen bestimmten Prozentsatz von Datensätzen zurückzugeben, die in einem durch eine ORDER BY-Klausel angegebenen Bereich oben oder unten liegen. Angenommen, Sie möchten anstelle der besten 25 Studenten die 10 Prozent des Jahrgangs anzeigen, die am schlechtesten abgeschnitten haben:

      SELECT TOP 10 PERCENT 
      FirstName, LastName 
      FROM Students 
      WHERE GraduationYear = 1994 
      ORDER BY GradePointAverage ASC;
    

    Vom ASC-Prädikat wird die Rückgabe eines unteren Werts angegeben. Bei dem Wert, der auf das TOP-Prädikat folgt, muss es sich um einen nicht signierten Wert vom Typ Integer handeln. Das TOP-Prädikat hat keine Auswirkung darauf, ob die Abfrage aktualisiert werden kann.

  • table: Der Name der Tabelle, aus der Datensätze abgerufen werden.

Beispiel

In dem folgenden Beispiel wird eine Abfrage erstellt, mit der die Customers-Tabelle (Kunden) und die Orders-Tabelle (Bestellungen) über das CustomerID-Feld (Kunden-Nr) verknüpft werden. Die Customers-Tabelle enthält keine doppelten Felder mit Namen CustomerID, in der Orders-Tabellle ist dies jedoch der Fall, da jedem Kunden mehrere Bestellungen zugeordnet sein können. Mithilfe des DISTINCTROW-Prädikats wird eine Liste von Firmen erstellt, die über mindestens eine Bestellung verfügen, ohne dass die Details zu den Bestellungen abgefragt werden.

Sub AllDistinctX() 
    Dim dbs As Database, rst As Recordset 
    ' Modify this line to include the path to Northwind 
    ' on your computer. 
    Set dbs = OpenDatabase("Northwind.mdb") 
   
    ' Join the Customers and Orders tables on the  
    ' CustomerID field. Select a list of companies  
    ' that have at least one order. 
 
    Set rst = dbs.OpenRecordset("SELECT DISTINCTROW " _ 
        & "CompanyName FROM Customers " _ 
        & "INNER JOIN Orders " _ 
        & "ON Customers.CustomerID = " _ 
        & "Orders.CustomerID " _ 
        & "ORDER BY CompanyName;") 
 
    ' Populate the Recordset. 
    rst.MoveLast 
     
    ' Call EnumFields to print the contents of the  
    ' Recordset. Pass the Recordset object and desired 
    ' field width. 
    EnumFields rst, 25 
    dbs.Close 
End Sub 

Siehe auch

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.