Microsoft Access 2010 SQL nutzen Welchen Bestellwert haben die einzelnen Bestellposten? Wie ist der durchschnittliche Bestellwert? Wie viel Zeit liegt zwischen dem Bestelldatum und dem Versanddatum?
S(tructured)Q(uery)L(anguage) Standardsprache für relationale Datenbanken. Daten in Tabellen manipulieren, aktualisieren, eintragen und löschen. Beschreibung im aktuellen Standard SQL:2011 ISO/IEC 9075:2011. Access SQL in Abfragen nutzen, 29.08.14 Seite 2
Informationen im Web http://www.sql-und-xml.de/sql-tutorial/ http://de.wikibooks.org/wiki/einf%c3%bchrung_in_sql http://www.1keydata.com/de/sql/ http://sql.lernenhoch2.de/lernen/ http://www.schulserver.hessen.de/darmstadt/lichtenberg/ SQLTutorial/ http://msdn.microsoft.com/dede/library/cc451081%28v=vs.71%29.aspx http://www.trivadis.com/fileadmin/user_upload/ email4download_pflicht/ PLSQL_Coding_Guidelines_101125.pdf Access SQL in Abfragen nutzen, 29.08.14 Seite 3
Handbücher etc. Handbuch des RRZN: SQL. Grundlagen und Datenbankdesign. Alan Beaulieu: Einführung in SQL. O'Reilly Access SQL in Abfragen nutzen, 29.08.14 Seite 4
Bereiche DML (Data Manipulation Language). DDL (Data Definition Language). DCL (Data Controlling Language). TCL (Transaction Control Language). Access SQL in Abfragen nutzen, 29.08.14 Seite 5
Data Definition Language Definition des Datenbankschemas. Erzeugen von Tabellen. Befehle: CREATE, ALTER, DROP. Microsoft Access: Menüband Erstellen Tabelle. Access SQL in Abfragen nutzen, 29.08.14 Seite 6
Data Controlling Language Rechteverwaltung. Zugriffsrechte auf eine Tabelle. Befehle: GRANT, REVOKE. Access SQL in Abfragen nutzen, 29.08.14 Seite 7
Transaction Control Language Ablaufsteuerung. Jede SQL-Anweisung ist eine Transaktion. Oder: Mehrere Befehle werden zu einer Transaktion zusammengefasst. Befehle: COMMIT, ROLLBACK, SAVEPOINT. Access SQL in Abfragen nutzen, 29.08.14 Seite 8
Data Manipulation Language Daten auswählen, einfügen, aktualisieren oder löschen. Befehle: SELECT, INSERT, UPDATE, DELETE. Microsoft Access: Abfragen, Datensatzquelle für Formulare / Berichte und Listensteuerelementen. Access SQL in Abfragen nutzen, 29.08.14 Seite 9
ER-Modell und SQL Kunde 1 n n gibt auf Bestellung nimmt an 1 Mitarbeiter Nordwind. Kunden Nordwind. Bestellungen Nordwind. Personal Zeige alle Bestellungen der Firma A an. Alle Vertriebsmitarbeiter. Access SQL in Abfragen nutzen, 29.08.14 Seite 10
Auswahlabfragen Sortierung und Filterung von Informationen. Rechenoperationen mit Hilfe der vorhandenen Daten. Verknüpfung von Tabellen über ein Schlüsselwert. Access SQL in Abfragen nutzen, 29.08.14 Seite 11
in Microsoft Access erstellen Menüband Erstellen. Klick auf Abfrageentwurf in der Gruppe Abfragen. Menüband Abfragetools Entwurf. Ansicht SQL-Ansicht in der Gruppe Ergebnisse. Access SQL in Abfragen nutzen, 29.08.14 Seite 12
speichern <STRG>+<S>. Oder: Datei Objekt speichern unter. In dem Dialog Speichern unter wird in dem ersten Textfeld der Name der Abfrage eingegeben. Jede Bezeichnung in Access ist eindeutig. Der Name sollte das Ergebnis der Abfrage widerspiegeln. Access SQL in Abfragen nutzen, 29.08.14 Seite 13
Ausdrücke [Anzahl]*[einzelpreis] AS Bestellwert. Berechnung eines neuen Wertes aus den Inhalt von Feldern. Entsprechend des Typs der genutzten Operanden wird ein Ergebnis zurückgegeben. WHERE (ANZAHL > 100). Vergleich von Informationen mit einem Wert. Der Ausdruck liefert wahr oder falsch. [Operand] [Operator] [Operand]. Operanden und Operatoren werden nach bestimmten Regeln zusammengesetzt. Access SQL in Abfragen nutzen, 29.08.14 Seite 14
Operanden Feldnamen. Spalten in einer Tabelle. Konstante Werte die direkt mit Hilfe der Tastatur eingegeben werden. Access SQL in Abfragen nutzen, 29.08.14 Seite 15
Operatoren Vergleichsoperatoren in Bedingungen. Mathematische Operatoren in Berechnungen. Operatoren haben eine bestimmte Rangfolge. Access SQL in Abfragen nutzen, 29.08.14 Seite 16
Bedingungen SELECT [Artikel-Nr], Einzelpreis, Anzahl FROM Bestelldetails WHERE (ANZAHL > 100) ORDER BY Einzelpreis DESC, Anzahl DESC; [Operand] [vergleichsoperator] [Operand]. [Bedingung] AND [Bedingung] [Bedingung] OR [Bedingung] NOT([Bedingung]) Access SQL in Abfragen nutzen, 29.08.14 Seite 17
Vergleichsoperatoren ist... Operator gleich = ungleich <> kleiner < kleiner gleich <= größer > größer gleich >= Access SQL in Abfragen nutzen, 29.08.14 Seite 18
Berechnungen von Informationen SELECT Bestelldetails.[Bestell-Nr], [Anzahl]*[einzelpreis] AS Bestellwert FROM Bestelldetails; [Operand] [operator] [Operand] AS [Name]. Es gilt die Punkt vor Strich-Regel. Access SQL in Abfragen nutzen, 29.08.14 Seite 19
Name des Ausdrucks bei Neuberechnungen AS Bestellwert Frei wählbarer Bezeichner Länge von maximal 30 Zeichen bestehend aus Buchstaben a..z, A..Z, 0..9 und dem Unterstrich. Zusammengesetzte Wörter werden folgendermaßen geschrieben: MaxAnzahl oder Max_Anzahl. Access SQL in Abfragen nutzen, 29.08.14 Seite 20
Mathematische Operatoren Berechnung Operator Addition + Subtraktion - Multiplikation * Division / Ganzzahlige Division Modula-Rechnung Potenz-Rechnung \ Mod ^ Access SQL in Abfragen nutzen, 29.08.14 Seite 21
für Zahlenwerte Berechnung Operator Beispiel Ergebnis Addition + 5 + 2 7 Subtraktion - 5-2 3 Multiplikation * 5 * 2 10 Division / 5 / 2 2,5 Ganzzahlige Division \ 5 \ 2 2 Modula-Rechnung Mod 5 Mod 2 1 Potenz-Rechnung ^ 5 ^ 2 25 Access SQL in Abfragen nutzen, 29.08.14 Seite 22
für Datums- und Zeitwerte Berechnung Operator Beispiel Ergebnis Addition + #15.12.2010# + 2 17.12.2010 Subtraktion - #15.12.2010# - 2 13.12.2010 Multiplikation * #15.12.2010# * 2 81054 Division / #15.12.2010# / 2 20263,5 Ganzzahlige Division \ #15.12.2010# \ 2 20263 Modula-Rechnung Mod #15.12.2010# Mod 2 1 Potenz-Rechnung ^ #15.12.2010# ^ 2 1642437729 Access SQL in Abfragen nutzen, 29.08.14 Seite 23
Beispiel SELECT Bestellungen.[Bestell-Nr], Bestellungen.Bestelldatum, Bestellungen.Versanddatum FROM Bestellungen WHERE (Bestellungen.Versanddatum > (Bestellungen.Bestelldatum + 1)); Access SQL in Abfragen nutzen, 29.08.14 Seite 24
Hinweise zu Datumswerten bei Access Gültige Datumswerte liegen zwischen dem 01.01.100 und dem 31.12.9999 Der Wert 0 entspricht dem Tag 30.12.1899. Negative Zahlen entsprechen einem Datum vor dem 30.12.1899. Access SQL in Abfragen nutzen, 29.08.14 Seite 25
Hinweise zu Zeitwerten bei Access Die Zeit 00:00 entspricht dem Wert 0. Die Zeit 12:00 entspricht dem Wert 0.5 (12 * (1 / 24)). Die Zeit 12:30 entspricht dem Wert (((1 / 24) / 60) * 750). Access SQL in Abfragen nutzen, 29.08.14 Seite 26
Rangfolge Operatoren Vorzeichen + - Mathematische... * / % + - Vergleichsoperatoren = > < >= <= <> Logische Operatoren NOT AND Zuweisung = BETWEEN IN LIKE OR Access SQL in Abfragen nutzen, 29.08.14 Seite 27
Verknüpfung von Text in Microsoft Access SELECT Firma, Vorname & " " & Nachname AS Mitarbeiter, Straße, PLZ, Ort FROM Personal; [feld] & 5 & [feld] & " " & [feld] AS [Name]. Felder oder Literale werden mit Hilfe des kaufmännischen Unds verbunden. Undefinierte Felder ( Is Null ) werden als leere Zeichenfolge interpretiert. Zahlen werden als Text interpretiert. Access SQL in Abfragen nutzen, 29.08.14 Seite 28
Verknüpfung von Text in PostgreSQL SELECT Firma, Vorname ' ' Nachname AS Mitarbeiter, Straße, PLZ, Ort FROM Personal; [feld] 5 [feld] ' ' [feld] AS [Name]. Felder oder Literale werden mit Hilfe des Verkettungszeichen (Pipe-Zeichen) verbunden. Ab PostgreSQL 8.3 muss eines der Spalten als Text definiert sein. Die Verkettung von Text ist in Abhängigkeit der genutzten Datenbank / des SQL-Servers implementiert. Access SQL in Abfragen nutzen, 29.08.14 Seite 29
In Abhängigkeit einer Bedingung... SELECT Artikel.Produktcode, Bestelldetails.Anzahl, Bestelldetails.Einzelpreis, Bestelldetails.Rabatt, (IIF(Bestelldetails.Rabatt > 0, ( ( (Bestelldetails.Anzahl * Bestelldetails.Einzelpreis) * Bestelldetails.Rabatt)), (Bestelldetails.Anzahl * Bestelldetails.Einzelpreis))) AS RabattSumme FROM Artikel INNER JOIN Bestelldetails ON Artikel.ID = Bestelldetails.[Artikel-Nr] ORDER BY Artikel.Produktcode; Access SQL in Abfragen nutzen, 29.08.14 Seite 30
Erläuterung IIF([Bedingung], [True], [False]) In Abhängigkeit der Bedingung werden unterschiedliche Berechnungen ausgeführt. In dem vorherigen Beispiel wird, falls vorhanden, ein Rabatt vom Gesamtpreis berechnet. Implementierung in Abhängigkeit der genutzten Datenbank / des SQL-Servers implementiert. Access SQL in Abfragen nutzen, 29.08.14 Seite 31
Verbinden von Text mit Hilfe des Pluszeichens [feld] + 5 + [feld] + " " + [feld] AS [Name] Undefinierte Felder ( Is Null ) erzeugen als Ergebnis des Ausdruckes einen undefinierten Wert. Zahlen werden nicht als Text interpretiert. Es wird ein Fehler erzeugt. Access SQL in Abfragen nutzen, 29.08.14 Seite 32
Aktionsabfragen Automatisierte Bearbeitung von Datensätze in einer Tabelle. Informationen aktualisieren Datensätze löschen. Datensätze anfügen. Access SQL in Abfragen nutzen, 29.08.14 Seite 33
Aktualisierung von Informationen UPDATE Artikel_NeuerListenpreis SET Artikel_NeuerListenpreis.Standardkosten = [Artikel_NeuerListenpreis].[Standardkosten]+ ([Artikel_NeuerListenpreis].[Standardkosten]*0.1) WHERE (Artikel_NeuerListenpreis.Kategorie="Gewürze"); Access SQL in Abfragen nutzen, 29.08.14 Seite 34
Syntax UPDATE [Tabelle] SET [Feld] = [mathematischer Ausdruck], [Feld] = [mathematischer Ausdruck]; [Feld] = [mathematischer Ausdruck],... WHERE ([Bedingung]); Falls keine Bedingung angegeben wird, werden alle Informationen in der Tabelle aktualisiert. Access SQL in Abfragen nutzen, 29.08.14 Seite 35
Aktualisierungabfrage in Microsoft Access UPDATE [Tabelle] SET [Feld] = [mathematischer Ausdruck], [Feld] = [mathematischer Ausdruck]; [Feld] = [mathematischer Ausdruck],... WHERE ([Bedingung]); Falls keine Bedingung angegeben wird, werden alle Informationen in der Tabelle aktualisiert. Access SQL in Abfragen nutzen, 29.08.14 Seite 36
Löschen von Datensätzen DELETE * FROM Kunden WHERE ( Kunden.ID In ( SELECT DISTINCT Kunden.ID FROM KUNDEN LEFT JOIN Bestellungen ON Kunden.ID = Bestellungen.[Kunden-Code] WHERE (Bestellungen.[Bestell-Nr] IS NULL) ) ); Access SQL in Abfragen nutzen, 29.08.14 Seite 37
Löschen in Abhängigkeit einer Bedingung DELETE * FROM [TABELLE] WHERE ([Bedingung]); DELETE FROM [TABELLE] WHERE ([Bedingung]); Datensätze werden in Abhängigkeit einer Bedingung gelöscht. Die Löschung kann nicht rückgängig gemacht werden! Access SQL in Abfragen nutzen, 29.08.14 Seite 38
Alle Datensätze löschen DELETE * FROM [TABELLE]); DELETE FROM [TABELLE]); Alle Datensätze der Tabelle werden gelöscht. Der Inhalt der Tabelle wird entfernt. Access SQL in Abfragen nutzen, 29.08.14 Seite 39
Löschabfrage in Microsoft Access DELETE Kunden.*, Kunden.ID FROM Kunden WHERE (Kunden.ID In (SELECT DISTINCT Kunden.ID FROM KUNDEN LEFT JOIN Bestellungen ON Kunden.ID = Bestellungen.[Kunden-Code] WHERE (Bestellungen.[Bestell-Nr] IS NULL)); Bei einer Löschabfrage werden die Felder angegeben. Access SQL in Abfragen nutzen, 29.08.14 Seite 40
Einfügen von Datensätzen INSERT INTO Kunden_Neu (Firma, Nachname, Vorname, [E-Mail-Adresse]) VALUES('Firma XA', 'Meier', 'Tom', 'meier@mail.de'); INSERT INTO [Tabelle] ([Feld], [Feld],...) VALUES([Wert], [Wert],...); Access SQL in Abfragen nutzen, 29.08.14 Seite 41
Einfügung von Textwerten INSERT INTO Kunden_Neu (Firma, Nachname, Vorname, [E-Mail-Adresse]) VALUES('Firma XA', 'Meier', 'Tom', 'meier@mail.de'); INSERT INTO Kunden_Neu (Firma, Nachname, Vorname, [E-Mail-Adresse]) VALUES("Firma XA", "Meier", "Tom", "meier@mail.de"); Microsoft Access verwendet als Begrenzungszeichen das Anführungszeichen sowohl als auch das Apostroph. Access SQL in Abfragen nutzen, 29.08.14 Seite 42
Kopieren von Datensätzen INSERT INTO KundenUndPersonal ( Firma, Nachname, Vorname, [E-Mail-Adresse] ) SELECT Personal_EMail.Firma, Personal_EMail.Nachname, Personal_EMail.Vorname, Personal_EMail.[E-Mail] FROM Personal_EMail; Die Select-Anweisung wählt die einzufügenden Datensätze aus. Das Feld Personal_EMail.Firma wird in das Feld Firma kopiert. Das Feld Personal_EMail.Nachname wird in das Feld Nachname kopiert usw. Access SQL in Abfragen nutzen, 29.08.14 Seite 43
Anfügeabfrage in Microsoft Access INSERT INTO KundenUndPersonal ( Firma, Nachname, Vorname, [E-Mail-Adresse] ) SELECT Personal_EMail.Firma, Personal_EMail.Nachname, Personal_EMail.Vorname, Personal_EMail.[E-Mail] FROM Personal_EMail; In der Auswahlabfrage wird zuerst die Tabelle ausgewählt, in der die anzufügenden Datensätze stehen. Access SQL in Abfragen nutzen, 29.08.14 Seite 44
Syntax INSERT INTO [Tabelle_Ziel] ( [feld], [feld], [feld],... ) [SELECT Auswahl der zu kopierenden Daten]; Die ausgewählten Felder werden von links nach rechts den Ziel- Feldern zugeordnet. Quelle und Ziel müssen den gleichen Datentyp haben. Access SQL in Abfragen nutzen, 29.08.14 Seite 45
Kopieren von Tabellen SELECT Kunden.Firma, Kunden.Nachname, Kunden.Vorname, Kunden.[E-Mail-Adresse] INTO Kunden2014 IN 'Nordwind_Backup.accdb' FROM Kunden; Access SQL in Abfragen nutzen, 29.08.14 Seite 46
Syntax SELECT [feld], [feld],... INTO [Tabelle_Ziel] IN '[pfad/datenbank]' FROM [Tabelle_Quelle] ; Standardmäßig wird die Datenbank im Ordner Documents / Eigene Dateien gesucht. Falls die Zieltabelle vorhanden ist, wird diese gelöscht und neu erstellt. Access SQL in Abfragen nutzen, 29.08.14 Seite 47
Funktionen... sind vordefinierte Berechnungen. Der Nutzer weiß nicht, wie die Berechnung definiert ist. Die Funktion ist eine Blackbox für den Nutzer. können Argumente übergeben werden. Für die Berechnung werden diese Argumente benötigt. Der Nutzer weiß nicht, wie sie verwendet werden. Der Nutzer kennt nur den Wert und den Typ. können einen berechneten Wert an den Nutzer zurückgeben, müssen aber nicht. 123 Funktion 146 Eingabeparameter Rückgabeparameter Access SQL in Abfragen nutzen, 29.08.14 Seite 48
Syntax von Funktionen [Funktionsname]([arg01]; [arg02];...). Beispiel in Access: Left("DK-1234";2) Jede Funktion kann mit Hilfe des Namens eindeutig identifiziert werden. Häufig beschreibt der Name die Rechenoperation. Dem Funktionsnamen folgt eine Liste von Parametern, begrenzt durch runde Klammern. Die Parameter werden durch ein Semikolon in der Liste getrennt. Die Parameterliste kann leer sein. Welche Funktionen vorhanden sind, ist abhängig vom genutzten SQL-Server oder Datenbank. Access SQL in Abfragen nutzen, 29.08.14 Seite 49
Beispiel in Access SELECT Bestelldetails.[Bestell-Nr], Format$([Anzahl]*[einzelpreis], "Currency") AS Bestellwert FROM Bestelldetails; Mit Hilfe der Funktion Format wird der Inhalt des Feldes in diesen Beispiel als Währung formatiert. Die Funktion gibt einen Wert als String zurück. Access SQL in Abfragen nutzen, 29.08.14 Seite 50
Funktionen Microsoft Access: PostgreSQL: http://www.postgresql.org/docs/8.4/static/functions.html Microsoft SQL Server: http://office.microsoft.com/en-us/access-help/accessfunctions-by-category-ha010131676.aspx http://technet.microsoft.com/enus/library/ms174318%28v=sql.110%29.aspx MySQL: http://dev.mysql.com/doc/refman/5.0/en/functions.html Access SQL in Abfragen nutzen, 29.08.14 Seite 51
Datums- und Zeitfunktionen in Access Funktion Argumente Aufgabe deutsch englisch Datum() Date() Aktuelles Systemdatum. Zeit() Time() Aktuelle Systemzeit Jetzt() Now() Datum() + Time() Tag() Day() «Datum» Tag des Arguments Monat() Month() «Datum» Monat des Arguments Jahr() Year() «Datum» Jahr des Arguments Stunde() Hour() «Zeit» Stunde des Arguments Minute() Minute() «Zeit» Minute des Arguments Access SQL in Abfragen nutzen, 29.08.14 Seite 52
Datums- und Zeitfunktionen in Access Funktion Argumente Aufgabe deutsch englisch DatDiff() DateDiff() «Intervall»; «Datum1»; «Datum2» Datum2 - Datum1 DatAdd() DateAdd() «Intervall»; «Zahl»; «Datum» Datum + Zahl Access SQL in Abfragen nutzen, 29.08.14 Seite 53
Konvertierung mit Hilfe von Zdate() ZDate("14.02.2013") wandelt das Datum vom Datentyp Text in einen Wert vom Datentyp Datum / Zeit um. ZDate("16:35") wandelt die Zeitangabe in einen Wert vom Datentyp Datum / Zeit um. Die Sekunden werden automatisch ergänzt. (Zdate("16:35") + ZDate("8:35")) liefert das Ergebnis 31.12.1899 01:10:00. Ein Datumswert wird automatisch ergänzt. (Zdate("15.03.2013") + ZDate("8:35")) zeigt als Ergebnis 15.03.2013 08:35:00 an. Der Datumswert wird mit der Uhrzeit verbunden. Access SQL in Abfragen nutzen, 29.08.14 Seite 54
Textfunktionen in Access Funktion Argumente Aufgabe deutsch englisch Länge() Len() «Text» Anzahl Zeichen Links() Left() «Text»; «Anzahl» Anzahl Zeichen links Rechts() Right() «Text»; «Anzahl» Anzahl Zeichen rechts Teil() Mid() «Text»; «Position»; «Anzahl» Anzahl Zeichen ab Position LGlätten() LTrim() «Text» Leerzeichen am Anfang entfernen RGlätten() RTrim() «Text» Leerzeichen am Ende entfernen Access SQL in Abfragen nutzen, 29.08.14 Seite 55
Suche in einem Text InStr(1; "Apfel, Birne, Banane"; ",") Der erste Parameter gibt an, ab welcher Position der Text durchsucht werden soll. Der zweite Parameter gibt den Text an, der durchsucht wird. Der dritte Parameter gibt den zu suchenden Text an. In diesem Beispiel wird ab der ersten Position ein Komma im Text gesucht. Als Ergebnis wird die Position 6 zurückgeliefert. Access SQL in Abfragen nutzen, 29.08.14 Seite 56
Undefiniertes Felder vom Datentyp Text NZ([infonet];"keine Angabe") Die Funktion überprüft, ob ein Feld einen undefinierten Inhalt hat oder nicht. Der erste Parameter gibt das zu überprüfende Feld an. Der zweite Parameter ersetzt den Inhalt eines undefinierten Feldes. In diesem Beispiel wird statt einem undefinierten, leeren Feldes der Inhalt keine Angabe angezeigt. Access SQL in Abfragen nutzen, 29.08.14 Seite 57
Aggregatfunktionen Fassen mehrere Datensätze zu einer Ergebniszeile zusammen. Gruppieren nach bestimmten Datenfeldern. Komprimierung von Informationen unter Berücksichtigung eines bestimmten Aspektes. Access SQL in Abfragen nutzen, 29.08.14 Seite 58
in SQL Aggregatfunktion Sum([Datenfeld]) Avg([Datenfeld]) Min([Datenfeld]) Max([Datenfeld]) Count([Datenfeld]) Count(*) Erläuterung Summe einer Spalte. Durchschnitt einer Spalte. Kleinster Wert einer Spalte. Größter Wert einer Spalte. Anzahl der Datensätze. Leere Datenfelder werden nicht berücksichtigt. Alle Datensätze zählen. Undefinierte Datenfelder werden nicht berücksichtigt. Access SQL in Abfragen nutzen, 29.08.14 Seite 59
Arbeiten mit Aggregatfunktion Bestellung Nr. Anzahl Preis 001_00_A 1 5 0,99 001_00_A 2 3 1,20 002_00_B 1 4 1,60 003_00_B 1 5 1,50 003_00_B 2 1 0,99 003_00_B 3 2 1,50 Count(*) = 6 Sum(Anzahl * Preis) = 26,44 Min(Anzahl) = 1 Access SQL in Abfragen nutzen, 29.08.14 Seite 60
Syntax SELECT [AggregatFunktion([feld])] As [Name] FROM [Tabelle] WHERE [Bedingung] Access SQL in Abfragen nutzen, 29.08.14 Seite 61
Count(*) SELECT Count(*) As AnzahlKundeOhneBestellung FROM Kunden WHERE ( Kunden.ID IN ( SELECT DISTINCT Kunden.ID FROM KUNDEN LEFT JOIN Bestellungen ON Kunden.ID = Bestellungen.[Kunden-Code] WHERE (Bestellungen.[Bestell-Nr] IS NULL) ) ); Access SQL in Abfragen nutzen, 29.08.14 Seite 62
Count([Datenfeld]) SELECT Count(Bestelldetails.[Bestell-Nr]) AS AnzahlBestellPosten FROM Bestellungen LEFT JOIN Bestelldetails ON Bestellungen.[Bestell-Nr] = Bestelldetails. [Bestell-Nr] WHERE (Anzahl > 100); Access SQL in Abfragen nutzen, 29.08.14 Seite 63
Summe([Datenfeld]) SELECT Format$(Sum([Anzahl]*[einzelpreis]), "Currency") AS Gesamsumme FROM Bestelldetails; Access SQL in Abfragen nutzen, 29.08.14 Seite 64
Gruppieren Group BY Bestellung Bestellung Nr. Anzahl Preis Count(Nr) Sum(Anzahl * Preis) Min(Anzahl) 001_00_A 1 5 0,99 001_00_A 2 3 1,20 2 8,55 3 002_00_B 1 4 1,60 1 1,60 4 003_00_B 1 5 1,50 003_00_B 2 1 0,99 3 11,49 1 003_00_B 3 2 1,50 Access SQL in Abfragen nutzen, 29.08.14 Seite 65
Syntax SELECT [feld], [AggregatFunktion([feld])] As [Name] FROM [Tabelle] GROUP BY [feld] ORDER BY [feld] Access SQL in Abfragen nutzen, 29.08.14 Seite 66
Hinweis Jedes Feld in der Auswahlliste muss entweder mit Hilfe einer Aggregatfunktion berechnet oder mit Hilfe von GROUP BY zusammengefasst werden. Null-Werte werden in einer eigenen Gruppe zusammengefasst. Access SQL in Abfragen nutzen, 29.08.14 Seite 67
Count([Datenfeld]) SELECT Bestellungen.[Bestell-Nr], Count(Bestelldetails.[Bestell-Nr]) AS AnzahlBestellPosten FROM Bestellungen LEFT JOIN Bestelldetails ON Bestellungen.[Bestell-Nr] = Bestelldetails.[Bestell-Nr] GROUP BY Bestellungen.[Bestell-Nr] ORDER BY Bestellungen.[Bestell-Nr]; Access SQL in Abfragen nutzen, 29.08.14 Seite 68
Summe([Datenfeld]) SELECT [Bestell-Nr], Format$(Sum([Anzahl]*[einzelpreis]), "Currency") AS Gesamsumme FROM Bestelldetails GROUP BY [Bestell-Nr] ORDER BY [Bestell-Nr]; Access SQL in Abfragen nutzen, 29.08.14 Seite 69
Filterung von Daten SELECT [feld], [AggregatFunktion([feld])] As [Name] FROM [Tabelle] WHERE [Bedingung] GROUP BY [feld] ORDER BY [feld] Access SQL in Abfragen nutzen, 29.08.14 Seite 70
Hinweis In den WHERE-Bedingungen werden Felder genutzt, die nicht gruppiert oder mit Hilfe einer Aggregatfunktion berechnet werden. Die Tabelle wird in Abhängigkeit einer Bedingung gefiltert und dann zu Teiltabellen mit Hilfe von GROUP BY zusammengefasst. Die Teiltabellen werden mit Hilfe von Aggregatfunktionen zu einem Ergebnis zusammengefasst. Access SQL in Abfragen nutzen, 29.08.14 Seite 71
Beispiel SELECT Artikel.Artikelname, SUM(Auftragsdetails.Anzahl) AS Gesamtanzahl FROM Artikel INNER JOIN Auftragsdetails ON Artikel.ID = Auftragsdetails.[Artikel-Nr] WHERE (Artikel.Kategorie LIKE "Getränke") GROUP BY Artikel.Artikelname ORDER BY Artikel.Artikelname; Access SQL in Abfragen nutzen, 29.08.14 Seite 72
Weiteres Beispiel SELECT Lieferanten.Firma, Sum(Auftragsdetails.Anzahl) AS GesamtAnzahl FROM (Lieferanten LEFT JOIN Aufträge ON (Lieferanten.ID = Aufträge.[Lieferanten-Nr])) LEFT JOIN Auftragsdetails ON (Aufträge.[Auftrags-Nr] =Auftragsdetails. [Auftrags-Nr]) WHERE (Auftragsdetails.[Datum des Erhalts] BETWEEN #04/01/2006# AND #04/30/2006#) GROUP BY Lieferanten.Firma ORDER BY Lieferanten.Firma; Access SQL in Abfragen nutzen, 29.08.14 Seite 73
In Abhängigkeit der Aggregatfunktion filtern SELECT [feld], [AggregatFunktion([feld])] As [Name] FROM [Tabelle] WHERE [Bedingung] GROUP BY [feld] HAVING ([Bedingung]) ORDER BY [feld] Access SQL in Abfragen nutzen, 29.08.14 Seite 74
Hinweis In den HAVING-Bedingungen werden das Ergebnis einer Aggregatfunktion gefiltert. Die Tabelle wird in Abhängigkeit einer Bedingung gefiltert und dann zu Teiltabellen mit Hilfe von GROUP BY zusammengefasst. Die Teiltabellen werden mit Hilfe von Aggregatfunktionen zu einem Ergebnis zusammengefasst. Diese Ergebnis wird nochmals gefiltert. Access SQL in Abfragen nutzen, 29.08.14 Seite 75
Beispiel SELECT Artikel.Artikelname, SUM(Auftragsdetails.Anzahl) AS Gesamtanzahl FROM Artikel INNER JOIN Auftragsdetails ON Artikel.ID = Auftragsdetails.[Artikel-Nr] WHERE (Artikel.Kategorie LIKE "Getränke") GROUP BY Artikel.Artikelname HAVING (SUM(Auftragsdetails.Anzahl) > 100) ORDER BY Artikel.Artikelname; Access SQL in Abfragen nutzen, 29.08.14 Seite 76
Weiteres Beispiel SELECT Lieferanten.Firma, Sum(Auftragsdetails.Anzahl) AS GesamtAnzahl FROM (Lieferanten LEFT JOIN Aufträge ON (Lieferanten.ID = Aufträge.[Lieferanten-Nr])) LEFT JOIN Auftragsdetails ON (Aufträge.[Auftrags-Nr] = Auftragsdetails. [Auftrags-Nr]) WHERE (Auftragsdetails.[Datum des Erhalts] BETWEEN #04/01/2006# AND #04/30/2006#) GROUP BY Lieferanten.Firma HAVING (Sum(Auftragsdetails.Anzahl) > 100) ORDER BY Lieferanten.Firma; Access SQL in Abfragen nutzen, 29.08.14 Seite 77