SQL: Weitere Funktionen • Vergleich auf Zeichenketten – LIKE ist ein Operator mit dem in Zeichenketten andere Zeichenketten gesucht werden; zwei reservierte Zeichen mit besonderer Bedeutung sind hier werden; zwei reservierte Zeichen mit besonderer Bedeutung sind hier • % (manchmal *) für eine beliebige Zeichenfolge • _ für ein einzelnes, beliebiges Zeichen – Beispiel: Adresse sei ein String; suche alle Mitarbeiter aus Freiberg – Q25: SELECT V_Name, N_Name FROM Personal FROM Personal WHERE Adr LIKE ‘%Freiberg%’ – ACHTUNG: LIKE hebt im Prinzip die Atomarität der Attributwerte auf! 10. Prof. Jasper: Datenbanksysteme 1 SQL: Weitere Funktionen • Arithmetik – Übliche arithmetische Operatoren '+', '‐'. '*', and '/' können auf die Ergebniswerte angewandt werden: – Q27: SELECT V_Name, N_Name, 1.1*Gehalt FROM Personal, Projekt, Arbeitet_für WHERE Arbeitet_für.P_ID=Personal.PID AND Projekt.Proj_ID=Arbeitet_für.Proj_ID AND P_Name='ProduktX’ • Sortierung – ORDER BY sortiert die Ergebnistupel einer Anfrage entsprechend der Werte spezifizierter Attribute (ASC aufsteigen (default) und DESC absteigend). – Beispiel: Gib p alle Abteilungsname, alle g , Mitarbeiternamen und die zugeordneten g Projekte sortiert nach Abteilung und nach Nachnamen. – Q28: SELECT Abt_Name, V_Name, N_Name, P_Name , , _ Ar, Projekt , j Pr FROM Abteilungg Ab, Personal P, Arbeitet_für WHERE Ab.Abt_ID=P.Abt_Nr AND P.P_ID=Ar.P_ID AND Ar.Proj_ID=Pr.Proj_ID ORDER BY Abt_Name, N_Name b 10. Prof. Jasper: Datenbanksysteme 2 SQL: Zusammenfassung SWF‐Klauseln • Jede Abfrage in SQL kann aus sechs Teilen bestehen, wobei die ersten beiden vorhanden sein müssen. Sie werden in der folgenden Reihenfolge spezifiziert: Reihenfolge spezifiziert: – SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY <attribute list> <table list> <condition>] <grouping attribute(s)>] <group condition>] <group condition>] <attribute list>] • Jede Anfrage wird in der folgenden Reihenfolge bearbeitet – 1. WHERE‐Klausel – 2. GROUP BY und HAVING‐Klausel – 3. Sortierung 3 S ti und SELECT‐Klausel d SELECT Kl l 10. Prof. Jasper: Datenbanksysteme 3 SQL: Datenmanipulation: INSERT, UPDATE, DELETE • INSERT – Fügt ein oder mehrere Tupel zu einer Tabelle hinzu – Attributwerte sollten dabei in der gleichen Reihenfolge auftreten wie die Att ib t t llt d b i i d l i h R ih f l ft t i di zugehörigen Attribute im CREATE TABLE‐Statement – Beispiel: p – U1: INSERT INTO Personal VALUES (‘Bernd', 'Müller', '62446929', ‘30‐09‐1966', 'Leipziger Leipziger Str. 56, 09599 Freiberg Str 56 09599 Freiberg', 'M' M , 47600, 47600 '98765421' 98765421 , 4 ) 4) – Alternativ können die Attribute explizit spezifiziert werden, wobei die üblichen Bedingungen eingehalten und NULL‐Werte nicht angegeben werden müssen: – Beispiel – U1A: INSERT INTO Personal (V_Name, N_Name, P_ID) VALUES (‘Bernd', 'Müller', '62446929‘) 10. Prof. Jasper: Datenbanksysteme 4 SQL: Datenmanipulation: INSERT • INSERT (Forts.) – Alle und nur die über DDL definierte Constraints werden automatisch vom DBMS überwacht! – Mit i INSERT kann S k auch h das Ergebnis d b i einer i Anfrage f zu einer i Tabelle b ll hinzugefügt hi fü werden. d – Wenn z.B. eine (temporäre) Tabelle mit dem Namen, der Anzahl der Mitarbeiter und der Gehaltssumme einer jeden Abteilung gefüllt werden soll, kann dieses wie folgt durchgeführt werden: – U3A: CREATE TABLE Abt_Info (Abt_Name VARCHAR(10), Anz_Mitarb INTEGER, Sum_Gehalt INTEGER); – U3B U3B: INSERT INTO INSERT INTO Abt_Info Abt I f (Abt_Name, Anz_Mitarb, Sum_Gehalt) (Abt N A Mit b S G h lt) SELECT Abt_Name, COUNT (*), SUM (Gehalt) FROM Abteilung, Personal WHERE Abt_ID=Abt_Nr GROUP BY Abt_Name; • Achtung: In Abt_Info befindet sich der Zustand der DB zum Zeitpunkt der Anfrage! 10. Prof. Jasper: Datenbanksysteme 5 SQL: Datenmanipulation: UPDATE • UPDATE Mit UPDATE werden Attributwerte von einem oder mehreren Tupeln geändert Mit i Mit einer WHERE‐Klausel werden die entsprechenden Tupel WHERE Kl l d di t h d T l selektiert l kti t Eine SET‐Klausel spezifiziert das zu ändernde Attribut und dessen neuer Wert Ein Update wirkt auf genau der einen angegeben Tabelle Ein Update wirkt auf genau der einen angegeben Tabelle Beispiel: Ändere Standort und zugeordnete Abteilung für das Projekt „Supertool“: – U5: UPDATE Projekt SET Standort= ‘Dresden', Abt = 5 WHERE Projektname=‘Supertool’ – – – – – 10. Prof. Jasper: Datenbanksysteme 6 SQL: Datenmanipulation: UPDATE • UPDATE (Forts.) – Durch Update können auch neue Werte auf der Basis existierender Werte in eine Tabelle eingetragen werden eine Tabelle eingetragen werden. – Beispiel: Erhöhe das Gehalt aller Mitabeiter der Forschungsabteilung um 10%: – U6: UPDATE Personal SET Gehalt = Gehalt *1.1 WHERE Abt_Nr IN (SELECT Abt_ID FROM Abteilung FROM Abteilung WHERE Abt_Name =‘Forschung') – Der neue „Gehalt“‐Wert basiert hier auf dem bisher eingetragenen Wert – Auf der rechten Seite des „=„‐Zeichens wird der alte Wert referenziert – Auf der linken Seite des „=„‐Zeichens wird der neue Wert referenziert 10. Prof. Jasper: Datenbanksysteme 7 SQL: Datenmanipulation: DELETE • DELETE – Löscht Tupel aus einer Tabelle • Die zu löschenden Tupel p werden durch eine WHERE‐Klausel bestimmt • Die Referentielle Integrität wird berücksichtigt • Tupel werden nur aus einer Tabelle (pro Statement) gelöscht (bis auf die Tupel anderer Tabellen, die durch CASCADE betroffen sind) • Falls keine WHERE‐Klausel angegeben wird, werden alle Tupel gelöscht: Die Tabelle ist anschließend leer • Beispiele: U4A U4A: DELETE FROM Personal DELETE FROM P l WHERE N‐Name=‘Müller’ U4B: DELETE FROM Personal WHERE P_ID='123456789’ U4C: DELETE FROM Personal WHERE Abt_Nr Abt Nr IN (SELECT IN (SELECT Abt_ID Abt ID FROM Abteilung WHERE Abt_Name = ‘Forschung’) U4D: DELETE FROM Personal 10. Prof. Jasper: Datenbanksysteme 8 SQL: Fortgeschrittene Konzepte • Views – Eine View (Sicht) ist eine virtuelle Tabelle, die aus anderen Tabellen abgeleitet wird – Auf Sichten können eingeschränkt updates durchgeführt werden – In Anfragen können Sichten wie alle anderen Tabellen genutzt werden g g – Somit auch als „vordefinierte Standard‐Abfragen“ in DBS nutzbar – SQL Befehl: CREATE VIEW • Ein Tabellen (Sichten‐) Name • Eine optionale Liste von Attributnamen (z. B. um neue Name für Attribute zu vergeben oder Namen für abgeleitete Attribut zu vereinbaren • Eine SQL‐Abfrage um den Inhalt der Sicht (View) zu definieren – Beispiel: Erweiterte „Arbeitet_Für“‐Tabelle – CREATE VIEW Arbeitet_Für_Erw CREATE VIEW Arbeitet Für Erw AS SELECT V_Name, N_Name, P_Name, Stunden FROM Personal Pers, Projekt Pr, Arbeitet_Für A WHERE Pr.Proj_ID=A.Proj_ID AND Pers.P_ID=Pr.P_ID 10. Prof. Jasper: Datenbanksysteme 9 SQL: Fortgeschrittene Konzepte • Views (Forts.): – Die Sicht kann in üblichen Abfragen genutzt werden, Beispiel: – SELECT V_Name, N_Name SELECT V N N N FROM Arbeitet_Für_Erw WHERE P_Name = ‚Supertool‘; – Sobald nicht mehr benötigt, können VIEWs gelöscht werden: – DROP Arbeitet_Für_Erw; DROP A b it t Fü E – Problem: Problem: Effizienz Effizienz – Views als Abfrage: immer wenn auf eine View zugegriffen wird, berechne die Abfrage: Effizienzprobleme bei Abfragen – Materialisierte Sicht (materialized view): speichere eine physikalische Tabelle und halte sie up‐to‐date: Effizienzprobleme bei Updates (sogenannte Folgeupdates) 10. Prof. Jasper: Datenbanksysteme 10 SQL: Fortgeschrittene Konzepte • Views (Forts.): Hier (VIEW‐) UPDATES – Updates auf eine Sicht, die auf einer einzelnen Tabelle ohne Aggregatfunktionen definiert ist: Änderungen können direkt auf die Aggregatfunktionen definiert ist: Änderungen können direkt auf die Basistabelle ausgeführt werden (falls genügend Informationen vorhanden um Constraints zu erfüllen) – Updates auf Sichten, die über ein Join gebildet wurden: dieses kann möglich sein, i.a. allerdings nicht möglich – Auf Views, die Gruppierung und/oder Aggregationen beinhalten, kann kein Auf Views, die Gruppierung und/oder Aggregationen beinhalten, kann kein Update durchgeführt werden 10. Prof. Jasper: Datenbanksysteme 11 SQL: Zugriff auf SQL‐DB aus Programmen • Ziel: – Zugriff auf Daten aus Anwendungsprogrammen (im Gegensatz zum interaktiven SQL) • Warum? – Daten werden in Informationssystemen durch ungeübte (bzgl. SQL) Nutzer genutzt • Varianten: – Eingebettete Befehle • Eine Programmiersprache wird um SQL und Multimengen (Bags) ergänzt • Beispiel PASCAL R – Bibliothek von DB(MS)‐Funktionen • CALL‐Funktion in Programmiersprache für Bibliotheksfunktionen • Standard‐Bibliothek für SQL (DB‐API (Application Program Interface) – Eine Neue „Full‐fledged“ Programmiersprache für DB‐Anwendungen (4th generation languages 4GL) • • • • Minimiert den sogenannten „impedance mismatch“ (Unverträglichkeit) Mengen vs. Tupel (Record) Verarbeitung Iteratoren notwendig Keine Mengenoperationen in konventionellen Programmiersprachen 10. Prof. Jasper: Datenbanksysteme 12