SlideShare ist ein Scribd-Unternehmen logo
Structured Query Language SQL
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
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)
INSERT, SELECT, UPDATE, DELETE, JOIN SQL-Befehle
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‘)
INSERT INTO: Beispiel INSERT INTO firma (titel, standort) VALUES (‘Reissdorf‘, ‘Köln‘), 	(‘Sion‘, ‘Köln‘)
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!
UPDATE: Beispiel UPDATE firma SET standort= ‘München‘ WHERE id= 6; WHERE-Anweisungen können auf alle Spalten angewendet werden: 	 WHERE titel = ‘Sion‘
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!
DELETE: Beispiel DELETE FROM firma WHERE id = 7 Auch hier kann sie WHERE Anweisung andere Spalten abfragen:  WHERE titel LIKE ‘Franzisk%‘
SELECT
SELECT: Beispiel SELECT * FROM firma WHERE standort= ‘Köln‘ ORDER BY titel ASC; Tipp: 	WHERE standort LIKE ‘Kö%‘
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.
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 …
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
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
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
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
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
Syntax, Nützliches, Sicherheit Weitere Aspekte zum Thema SQL
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
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.
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
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
Anwenden von SQL am Beispiel eines Web-Frontends für eine Bierdatenbank Aufgabe
ER-Diagramm der Bierdatenbank Entitäten: Bierart, Firma Relationship: Bier
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‘ “);
Vorbereitung XAMPP suchen Entweder Desktop Oder C:rogrammeampp XAMPP starten xampp_start.exe
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!
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
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
ER-Diagramm der Bierdatenbank Entitäten: Bierart, Firma Relationship: Bier

Weitere ähnliche Inhalte

Andere mochten auch

Apostila PhP com Wamp, 2a. parte
Apostila PhP com Wamp, 2a. parteApostila PhP com Wamp, 2a. parte
Apostila PhP com Wamp, 2a. parte
Ilton Barbosa
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
Manuel Menezes de Sequeira
 
Agile Management
Agile ManagementAgile Management
Agile Management
Fábio Aguiar
 
The 8051 assembly language
The 8051 assembly languageThe 8051 assembly language
The 8051 assembly language
hemant meena
 
mySQL - INSERT INTO
mySQL - INSERT INTOmySQL - INSERT INTO
mySQL - INSERT INTOlehrerfreund
 
Comment être agile dans un contexte non lié aux TI ?
Comment être agile dans un contexte non lié aux TI ?Comment être agile dans un contexte non lié aux TI ?
Comment être agile dans un contexte non lié aux TI ?
Pyxis Technologies
 
Convegno la mela nel mondo interpoma bz - 16-11-2012 1+2 - martin thalheime...
Convegno la mela nel mondo   interpoma bz - 16-11-2012 1+2 - martin thalheime...Convegno la mela nel mondo   interpoma bz - 16-11-2012 1+2 - martin thalheime...
Convegno la mela nel mondo interpoma bz - 16-11-2012 1+2 - martin thalheime...
Image Line
 
Scrum Guide
Scrum GuideScrum Guide
Scrum Guide
Denis Voituron
 
area econòmica i patrimonial
area econòmica i patrimonialarea econòmica i patrimonial
area econòmica i patrimonial
Sandro
 
Canvi climàtic: Efectes i percepció social
Canvi climàtic: Efectes i percepció socialCanvi climàtic: Efectes i percepció social
Canvi climàtic: Efectes i percepció socialJosep Lluís Ruiz
 
Arquitectura de Computadores (II Bimestre)
Arquitectura de Computadores (II Bimestre)Arquitectura de Computadores (II Bimestre)
Arquitectura de Computadores (II Bimestre)
Videoconferencias UTPL
 
Tema 3 Dissolucions 1er batxillerat
Tema 3 Dissolucions 1er batxilleratTema 3 Dissolucions 1er batxillerat
Tema 3 Dissolucions 1er batxilleratmmarti61
 
Les propietats dels materials i els assaigs d'estudi
Les propietats dels materials i els assaigs d'estudiLes propietats dels materials i els assaigs d'estudi
Les propietats dels materials i els assaigs d'estudi
Glòria García García
 
Le Lean Product Management présenté au LeanKanban Day 2015
Le Lean Product Management présenté au LeanKanban Day 2015Le Lean Product Management présenté au LeanKanban Day 2015
Le Lean Product Management présenté au LeanKanban Day 2015
Sébastien Sacard
 
1c-EL SEXENNI DEMOCRÀTIC
1c-EL SEXENNI DEMOCRÀTIC1c-EL SEXENNI DEMOCRÀTIC
1c-EL SEXENNI DEMOCRÀTIC
jcorbala
 
La Variació Lingüística
La Variació LingüísticaLa Variació Lingüística
La Variació LingüísticaEpsa Llengues
 
La població espanyola. (2) Els contrasts territorials
La població espanyola. (2) Els contrasts territorialsLa població espanyola. (2) Els contrasts territorials
La població espanyola. (2) Els contrasts territorials
Empar Gallego
 
Unitat 2 la revolució industrial 2017-18
Unitat 2   la revolució industrial 2017-18Unitat 2   la revolució industrial 2017-18
Unitat 2 la revolució industrial 2017-18jordimanero
 

Andere mochten auch (20)

Apostila PhP com Wamp, 2a. parte
Apostila PhP com Wamp, 2a. parteApostila PhP com Wamp, 2a. parte
Apostila PhP com Wamp, 2a. parte
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
 
Agile Management
Agile ManagementAgile Management
Agile Management
 
The 8051 assembly language
The 8051 assembly languageThe 8051 assembly language
The 8051 assembly language
 
mySQL - INSERT INTO
mySQL - INSERT INTOmySQL - INSERT INTO
mySQL - INSERT INTO
 
Comment être agile dans un contexte non lié aux TI ?
Comment être agile dans un contexte non lié aux TI ?Comment être agile dans un contexte non lié aux TI ?
Comment être agile dans un contexte non lié aux TI ?
 
Convegno la mela nel mondo interpoma bz - 16-11-2012 1+2 - martin thalheime...
Convegno la mela nel mondo   interpoma bz - 16-11-2012 1+2 - martin thalheime...Convegno la mela nel mondo   interpoma bz - 16-11-2012 1+2 - martin thalheime...
Convegno la mela nel mondo interpoma bz - 16-11-2012 1+2 - martin thalheime...
 
Scrum Guide
Scrum GuideScrum Guide
Scrum Guide
 
Lliço5 Cinèticaquímica
Lliço5 CinèticaquímicaLliço5 Cinèticaquímica
Lliço5 Cinèticaquímica
 
area econòmica i patrimonial
area econòmica i patrimonialarea econòmica i patrimonial
area econòmica i patrimonial
 
Canvi climàtic: Efectes i percepció social
Canvi climàtic: Efectes i percepció socialCanvi climàtic: Efectes i percepció social
Canvi climàtic: Efectes i percepció social
 
Arquitectura de Computadores (II Bimestre)
Arquitectura de Computadores (II Bimestre)Arquitectura de Computadores (II Bimestre)
Arquitectura de Computadores (II Bimestre)
 
Tema 3 Dissolucions 1er batxillerat
Tema 3 Dissolucions 1er batxilleratTema 3 Dissolucions 1er batxillerat
Tema 3 Dissolucions 1er batxillerat
 
Les propietats dels materials i els assaigs d'estudi
Les propietats dels materials i els assaigs d'estudiLes propietats dels materials i els assaigs d'estudi
Les propietats dels materials i els assaigs d'estudi
 
Tema15
Tema15Tema15
Tema15
 
Le Lean Product Management présenté au LeanKanban Day 2015
Le Lean Product Management présenté au LeanKanban Day 2015Le Lean Product Management présenté au LeanKanban Day 2015
Le Lean Product Management présenté au LeanKanban Day 2015
 
1c-EL SEXENNI DEMOCRÀTIC
1c-EL SEXENNI DEMOCRÀTIC1c-EL SEXENNI DEMOCRÀTIC
1c-EL SEXENNI DEMOCRÀTIC
 
La Variació Lingüística
La Variació LingüísticaLa Variació Lingüística
La Variació Lingüística
 
La població espanyola. (2) Els contrasts territorials
La població espanyola. (2) Els contrasts territorialsLa població espanyola. (2) Els contrasts territorials
La població espanyola. (2) Els contrasts territorials
 
Unitat 2 la revolució industrial 2017-18
Unitat 2   la revolució industrial 2017-18Unitat 2   la revolució industrial 2017-18
Unitat 2 la revolució industrial 2017-18
 

Ähnlich wie SQL

BIT I WiSe 2014 | Basisinformationstechnologie I - 10: Programmiersprachen III
BIT I WiSe 2014 | Basisinformationstechnologie I - 10: Programmiersprachen IIIBIT I WiSe 2014 | Basisinformationstechnologie I - 10: Programmiersprachen III
BIT I WiSe 2014 | Basisinformationstechnologie I - 10: Programmiersprachen III
Institute for Digital Humanities, University of Cologne
 
Microsoft Access Grundkurs
Microsoft Access GrundkursMicrosoft Access Grundkurs
Microsoft Access Grundkursguest48194a
 
Microsoft Access Grundkurs
Microsoft Access GrundkursMicrosoft Access Grundkurs
Microsoft Access Grundkursborya
 
Vorlesung 7: Laufzeit, Maps
Vorlesung 7: Laufzeit, MapsVorlesung 7: Laufzeit, Maps
Vorlesung 7: Laufzeit, MapsMichael Zilske
 
Excel 2010 auffrischung
Excel 2010   auffrischungExcel 2010   auffrischung
Excel 2010 auffrischung
Hasan_42
 
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
Christian Kauhaus
 
Pyparsing
PyparsingPyparsing
Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit Extbase
Stefan Frömken
 
SQL-Updates mit der JDBC-API
SQL-Updates mit der JDBC-APISQL-Updates mit der JDBC-API
SQL-Updates mit der JDBC-APItutego
 
Funktionale Programmierung und mehr mit Scala
Funktionale Programmierung und mehr mit ScalaFunktionale Programmierung und mehr mit Scala
Funktionale Programmierung und mehr mit Scala
thoherr
 

Ähnlich wie SQL (10)

BIT I WiSe 2014 | Basisinformationstechnologie I - 10: Programmiersprachen III
BIT I WiSe 2014 | Basisinformationstechnologie I - 10: Programmiersprachen IIIBIT I WiSe 2014 | Basisinformationstechnologie I - 10: Programmiersprachen III
BIT I WiSe 2014 | Basisinformationstechnologie I - 10: Programmiersprachen III
 
Microsoft Access Grundkurs
Microsoft Access GrundkursMicrosoft Access Grundkurs
Microsoft Access Grundkurs
 
Microsoft Access Grundkurs
Microsoft Access GrundkursMicrosoft Access Grundkurs
Microsoft Access Grundkurs
 
Vorlesung 7: Laufzeit, Maps
Vorlesung 7: Laufzeit, MapsVorlesung 7: Laufzeit, Maps
Vorlesung 7: Laufzeit, Maps
 
Excel 2010 auffrischung
Excel 2010   auffrischungExcel 2010   auffrischung
Excel 2010 auffrischung
 
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
 
Pyparsing
PyparsingPyparsing
Pyparsing
 
Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit Extbase
 
SQL-Updates mit der JDBC-API
SQL-Updates mit der JDBC-APISQL-Updates mit der JDBC-API
SQL-Updates mit der JDBC-API
 
Funktionale Programmierung und mehr mit Scala
Funktionale Programmierung und mehr mit ScalaFunktionale Programmierung und mehr mit Scala
Funktionale Programmierung und mehr mit Scala
 

SQL

  • 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)
  • 4. INSERT, SELECT, UPDATE, DELETE, JOIN SQL-Befehle
  • 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
  • 20. Syntax, Nützliches, Sicherheit Weitere Aspekte zum Thema SQL
  • 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
  • 26. ER-Diagramm der Bierdatenbank Entitäten: Bierart, Firma Relationship: Bier
  • 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‘ “);
  • 28. Vorbereitung XAMPP suchen Entweder Desktop Oder C:rogrammeampp XAMPP starten xampp_start.exe
  • 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
  • 32. ER-Diagramm der Bierdatenbank Entitäten: Bierart, Firma Relationship: Bier