2. Ablauf / Übersicht Was ist SQL? SQL-Befehle INSERT, UPDATE, DELETE SELECT, JOIN … weitere Weitere Aspekte zum Thema SQL Anmerkungen zum SQL-Syntax Sicherheitsaspekte Nützliches Aufgabe Vorbereitung Aufgabe Lösung
3. SQL Datenbanksprache für relationale Datenbanken Definition von Daten Abfrage von Daten Manipulation von Daten Besteht aus drei Teilen: Data Manipulation Language, Data Definition Language, Data Control Language Vorteil: Unabhängigkeit von benutzer Datenbanksoftware (MySQL, MSSQL, etc)
5. INSERT INTO Fügt neue Daten in die Datenbank ein Syntax: INSERT INTO tabelle (spalte1, spalte2, spalte3) VALUES (‘#1 Wert Spalte 1‘, ‘#1 Wert Spalte 2‘, ‘#1 Wert Spalte 3‘), (‘#2 Wert Spalte 1‘, ‘#2 Wert Spalte 2‘, ‘#2 Wert Spalte 3‘)
6. INSERT INTO: Beispiel INSERT INTO firma (titel, standort) VALUES (‘Reissdorf‘, ‘Köln‘), (‘Sion‘, ‘Köln‘)
7. UPDATE Befehl, um Datensätze zu ändern Syntax: UPDATE tabelle SET spalte1 = ‘Wert 1‘, spalte2 = ‘Wert 2‘ WHERE id = 99; ACHTUNG!: Wird WHERE weggelassen, werden ALLE Datensätze in der Tabelle geändert!
8. UPDATE: Beispiel UPDATE firma SET standort= ‘München‘ WHERE id= 6; WHERE-Anweisungen können auf alle Spalten angewendet werden: WHERE titel = ‘Sion‘
9. DELETE Löscht Datensätze aus der Datenbank Syntax: DELETE FROM tabelle WHERE id = 5 ACHTUNG!: Wird die WHERE-Anweisung weggelassen, werden ALLE Daten der Tabelle gelöscht!
10. DELETE: Beispiel DELETE FROM firma WHERE id = 7 Auch hier kann sie WHERE Anweisung andere Spalten abfragen: WHERE titel LIKE ‘Franzisk%‘
12. SELECT: Beispiel SELECT * FROM firma WHERE standort= ‘Köln‘ ORDER BY titel ASC; Tipp: WHERE standort LIKE ‘Kö%‘
13. JOINs 4 wichtige JOIN-Arten Inner/Equivalent/Natural JOIN Left (Outer) JOIN Right (Outer) JOIN Full (Outer) JOIN Dienen dazu, Tabellen bei Operationen zu verknüpfen Ergebnis wird wie normale Tabelle verwendet Verdeutlichung: Es entsteht eine neue, virtuelle Tabelle, die sich aus den beiden (oder mehreren) „gejointen“ Tabellen zusammensetzt.
14. JOINs: Syntax Syntax: (INNER|LEFT|RIGHT|FULL) (OUTER) JOIN tabelle2 ON(tabelle1.attribut = tabelle2.attribut) (INNER|LEFT|RIGHT|FULL) (OUTER) JOIN tabelle2 USING(attribut) (INNER|LEFT|RIGHT|FULL) (OUTER) JOIN tabelle2 ON(tabelle1.ein_attribut = tabelle2.ein_anderes_attribut) Auch Möglich: ON(tabelle1.spaltex = tabelle2.spaltey AND tabelle1.spaltey = tabelle2.spaltez) Muss in der 2. Zeile einer Abfrage stehen: Nach SELECT …, UPDATE …, DELETE …
15. INNER JOIN Die Datensätze werden in eine neue Tabelle übernommen sofern das Attribut auf das sich der Join bezieht (hier SNr) in beiden Tabellen vorhanden ist
16. LEFT/RIGHT JOIN Variante des InnerJoins Elemente aus der linken (ersten) oder rechten (zweiten) Tabelle werden auch einbezogen, wenn das Attribut nicht überall vorhanden ist Es können Datensätze entstehen, die nicht vollständig sind
17. FULL JOIN Kombination aus Right + LeftJoin Alle Elemente aus beiden Tabellen werden übernommen Elemente mit übereinstimmendem Attribut werden verknüpft Es können unvollständige Datensätze entstehen
18. Weitere, weniger verbreitete JOINs UNION JOIN Ähnlich FULL JOIN, ohne Verknüpfung bei gleichem Attribut SEMI JOIN Vergleichbar mit INNER JOIN, allerdings werden nur Elemente aus der ersten Tabelle übernommen SELF JOIN Verknüpfung der selben Tabelle CROSS JOIN Erzeugt alle Möglichen Zeilenkombinationen aus beiden Tabellen Kreuztabellenprodukt
19. JOINs: Beispiel SELECT bierart.titel AS ba, firma.titel AS f, bier.alkoholgehalt AS alk FROM bier AS bier INNER JOIN bierart AS bierart USING(bierartid) LEFT JOIN firma AS firma USING(firmaid) ORDER BY firma.titel ASC Liefert Ergebnis, wenn die verknüpfte Firma, nicht aber, wenn die verknüpfte Bierart fehlt
21. Weitere SQL-Befehle TRUNCATE tabelle Löscht alle Daten der angegebenen Tabelle und setzt AUTO_INCREMENT der Tabelle zurück CREATE TABLE tabelle (‘Spalte1‘, ‘Spalte 1 Typ‘, ‘Spalte2‘, ‘Spalte2 Typ‘) Erzeugt tabelle mit den Spalten Spalte1 und Spalte2 CREATE DATABASE, DROP TABLE, ALTER TABLE
22. Anmerkungen zum Syntax / Schlüsselwörter Strings müssen in Abfragen immer in ‘ oder “ stehen Müssen escaped werden Bei WHERE-Anweisungen darf nur ein = verwendet werden, nicht wie bei Java == (Also WHERE x = 3 LIKE: WHERE spaltex LIKE ‘%Köl%‘ Gibt alle Datensätze aus, in deren Spalte spaltexKöl vorkommt % = Platzhalter für beliebig viele Zeichen DISTINCT: SELECT DISTINC spaltex FROM tabelle Wenn es in der Tabelle mehrere Datensätze gibt, in denen spaltex übereinstimmt, wird nur einer dieser Datensätze ausgelesen.
23. Nützliches AS – Spalten-Namen können innerhalb von Abfragen mit anderem Namen benutzt werden. Z.B.: SELECT firma.titel AS firmenname, bierart.titel AS bierartname FROM firma AS firma Mehrere Werte in WHERE Anweisung abfragen: WHERE id IN(1,7,25,38) oder WHERE titel IN(‘test‘, ‘test2‘) AUTO_INCREMENT Für Spalten kann das AUTO_INCREMENT Attribut gesetzt werden: Für jeden neuen Datensatz wird der Integer-Wert der Spalte automatisch um 1 erhöht: -> als künstlicher Primärindex
24. Sicherheitsaspekte Bevor Daten in die Datenbank geschrieben werden, müssen diese unbedingt Validiert werden. Dies ist vor allem bei Strings nötig. Diese müssen „escaped“ werden: Anführungszeichen müssen ersetzt werden Angriffs-Szenario: SELECT * FROM tabelle WHERE spalte 1 = x AND spalte 2 = ‘{USER-EINGABE}‘ {USER-EINGABE} = ‘ OR spalte 1 = 19 OR ‘‘ = ‘ Damit würde der User die WHERE-Anweisung und kann Daten auslesen oder (im schlimmsten Falle) löschen
25. Anwenden von SQL am Beispiel eines Web-Frontends für eine Bierdatenbank Aufgabe
27. PHP-Grundlagen SQL-Queries immer in doppelten Anführungszeichen schreiben (“) Alle Variablen fangen mit $ an Variablen können innerhalb von “ genutzt werden Falls in der Query eine Variable genutzt wird, die einen String enthält, muss diese mit einfachen ‘ umschlossen werden Jede Anweisung endet mit einem ; Kommentare wie in Java Beispiel: $sql->query(“SELECT …. WHERE x = ‘$data‘ “);
29. Datenbank vorbereiten Im Browser 127.0.0.1/phpmyadmin aufrufen Bei „Neue Datenbank anlegen“: „bier“ eingeben -> „Anlegen“ klicken Auf der folgenden Seite den Reiter „Importieren“ wählen Date bierdatenbank.sql von moodle auswählen -> OK Fertig!
30. PHP-Datei vorbereiten Datei index.php aus moodle kopieren: /bier/index.php Angabe relativ zum Verzeichnis htdocs, welches sich im xampp-Verzeichnis befindet Datei kann zum testen über http://127.0.0.1/bier/ aufgerufen werden In die Datei müssen SQL-Queries eingetragen werden z.B. C.rogrammeampptdocsierndex.php
31. Aufgabe In der Datei index.php wurden einige Abfragen durch QUERY HIER ersetzt Die fehlenden Abfragen sollen nun eingefügt werden, so dass das Script funktioniert Vorgeschlagene Reihenfolge: (Nach Schwierigkeit) Bierart einfügen Firma einfügen Bier einfügen Liste aller Biere ausgeben Firmen suchen, die bestimmte Bierart brauen