SQL

2.396 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
2.396
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
157
Aktionen
Geteilt
0
Downloads
25
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

SQL

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

×