Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

SQL

2.672 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

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

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 />

×