Microsoft Access 2010 SQL nutzen Welche Kunden haben wir? Welche Kunden wohnen in Chicago? Welche Bestellung wurden zwischen dem 01.03.2006 und dem 31.03.2006 aufgegeben?
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
Listen von SQL-Befehlen http://www.ks-hechingen.de/dv_down/bs_sql.pdf http://www.itslot.de/2013/12/sql-befehle-fur-anfanger.html http://iwi.wiwi.hu-berlin.de/~viehweger/db-sql-2008-1.pdf in Bezug auf mysql. Access SQL in Abfragen nutzen, 29.08.14 Seite 4
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 5
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 6
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 7
Data Controlling Language Rechteverwaltung. Zugriffsrechte auf eine Tabelle. Befehle: GRANT, REVOKE. Access SQL in Abfragen nutzen, 29.08.14 Seite 8
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 9
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 10
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 11
Beispiele Zeige alle Kunden an. SELECT * FROM Kunden; Zeige alle Vertriebsmitarbeiter an. SELECT Nachname, Vorname FROM Personal WHERE (Position LIKE "Vertriebsmitarbeiter*"); Zeige alle Bestellungen der Firma A an. SELECT * FROM Bestellungen INNER JOIN Kunden ON Bestellungen.[Kunden-Code] = Kunden.ID WHERE (Kunden.Firma LIKE "Firma A"); Access SQL in Abfragen nutzen, 29.08.14 Seite 12
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 13
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 14
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 15
ausführen Menüband Abfragetools Entwurf. Ausführen in der Gruppe Ergebnisse. In Abhängigkeit der vorhandenen Daten wird das Ergebnis in Tabellenform dargestellt. Die Tabelle ist leer, wenn keine passenden Daten vorhanden sind. Access SQL in Abfragen nutzen, 29.08.14 Seite 16
Syntax einer Auswahlabfrage SELECT [Feld, Feld] FROM [Tabelle] WHERE [Bedingung] ORDER BY [Feld] ASC DESC, [Feld] ASC DESC; Die Auswahlabfrage basiert auf eine Tabelle. Als Felder werden Spalten in einer Tabelle bezeichnet. Access SQL in Abfragen nutzen, 29.08.14 Seite 17
Hinweise Das Semikolon beendet eine SQL-Anweisung. Groß- und Kleinschreibung wird nicht beachtet. Leserichtung von links nach rechts. Access SQL in Abfragen nutzen, 29.08.14 Seite 18
Alle Felder aus einer Tabelle SELECT * FROM Kunden; Wähle (SELECT) aus (FROM)... Das Sternchen ist ein Platzhalter für alle Spalten einer Tabelle. Access SQL in Abfragen nutzen, 29.08.14 Seite 19
Feld... aus Tabelle... SELECT Nachname, Vorname FROM Personal; Selektiere (SELECT) felda, feldb, von der Tabelle (FROM)... Bestimmte Felder aus einer Tabelle werden in der Ergebnistabelle angezeigt. Die Feldnamen werden durch Kommata getrennt. Hinweis: Die Feldnamen müssen in Access nicht der angezeigten Spaltenüberschrift entsprechen. Access SQL in Abfragen nutzen, 29.08.14 Seite 20
Bezeichner Tabellennamen und Feldnamen. Tabelle.Feld. Der Feldname wird eindeutig einer Tabelle zugeordnet. Der Punkt verbindet einen Tabellennamen mit einem Feldnamen. Der Feldname identifiziert eindeutig eine Spalte in einer Tabellen. Bestellungen.[Kunden-Code]. Bezeichner, die Sonderzeichen enthalten werden mit Hilfe der eckigen Klammern begrenzt. Sonderzeichen sind Leerzeichen, das Minuszeichen etc. Access SQL in Abfragen nutzen, 29.08.14 Seite 21
Sortierung von Zahlen SELECT [Artikel-Nr], Anzahl, [Kosten pro Einheit] FROM Auftragsdetails ORDER BY Anzahl DESC, [Kosten pro Einheit] DESC; Sortierung nach x Feldern auf- oder absteigend. Die Felder werden durch Kommata getrennt. Die Informationen werden zuerst nach der Anzahl sortiert. Diese sortierten Informationen werden [Kosten pro Einheit] sortiert, ohne die vorhandene Sortierung zu zerstören. Die Felder werden von links nach rechts sortiert. Access SQL in Abfragen nutzen, 29.08.14 Seite 22
Sortierung von Datums- und Zeitangaben SELECT Liefername, Lieferadresse, PLZ, Lieferort, Bestelldatum, Versanddatum FROM Bestellungen ORDER BY Bestelldatum, Versanddatum; Access SQL in Abfragen nutzen, 29.08.14 Seite 23
Hinweise zu Datumswerten in Microsoft Access Gültige Datumswerte liegen zwischen dem 01.01.0100 und dem 31.12.9999. Der Wert 0 entspricht dem Datum 30.12.1899. Das Datum 15.12.2010 entspricht einem Wert von 40527. Negative Ganzzahlen beziehen sich auf ein Datum vor dem 30.12.1899.
Hinweise zu Zeitangaben in Microsoft Access Ein Tag entspricht dem Wert 1. Die Nachkommastellen des Tages bilden die Uhrzeit ab. 1 Stunde 1/ 24 = 0.0417 Mitternacht 0 Mittag 12 * 1/24 = 0.5
Sortierung von Textzeichen SELECT Kategorie, Produktcode, Artikelname FROM Artikel ORDER BY Kategorie DESC, Produktcode ASC; Selektiere (SELECT) felda, feldb, von der Tabelle (FROM)... Bestimmte Felder aus einer Tabelle werden in der Ergebnistabelle angezeigt. Die Feldnamen werden durch Kommata getrennt. Access SQL in Abfragen nutzen, 29.08.14 Seite 26
Hinweise zu Textzeichen Microsoft Access sortiert Textzeichen in Abhängigkeit des Eingabegebietsschema und Systemsteuerung Region und Sprache. Mit Hilfe des Menüs Datei Optionen Allgemein kann eine abweichende Sortierung eingestellt werden. Memo-Felder können nicht sortiert werden. Access SQL in Abfragen nutzen, 29.08.14 Seite 27
Aufsteigend sortieren SELECT Kategorie, Produktcode, Artikelname FROM Artikel ORDER BY Kategorie DESC, Produktcode ASC; ORDER BY [feld] ASC. Standardsortierung. Eine Angabe der Sortierung ist nicht nötig. Access SQL in Abfragen nutzen, 29.08.14 Seite 28
Absteigend sortieren SELECT Kategorie, Produktcode, Artikelname FROM Artikel ORDER BY Kategorie DESC, Produktcode ASC; ORDER BY [feld] DESC. Access SQL in Abfragen nutzen, 29.08.14 Seite 29
x Datensätze anzeigen SELECT TOP 1 [Artikel-Nr], Einzelpreis, Anzahl FROM Bestelldetails ORDER BY Einzelpreis DESC, Anzahl DESC; SELECT TOP [anzahl]. Die ersten x Datensätze. In dem Beispiel wird der Artikel mit dem höchsten Einzelpreis und höchsten Bestellmenge angezeigt. Access SQL in Abfragen nutzen, 29.08.14 Seite 30
x Prozent Datensätze anzeigen SELECT TOP 5 PERCENT [Artikel-Nr], Einzelpreis, Anzahl FROM Bestelldetails ORDER BY Einzelpreis DESC, Anzahl DESC; SELECT TOP [prozentsatz] PERCENT. Ein bestimmter Prozentsatz in Abhängigkeit der Gesamtanzahl der Datensätze wird angezeigt. Access SQL in Abfragen nutzen, 29.08.14 Seite 31
Filterung in Abhängigkeit von Bedingungen Vergleich zweier Operanden. Ausdrücke, die wahr sind oder nicht. Eine Verknüpfung von Vergleichen ist möglich.
Beispiel SELECT [Artikel-Nr], Einzelpreis, Anzahl FROM Bestelldetails WHERE (ANZAHL > 100) ORDER BY Einzelpreis DESC, Anzahl DESC; WHERE ([feld] [operator] [wert]). Der Inhalt eines Feldes wird mit einem Wert verglichen. Der Vergleichswert kann ein konstanter Wert, ein Rückgabewert einer Funktion oder ein Feldname sein. Die runden Klammern erhöhen die Lesbarkeit bei komplexen Ausdrücken. Access SQL in Abfragen nutzen, 29.08.14 Seite 33
Vergleichsoperatoren ist... Operator gleich = ungleich <> kleiner < kleiner gleich <= größer > größer gleich >=
Vergleich von Feldern SELECT * FROM Bestellungen WHERE Bestellungen.Versanddatum = Bestellungen.Bestelldatum; Um Fehler zu vermeiden, sollte ein Feld in Bedingungen immer einer Tabelle zugeordnet werden. Access SQL in Abfragen nutzen, 29.08.14 Seite 35
Undefinierter Inhalt SELECT [Auftrags-Nr] FROM Aufträge WHERE ([Genehmigt am] IS NULL); SELECT [Auftrags-Nr] FROM Aufträge WHERE (IsNull([Genehmigt am])); Ist der Inhalt des Feldes nicht definiert? Die Funktion IsNull() wird in Microsoft Access für die Überprüfung von Werten genutzt, deren Datentyp nicht definiert ist. Access SQL in Abfragen nutzen, 29.08.14 Seite 36
Vergleich von boolschen Werten SELECT Produktcode, Artikel.Artikelname FROM Artikel WHERE (Auslaufartikel = True) ORDER BY Produktcode; True (Wahr, Ja). Überprüfung: Status <> 0. False (Falsch, Nein). Überprüfung: Status = 0. Access SQL in Abfragen nutzen, 29.08.14 Seite 37
Vergleich von Zahlenwerten SELECT Produktcode, Artikelname, Standardkosten FROM Artikel WHERE (Standardkosten > 20.50) ORDER BY Standardkosten DESC Als Dezimaltrennzeichen wird der Punkt genutzt. Access SQL in Abfragen nutzen, 29.08.14 Seite 38
Vergleich von Zahlenwerten ist... Operator Kriterium Ergebnis gleich = 3 = 4 Falsch ungleich <> 3 <> 4 Wahr kleiner < 3 < 4 Wahr kleiner gleich <= 3 <= 4 Wahr größer > 3 > 4 Falsch größer gleich >= 3 >= 4 Falsch
Vergleich von Datumswerten SELECT * FROM Bestellungen WHERE (Bestellungen.Versanddatum >= #06/01/2006#) ORDER BY Bestellungen.Versanddatum DESC; Format: #Monat/Tag/Jahr# Begrenzung durch das Hash-Zeichen. Access SQL in Abfragen nutzen, 29.08.14 Seite 40
Vergleich von Zeitwerten SELECT Aufträge.[Auftrags-Nr], Aufträge.[Gesendet am], Aufträge.[Gesendet um] FROM Aufträge WHERE (Aufträge.[Gesendet um] > #12:00#); Format: #Stunde:Minute:Sekunde# Begrenzung durch das Hash-Zeichen. Access SQL in Abfragen nutzen, 29.08.14 Seite 41
Vergleich von Datum- und Zeitwerten SELECT Bestellungen.[Bestell-Nr], Bestellungen.[Kunden- Code], Bestellungen.Versanddatum, Bestellungen.Lieferdatum FROM Bestellungen WHERE (Bestellungen.Lieferdatum = #06/09/2006 09:00#); Format: #Monat/Tag/Jahr Stunde:Minute:Sekunde# Begrenzung durch das Hash-Zeichen. Access SQL in Abfragen nutzen, 29.08.14 Seite 42
Vergleich von Datums- und Zeitwerte ist... Operator Kriterium Ergebnis gleich = #15.12.2010# = #20.11.2011# Falsch ungleich <> #15.12.2010# <> #20.11.2011# Wahr kleiner < #15.12.2010# < #20.11.2011# Wahr kleiner gleich <= #15.12.2010# <= #20.11.2011# Wahr größer > #15.12.2010# > #20.11.2011# Falsch größer gleich >= #15.12.2010# => #20.11.2011# Falsch
Liste von Werten SELECT [Bestell-Nr], [Artikel-Nr], Anzahl,Einzelpreis, [Status-Nr] FROM Bestelldetails WHERE (Bestelldetails.[Status-Nr] In (1,3,4)) ORDER BY [Bestell-Nr] DESC; WHERE ([feld] IN([wert], [wert],...) Einer der Elemente in der Liste muss zutreffen. Die Liste wird durch die runden Klammern begrenzt. Die einzelnen Elemente in der Liste werden durch Kommata getrennt. Als Elemente können Zahlen, Datumswerte, Zeitwerte oder Texte genutzt werden. Access SQL in Abfragen nutzen, 29.08.14 Seite 44
Zwischen und... SELECT * FROM Aufträge WHERE ([Gesendet am] BETWEEN #03/01/2006# AND #03/31/2006#); SELECT * FROM Aufträge WHERE ( ([Gesendet am] >= #03/01/2006#) AND ([Gesendet am] <= #03/31/2006#)); WHERE ([feld] BETWEEN[wertMin] AND[wertMax]) Für einen Wertebereich wird ein minimaler und ein maximaler Wert eingegeben. Als Elemente können Zahlen, Datumswerte oder Zeitwerte genutzt werden. Zeitwerte beziehen sich auf ein bestimmtes Datum. Access SQL in Abfragen nutzen, 29.08.14 Seite 45
Vergleich von Textwerten SELECT * FROM Personal WHERE (Position = "Vertriebsmitarbeiter") ORDER BY Nachname, Vorname; Begrenzung durch Anführungsstriche. Access SQL in Abfragen nutzen, 29.08.14 Seite 46
Vergleich von Text ist... Operator Kriterium Ergebnis gleich = "abc" = "ABC" Wahr ungleich <> "abc" <> "ABC" Falsch kleiner < "abc" < "ABC" Falsch kleiner gleich <= "abc" <= "ABC" Wahr größer > "abc" > "ABC" Falsch größer gleich >= "abc" >= "ABC" Wahr
Leere Zeichenfolge SELECT [Auftrags-Nr] FROM Aufträge WHERE (Zahlungsweise <> ""); Der Inhalt des Feldes hat als definierten Inhalt eine leere Zeichenfolge. In dem Feld sind keine Textzeichen vorhanden. Access SQL in Abfragen nutzen, 29.08.14 Seite 48
Textvergleich mit Hilfe des Operators Like SELECT Firma, Nachname, Vorname FROM Lieferanten WHERE (Nachname LIKE "Hayakawa") ORDER BY Nachname; Ist der Text ähnlich dem Wert? Arbeiten mit Vergleichsmustern. Access SQL in Abfragen nutzen, 29.08.14 Seite 49
Vergleichsmuster SELECT Firma, Nachname, Vorname FROM Lieferanten WHERE (Nachname LIKE "H*") ORDER BY Nachname; Textzeichen werden durch Platzhalter ersetzt. Der Platzhalter * ersetzt eine beliebige Anzahl von Zeichen Der Platzhalter? ersetzt ein Zeichen. Der Platzhalter # ersetzt ein nummerisches Zeichen. Die Platzhalter können an beliebiger Position in beliebiger Kombination in einem Vergleichsmuster genutzt werden. Access SQL in Abfragen nutzen, 29.08.14 Seite 50
Beispiele für ein oder mehrere Zeichen (Nachname LIKE "M*"). Suche nach allen Texten in der Feld Nachname, die mit M beginnen. (Nachname LIKE "M??yer"). Suche nach allen Texten in der Feld Nachname, die mit M beginnen und auf yer enden. Zwischen M und yer dürfen zwei beliebige Zeichen stehen. (Postleitzahl LIKE "30###"). Suche nach allen Texten in dem Feld Postleitzahl, die mit 30 beginnen. Den ersten zwei Ziffern 30 folgen drei weitere beliebige Ziffern. Access SQL in Abfragen nutzen, 29.08.14 Seite 51
Mischformen von Platzhaltern (Bestellnummer LIKE "10#-*-L?"). Suche nach allen Texten wie zum Beispiel 101-abM-La oder 102-a-LB. Das erste Textelement besteht aus drei Ziffern. Die ersten Ziffern sind durch die 1 und 0 festgelegt. Die letzte Ziffer ist beliebig. Das zweite Textelement kann aus beliebig vielen Zeichen bestehen. Das dritte Textelement beginnt mit einem L, dem ein beliebiges Zeichen folgt. Die Textelemente werden durch Bindestriche getrennt. Access SQL in Abfragen nutzen, 29.08.14 Seite 52
Beispiele für eine Liste von Zeichen (Bestellnummer LIKE "101-aeR-L[NB]"). An der zweiten Position kann der Buchstabe N oder B stehen. In den eckigen Klammern wird eine Liste von Zeichen geschrieben. Die Liste von Zeichen wird ohne ein Trennzeichen geschrieben. (Bestellnummer LIKE "101-aeR-L[!NB]"). An der zweiten Position darf nicht der Buchstabe N oder B stehen. Mit Hilfe des Ausrufezeichens wird die nachfolgende Auflistung negiert. (Bestellnummer LIKE "101-[a-c]eR-LN"). An der fünften Position dürfen die Buchstaben a, b und c stehen. Ein bestimmter Bereich von Zeichen wird angegeben. Access SQL in Abfragen nutzen, 29.08.14 Seite 53
Negation von Bedingungen SELECT * FROM Aufträge WHERE (NOT ([Status-Nr] = 1)) ORDER BY Erstellungsdatum DESC; SELECT * FROM Aufträge WHERE ([Status-Nr] <> 1) ORDER BY Erstellungsdatum DESC; Access SQL in Abfragen nutzen, 29.08.14 Seite 54
Is Not Null SELECT * FROM Aufträge WHERE ([Genehmigt am] IS NOT NULL); Der Inhalt des Feldes hat einen definierten Inhalt. Access SQL in Abfragen nutzen, 29.08.14 Seite 55
Bedingung Und Bedingung SELECT * FROM Auftragsdetails WHERE (([Artikel-Nr] = 43) AND (Anzahl > 100)); Beide Bedingungen müssen zutreffen. Sobald die linke Bedingung nicht zutrifft, wird die rechte Bedingung nicht ausgewertet. Access SQL in Abfragen nutzen, 29.08.14 Seite 56
Bedingung Oder Bedingung SELECT * FROM Bestellungen WHERE ((Lieferort = "Memphis") OR (Lieferort = "Chicago")) ORDER BY Versanddatum DESC; SELECT * FROM Bestellungen WHERE ((Lieferort IN( "Memphis","Chicago")) ORDER BY Versanddatum DESC; Eine der Bedingungen muss zutreffen. Sobald die linke Bedingung zutrifft, wird die rechte Bedingung nicht ausgewertet. Access SQL in Abfragen nutzen, 29.08.14 Seite 57
Und- und Oder-Verknüpfungen mischen SELECT * FROM Bestellungen WHERE ( ( (Lieferort = "Memphis") OR (Lieferort = "Chicago")) AND (Versanddatum BETWEEN #03/01/2006# AND #03/31/2014#) ) ORDER BY Versanddatum DESC; Die Bedingungen sollten geklammert werden. Access SQL in Abfragen nutzen, 29.08.14 Seite 58
Rangfolge Vergleichsoperatoren: =, >, <, >=, <=, <> NOT AND BETWEEN, IN LIKE, OR Access SQL in Abfragen nutzen, 29.08.14 Seite 59