Innsbruck Information System University of Innsbruck School of Management Information Systems Universitätsstraße 15 6020 Innsbruck SQL Data Manipulation Language (DML) und Query Language (QL) Universität Innsbruck Institut für Wirtschaftsinformatik, Produktionswirtschaft und Logistik Bereich Wirtschaftsinformatik
Einfügen von Daten (DML) INSERT INTO tabelle VALUES (wert_1,, wert_n); bzw. INSERT INTO tabelle (attribut_1,, attribut_n) VALUES (wert_1,, wert_n); aber auch INSERT INTO tabelle SELECT attribut(e) FROM tabelle(n) [WHERE ] Werte (values) von zeichenbasierten Datentypen müssen in Anführungszeichen stehen, von zahlenbasierten Datentypen nicht. Werte und deren Reihenfolge lässt sich mit der zweiten Variante ändern. 2
Ändern von Daten (DML) UPDATE tabelle SET attribut_1 = wert_1,, attribut_n = wert_n; bzw. UPDATE tabelle SET attribut_1 = wert_1,, attribut_n = wert_n WHERE bedingungen; Hinweis: Damit Änderungen an Primärschlüsselwerten auch auf die zugehörigen Fremdschlüsselwerte angewendet werden können, muss die Relation zwischen den Tabellen eine Aktualisierungsweitergabe erlauben, also in der FOREIGN KEY Anweisung im CREATE TABLE Statement die Formulierung ON UPDATE CASCADE verwendet werden. Dies ist zwar in Microsoft Access nicht möglich*), in anderen Datenbank-Management-Systemen aber sehr wohl. In Microsoft Access kann die Aktualisierungsweitergabe in der grafischen Benutzeroberfläche im Dialog Beziehungen bearbeiten des Datenbanktools - Menüpunktes Beziehungen als Option markiert werden. *) https://msdn.microsoft.com/de-de/library/office/ff836971(v=office.15).aspx 3
Löschen von Daten (DML) DELETE FROM tabelle; bzw. DELETE FROM tabelle WHERE bedingung(en); Mit WHERE Bedingung(en) werden nur jene Entitäten gelöscht, die die Bedingung(en) erfüllen, ohne WHERE Bedingung werden alle Entitäten der gewählten Tabelle gelöscht. Hinweis: Entitäten einer Tabelle auf der 1-Seite einer 1:N Relation können nur dann gelöscht werden, wenn entweder keine abhängigen Entität(en) auf der N-Seite der Relation vorliegen oder wenn die Relation mit Löschweitergabe deklariert wurde ( ON DELETE CASCADE oder ON DELETE SET NULL in der FOREIGN KEY -Anweisung des CREATE TABLE -Statements). Bedingungen können mittels AND bzw. OR verknüpft werden 4
Abfrage von Daten (QL) SELECT attribut_1,, attribut_n SELECT * FROM tabelle[n] [WHERE bedingung(en)] [GROUP BY attribut(e) [HAVING bedingung(en)]] [ORDER BY attribute]; Auch berechnete Attribute sind möglich, wie z.b. attribut_1 + - * / ^ & usw. attribut_2 [AS berechnetes_attribut] oder function(attribut) [AS berechnetes_attribut]. Dabei kann function jede, etwa aus Microsoft Excel bekannte Funktion sein (Beispielsweise ergibt year(datums_attribut) die Jahreszahl eines Datums). Beispiel: SELECT vname & nname AS Name, Jahreseinkommen/14 AS Monatseinkommen, year(now())-year(gebdatum) AS Alter FROM Personen; Für die Aggregatfunktionen AVG, COUNT, FIRST, LAST, MIN, MAX, StDEV, StDEVP, SUM, VAR, VARP gelten die speziellen Regeln für Aggregationen. 5
(QL) Spezielle Abfragen: JOINs Werden Daten aus mehr als einer Tabelle abgefragt, sind: Im FROM Teil der Abfrage alle Tabellennamen aufzulisten: FROM tabelle1, tabelle2, Gleichnamige Attribut durch den Tabellennamen-Präfix zu kennzeichnen: SELECT tabelle1.attribut, tabelle2.attribut, (Kann durch die Verwendung von Aliases für Tabellennamen verkürzt werden: Select t1.attribut, t2.attribut, FROM tabelle1 t1, tabelle2 t2, ) JOIN-Bedingungen der Form: Primärschlüssel_attribut = Fremdschlüssel_attribut für jede(!) Relation zwischen den im FROM-Teil der Abfrage genannten Tabellen zu formulieren. (Ohne diese JOIN-Bedingungen würden arithmetische Produkte ausgegeben) SELECT t1.attribut, t2.attribut, FROM tabelle1 t1, tabelle2 t2, WHERE t1.ps = t2.fs [AND t2.ps = t3.fs, AND ] Seite 6
(QL) Spezielle Abfragen: Aggregationen SQL-QL kennt die Aggregatfunktionen AVG, COUNT, FIRST, LAST, MIN, MAX, StDEV, StDEVP, SUM, VAR, VARP. (Siehe: https://msdn.microsoft.com/de-de/library/office/ff197054.aspx) Werden im SELECT-Teil einer Abfrage nicht aggregierte Attribute mit aggregierten gemischt, müssen alle nicht aggregierten Attribute in einer GROUP BY Klausel zusammengefasst werden: SELECT attribut_1, attribut_2, SUM(attribut_3) AS Summe_von_attribut3 FROM tabelle1 [, tabelle2, ] [WHERE ] GROUP BY attribut_1, attribut_2 [ORDER BY ]; Bedingungen an aggregierte Spalten können nicht(!) im WHERE-Teil der Abfrage formuliert werden, sondern müssen nach der GROUP BY Klausel - mittels HAVING formuliert werden: SELECT attribut_1, attribut_2, SUM(attribut_3) AS Summe_von_attribut3 FROM tabelle1 [, tabelle2, ] [WHERE attribut_1 = Bedingung, ] GROUP BY attribut_1, attribut_2 HAVING SUM(attribut_3) = Bedingung [ORDER BY ]; Seite 7
(QL) Spezielle Abfragen: Unterabfragen In SQL-QL können zwei oder mehr Abfragen in Form von Haupt- Unterabfrage(n) verschachtelt werden: SELECT Attributliste FROM Tabelle(n) WHERE Attribut Vergleichsoperator (SELECT Vergleichsattribut FROM Tabelle(n) [WHERE Attribut Vergleichsoperator (SELECT Vergleichsattribut )]) Mögliche Vergleichsoperatoren sind = < > [NOT] IN Mit IN und NOT IN kann der Wert eines Attributs mit vielen Werten aus einer Werteliste des Vergleichsattributs verglichen werden, welche in der Unterabfrage ermittelt wird. Beim Ausführen der Abfrage wird von innen nach außen gearbeitet, d.h. SQL verarbeitet zuerst die innerste [Unter-]Abfrage, dann die nächst Innere usw. und zuletzt die [Haupt-]Abfrage. Die Tiefe der Verschachtelung kann beliebig groß sein. Seite 8
ER-Modell für die folgenden Beispiele: Seite 9
Übungsaufgaben DML Verwenden Sie die Datenbank AdventureWorks, die Sie im OLAT Kurs der Vorlesung unter Proseminar (PS) -> Unterlagen SQL Data Definition Language finden 1. Legen Sie einen neuen Kunden mit folgenden Daten an ID: 1337 Vorname: Peter Nachname: Croft E-Mail Adresse: peter@acme-wheels.com 2. Tragen Sie bei dem eben erstellten Kunden die Firma ACME Wheels ein 3. Löschen Sie den eben erstellen Kunden Seite 10
Übungsaufgaben QL Verwenden Sie die Datenbank AdventureWorks, die Sie im OLAT Kurs der Vorlesung unter Proseminar (PS) -> Unterlagen SQL Data Definition Language finden 1. Geben Sie alle Kunden, sortiert nach Nach- und Vorname aus. 2. Geben Sie alle Produkte aus, die nicht mehr verkauft werden. 3. Geben Sie die Namen und Gewinnspannen aller Produkte aus, die ike" im Namen enthalten. 4. Geben Sie alle Bestellung mit unterschiedlichen Rechnungs- und Lieferadressen aus. 5. Geben Sie alle Kunden ohne mittleren Namen aus. 6. Geben Sie den Namen aller Produkte mit dem Namen ihrer Kategorie aus 7. Geben Sie alle Produkte der Kategorie Road Frames aus 8. Geben Sie die Gesamtsumme aller Bestellungen aus 9. Geben Sie die Gesamtsumme aller Bestellung pro Stadt aus, die als Lieferadresse ausgewählt wurde. 10. Geben Sie alle Produkte aus, die in mehr als 3 Bestellungen vorkommen. 11. Geben Sie eine Rangliste der meistverkauften Produkte und der damit erzielten Umsätze aus. 12. Welche Produkte wurden noch niemals verkauft? 13. Ordnen Sie die Umsätze pro Kunde in absteigender Reihenfolge. 14. Ordnen Sie die Betreuer nach Anzahl der betreuten Kunden in aufsteigender Reihenfolge. 15. Geben Sie eine Rangliste der Gewinne pro Produkt aus. Seite 11