Microsoft Access 2010 SQL nutzen Welche Bestellungen hat Kunde x aufgegeben? Welche Kunden haben noch nie bestellt? Wer hat welche Bestellungen von welchen Kunden aufgenommen?
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
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 11
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 12
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 13
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 14
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 15
Relationen Tabellen in einer Datenbank werden mit Hilfe von Schlüsseln verknüpft. 1 : n Beziehungen oder 1 : 1 Beziehungen zwischen zwei Tabellen. m : n Beziehungen werden mit Hilfe einer dritten Tabelle realisiert. Access SQL in Abfragen nutzen, 29.08.14 Seite 16
Relationen zwischen Tabellen Kunde 1 n n gibt auf Bestellung nimmt an 1 Mitarbeiter Nordwind. Kunden Nordwind. Bestellungen Nordwind. Personal Bestell-Nr Zeige ID alle Bestellungen der Firma A an. Personal-Nr Firma n Kunden-Code Nachname Bestelldatum...... 1 1 n Alle ID Vertriebsmitarbeiter. Firma Nachname... Access SQL in Abfragen nutzen, 29.08.14 Seite 17
1 : 1 - Kardinalität Einem Datensatz aus Tabelle A ist exakt ein Datensatz aus der Tabelle B zugeordnet. Kunden Bankverbindung Zeige ID alle Bestellungen der Firma A an. ID Firma Nachname Anrede Titel 1 1 Kunden-Code IBAN BIC Bankname Access SQL in Abfragen nutzen, 29.08.14 Seite 18
Nutzung Es werden zu viele Felder benötigt. Die Information ist sehr komplex. Implementierung von Zugriffsrechten. Zum Beispiel: Die Bankinformationen darf nur die Buchhaltung sehen, aber nicht der Bestellnehmer. Access SQL in Abfragen nutzen, 29.08.14 Seite 19
1 : n - Kardinalität Einem Datensatz aus Tabelle A sind beliebig viele Datensatz aus der Tabelle B zugeordnet. Einem Datensatz aus der Tabelle B ist immer exakt ein Datensatz aus der Tabelle A zugeordnet. Kunden Bestellungen 1 Bestell-Nr Zeige ID alle Bestellungen der Firma A an. Personal-Nr Firma n Kunden-Code Nachname Bestelldatum...... Access SQL in Abfragen nutzen, 29.08.14 Seite 20
m : n - Kardinalität Viele Datensätze aus der Tabelle A können viele Datensätze aus der Tabelle B zugeordnet werden. Teilnehmer Teilnehmer in Kursen Kurs m ID Zeige ID alle Bestellungen der Firma A an. n Teilnehmer Firma Nachname Kurs... eingetragen am... n m ID Kursnr. Kursname... Access SQL in Abfragen nutzen, 29.08.14 Seite 21
Primär- und Fremdschlüssel Jeder Datensatz in einer Tabelle wird eindeutig durch ein Schlüssel identifiziert. Der Schlüssel wird als Primärschlüssel bezeichnet. Fremdschlüssel in einer Tabelle sind Schlüsselwerte, die in einer anderen Tabelle als Primärschlüssel definiert sind. Access SQL in Abfragen nutzen, 29.08.14 Seite 22
Primär- und Detailtabelle Eine Tabelle mit einem Primärschlüssel wird als Primärtabelle oder Mastertabelle bezeichnet. Eine Tabelle, die Fremdschlüssel enthält, wird als Detailtabelle bezeichnet. Kunden Primärtabelle Bestellungen Detailtabelle 1 Bestell-Nr Zeige ID alle Bestellungen der Firma A an. Personal-Nr Firma n Kunden-Code Nachname Bestelldatum...... Access SQL in Abfragen nutzen, 29.08.14 Seite 23
Syntax der Auswahlabfrage SELECT [Feld, Feld] FROM [Tabelle] INNER LEFT RIGHT JOIN [Tabelle] ON [Bedingung] WHERE [Bedingung] ORDER BY [Feld] ASC DESC, [Feld] ASC DESC; Die Auswahlabfrage basiert auf eine 1 : n - Relation Access SQL in Abfragen nutzen, 29.08.14 Seite 24
Join Über den Fremdschlüssel in der Tabelle B wird die Tabelle A mit B verbunden. Die Felder aus Tabelle A und B werden verbunden. Tabelle A und B haben eine Beziehung zueinander. Access SQL in Abfragen nutzen, 29.08.14 Seite 25
INNER JOIN Ein gemeinsames Feld der Tabellen A und B haben gleiche Werte. Der Primärschlüssel aus der Tabelle A muss mindestens einmal als Fremdschlüssel in Tabelle B genutzt werden. Andernfalls wird der Datensatz nicht angezeigt. Access SQL in Abfragen nutzen, 29.08.14 Seite 26
Beispiel ID Firma Nachname 1 A Müller 2 B Meier 3 C Schmidt Bestellnr. Kunde Bestelldatum 001_1 1 24.08.2013 002_3 3 25.08.2013 003_1 1 25.08.2013 FROM Kunde INNER JOIN Bestellung 001_1 Müller 24.08.2013 002_3 Schmidt 25.08.2013 003_1 Müller 25.08.2013 Access SQL in Abfragen nutzen, 29.08.14 Seite 27
in SQL SELECT Bestellungen.[Bestell-Nr], Kunden.Firma, Kunden.Nachname, Bestellungen.Versanddatum FROM KUNDEN INNER JOIN Bestellungen ON Kunden.ID = Bestellungen.[Kunden-Code] ORDER BY Bestellungen.[Bestell-Nr]; Die Tabelle Kunden und Bestellungen werden verbunden. Als Primärschlüssel wird Kunden.ID und als Fremdschlüssel Bestellungen.[Kunden-Code] genutzt. Access SQL in Abfragen nutzen, 29.08.14 Seite 28
Erläuterung FROM Kunden INNER JOIN Bestellungen. Die Tabelle Kunden wird mit der Tabelle Bestellungen verbunden. ON Kunden.ID = Bestellungen.[Kunden-Code]. Als Primärschlüssel wird Kunden.ID und als Fremdschlüssel Bestellungen.[Kunden-Code] genutzt. Es werden Informationen aus den Tabellen Kunden und Bestellungen angezeigt Die Felder [Kunden-Code] und das Feld ID haben gleiche Werte. Access SQL in Abfragen nutzen, 29.08.14 Seite 29
LEFT oder RIGHT JOIN Inklusionsverknüpfung. Die Datensätze der linken oder rechten Tabelle werden mit in das Ergebnis eingeschlossen, auch wenn der Wert in der anderen Tabelle nicht vorkommt. Der Primärschlüssel aus der linken / rechten Tabelle muss einmal oder kein Mal als Fremdschlüssel in der anderen Tabelle genutzt werden. Access SQL in Abfragen nutzen, 29.08.14 Seite 30
LEFT JOIN ID Firma Nachname 1 A Müller 2 B Meier 3 C Schmidt Bestellnr. Kunde Bestelldatum 001_1 1 24.08.2013 002_3 3 25.08.2013 003_1 1 25.08.2013 FROM Kunde LEFT JOIN Bestellung 001_1 Müller 24.08.2013 002_3 Schmidt 25.08.2013 003_1 Müller 25.08.2013 Meier Access SQL in Abfragen nutzen, 29.08.14 Seite 31
in SQL SELECT Bestellungen.[Bestell-Nr], Kunden.Firma, Kunden.Nachname, Bestellungen.Versanddatum FROM KUNDEN LEFT JOIN Bestellungen ON Kunden.ID = Bestellungen.[Kunden-Code] ORDER BY Bestellungen.[Bestell-Nr]; Alle Kunden und deren Bestellung. Access SQL in Abfragen nutzen, 29.08.14 Seite 32
RIGHT JOIN ID Firma Nachname 1 A Müller 2 B Meier 3 C Schmidt Bestellnr. Kunde Bestelldatum 001_1 1 24.08.2013 002_3 3 25.08.2013 003_1 1 25.08.2013 FROM Kunde RIGHT JOIN Bestellung Access SQL in Abfragen nutzen, 29.08.14 Seite 33
in SQL SELECT Bestellungen.[Bestell-Nr], Kunden.Firma, Kunden.Nachname, Bestellungen.Versanddatum FROM KUNDEN RIGHT JOIN Bestellungen ON Kunden.ID = Bestellungen.[Kunden-Code] ORDER BY Bestellungen.[Bestell-Nr]; Alle Bestellungen und deren Kunden. Access SQL in Abfragen nutzen, 29.08.14 Seite 34
Sortierung von Informationen SELECT Bestellungen.[Bestell-Nr], Kunden.Firma, Bestellungen.Versanddatum, Kunden.Nachname FROM KUNDEN INNER JOIN Bestellungen ON Kunden.ID = Bestellungen.[Kunden-Code] ORDER BY Bestellungen.Versanddatum DESC, Kunden.Nachname; ORDER BY [Feld] ASC DESC, [Feld] ASC DESC; Felder zur Sortierung können aus beiden Tabellen kommen. Die Felder werden von links nach rechts sortiert. Access SQL in Abfragen nutzen, 29.08.14 Seite 35
Informationen filtern SELECT Bestellungen.[Bestell-Nr], Kunden.Firma, Bestellungen.Versanddatum, Kunden.Nachname FROM KUNDEN LEFT JOIN Bestellungen ON Kunden.ID = Bestellungen.[Kunden-Code] WHERE (Bestellungen.[Bestell-Nr] IS NULL) ORDER BY Kunden.Nachname; WHERE [Bedingung] Felder zur Filterung können aus beiden Tabellen kommen. Access SQL in Abfragen nutzen, 29.08.14 Seite 36
Ausblenden von mehrfach auftretende Werte SELECT DISTINCT Kunden.Firma, Kunden.Nachname FROM KUNDEN INNER JOIN Bestellungen ON Kunden.ID = Bestellungen.[Kunden-Code] ORDER BY Kunden.Nachname; SELECT DISTINCT blendet alle Datensätze mit mehrfach vorkommenden Werten aus. Das Schlüsselwort DISTINCT bezieht sich immer auf die gesamte Ergebnismenge und nicht auf einzelne Felder. Access SQL in Abfragen nutzen, 29.08.14 Seite 37
Filterung mit Hilfe einer Liste SELECT * 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) ) ) ORDER BY Kunden.Firma, Kunden.Nachname; Access SQL in Abfragen nutzen, 29.08.14 Seite 38
Hinweise Kunden.ID IN ( SELECT DISTINCT Kunden.ID Es darf nur ein Feld in der SELECT-Anweisung angezeigt werden. Das angezeigte Feld enthält die Vergleichswerte für Kunden.ID. Mit Hilfe der Anweisung DISTINCT kommt jeder Wert in der Liste nur einmal vor. Access SQL in Abfragen nutzen, 29.08.14 Seite 39
Mehrfach-Verbindungen SELECT Personal.Firma, Personal.Nachname, Kunden.Firma, Kunden.Nachname, Bestellungen.[Bestell-Nr], Bestellungen.Bestelldatum FROM Kunden INNER JOIN (Personal INNER JOIN Bestellungen ON Personal.ID = Bestellungen.[Personal-Nr]) ON Kunden.ID = Bestellungen.[Kunden-Code]; Access SQL in Abfragen nutzen, 29.08.14 Seite 40
Erläuterung Personal ID Firma Nachname 1 A Müller 2 B Meier 3 C Schmidt Bestellnr. Personal Kunde 001_1 1 1 002_3 3 2 003_1 1 2 Personal INNER JOIN Bestellung 001_1 A 1 002_3 C 2 003_1 A 2 Access SQL in Abfragen nutzen, 29.08.14 Seite 41
Erläuterung Personal INNER JOIN Bestellung 001_1 A 1 002_3 C 2 003_1 A 2 Kunden ID Firma Nachname 1 X Schulz 2 Y Müller 3 Z Scholz Kunden INNER JOIN... 001_1 A X 002_3 C Y 003_1 A Y Access SQL in Abfragen nutzen, 29.08.14 Seite 42