SlideShare ist ein Scribd-Unternehmen logo
Structured Query LanguageSQL
Ablauf / ÜbersichtWas ist SQL?SQL-BefehleINSERT, UPDATE, DELETESELECT, JOIN… weitereWeitere Aspekte zum Thema SQLAnmerkungen zum SQL-SyntaxSicherheitsaspekteNützlichesAufgabeVorbereitungAufgabeLösung
SQLDatenbanksprache für relationale DatenbankenDefinition von DatenAbfrage von DatenManipulation von DatenBesteht aus drei Teilen: Data Manipulation Language, Data Definition Language, Data Control LanguageVorteil: Unabhängigkeit von benutzer Datenbanksoftware (MySQL, MSSQL, etc)
INSERT, SELECT, UPDATE, DELETE, JOINSQL-Befehle
INSERT INTOFügt neue Daten in die Datenbank einSyntax: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: BeispielINSERT INTO firma(titel, standort)VALUES(‘Reissdorf‘, ‘Köln‘),	(‘Sion‘, ‘Köln‘)
UPDATEBefehl, um Datensätze zu ändernSyntax:UPDATE tabelleSETspalte1 = ‘Wert 1‘,spalte2 = ‘Wert 2‘WHEREid = 99;ACHTUNG!: Wird WHERE weggelassen, werden ALLE Datensätze in der Tabelle geändert!
UPDATE: BeispielUPDATE firmaSETstandort= ‘München‘WHEREid= 6;WHERE-Anweisungen können auf alle Spalten angewendet werden:	 WHERE titel = ‘Sion‘
DELETELöscht Datensätze aus der DatenbankSyntax:DELETE FROM tabelleWHEREid = 5ACHTUNG!: Wird die WHERE-Anweisung weggelassen, werden ALLE Daten der Tabelle gelöscht!
DELETE: BeispielDELETE FROM firmaWHEREid = 7Auch hier kann sie WHERE Anweisung andere Spalten abfragen: WHERE titel LIKE ‘Franzisk%‘
SELECT
SELECT: BeispielSELECT *FROM firmaWHERE standort= ‘Köln‘ORDER BY titel ASC;Tipp:	WHERE standort LIKE ‘Kö%‘
JOINs4 wichtige JOIN-ArtenInner/Equivalent/Natural JOINLeft (Outer) JOINRight (Outer) JOINFull (Outer) JOINDienen dazu, Tabellen bei Operationen zu verknüpfenErgebnis wird wie normale Tabelle verwendetVerdeutlichung: Es entsteht eine neue, virtuelle Tabelle, die sich aus den beiden (oder mehreren) „gejointen“ Tabellen zusammensetzt.
JOINs: SyntaxSyntax:(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 JOINDie 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 JOINVariante 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 JOINKombination aus Right + LeftJoinAlle Elemente aus beiden Tabellen werden übernommenElemente mit übereinstimmendem Attribut werden verknüpft Es können unvollständige Datensätze entstehen
Weitere, weniger verbreitete JOINsUNION JOINÄhnlich FULL JOIN, ohne Verknüpfung bei gleichem AttributSEMI JOINVergleichbar mit INNER JOIN, allerdings werden nur Elemente aus der ersten Tabelle  übernommenSELF JOINVerknüpfung der selben TabelleCROSS JOINErzeugt alle Möglichen Zeilenkombinationen aus beiden TabellenKreuztabellenprodukt
JOINs: BeispielSELECT bierart.titel AS ba, firma.titel AS f, bier.alkoholgehalt AS alkFROM bier AS bierINNER JOIN bierart AS bierart USING(bierartid)LEFT JOIN firma AS firma USING(firmaid)ORDER BY firma.titel ASCLiefert Ergebnis, wenn die verknüpfte Firma, nicht aber, wenn die verknüpfte Bierart fehlt
Syntax, Nützliches, SicherheitWeitere Aspekte zum Thema SQL
Weitere SQL-BefehleTRUNCATE tabelleLöscht alle Daten der angegebenen Tabelle und setzt AUTO_INCREMENT der Tabelle zurückCREATE TABLE tabelle (‘Spalte1‘, ‘Spalte 1 Typ‘, ‘Spalte2‘, ‘Spalte2 Typ‘)Erzeugt tabelle mit den Spalten Spalte1 und Spalte2CREATE DATABASE, DROP TABLE, ALTER TABLE
Anmerkungen zum Syntax / SchlüsselwörterStrings müssen in Abfragen immer in ‘ oder “ stehenMüssen escaped werdenBei WHERE-Anweisungen darf nur ein = verwendet werden, nicht wie bei Java == (Also WHERE x = 3LIKE: WHERE spaltex LIKE ‘%Köl%‘Gibt alle Datensätze aus, in deren Spalte spaltexKöl vorkommt% = Platzhalter für beliebig viele ZeichenDISTINCT: SELECT DISTINC spaltex FROM tabelleWenn es in der Tabelle mehrere Datensätze gibt, in denen spaltex übereinstimmt, wird nur einer dieser Datensätze ausgelesen.
NützlichesAS – Spalten-Namen können innerhalb von Abfragen mit anderem Namen benutzt werden. Z.B.:SELECT firma.titel AS firmenname, bierart.titel AS bierartnameFROM firma AS firmaMehrere Werte in WHERE Anweisung abfragen:WHERE id IN(1,7,25,38) oder WHERE titel IN(‘test‘, ‘test2‘)AUTO_INCREMENTFü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
SicherheitsaspekteBevor 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 werdenAngriffs-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 BierdatenbankAufgabe
ER-Diagramm der BierdatenbankEntitäten: Bierart, FirmaRelationship: Bier
PHP-GrundlagenSQL-Queries immer in doppelten Anführungszeichen schreiben (“)Alle Variablen fangen mit $ anVariablen können innerhalb von “ genutzt werdenFalls in der Query eine Variable genutzt wird, die einen String enthält, muss diese mit einfachen ‘ umschlossen werdenJede Anweisung endet mit einem ;Kommentare wie in JavaBeispiel:$sql->query(“SELECT …. WHERE x = ‘$data‘ “);
VorbereitungXAMPP suchenEntweder DesktopOder C:rogrammeamppXAMPP startenxampp_start.exe
Datenbank vorbereitenIm Browser 127.0.0.1/phpmyadmin aufrufenBei „Neue Datenbank anlegen“:„bier“ eingeben -> „Anlegen“ klickenAuf der folgenden Seite den Reiter „Importieren“ wählenDate bierdatenbank.sql von moodle auswählen -> OKFertig!
PHP-Datei vorbereitenDatei index.php aus moodle kopieren:/bier/index.phpAngabe relativ zum Verzeichnis htdocs, welches sich im xampp-Verzeichnis befindetDatei kann zum testen über http://127.0.0.1/bier/ aufgerufen werdenIn die Datei müssen SQL-Queries eingetragen werdenz.B. C.rogrammeampptdocsierndex.php
AufgabeIn der Datei index.php wurden einige Abfragen durch QUERY HIER ersetztDie fehlenden Abfragen sollen nun eingefügt werden, so dass das Script funktioniertVorgeschlagene Reihenfolge: (Nach Schwierigkeit)Bierart einfügenFirma einfügenBier einfügenListe aller Biere ausgebenFirmen suchen, die bestimmte Bierart brauen
ER-Diagramm der BierdatenbankEntitäten: Bierart, FirmaRelationship: 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 INTO
lehrerfreund
 
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ó social
Josep 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 batxillerat
mmarti61
 
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üística
Epsa 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-18
jordimanero
 

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 Grundkurs
guest48194a
 
Microsoft Access Grundkurs
Microsoft Access GrundkursMicrosoft Access Grundkurs
Microsoft Access Grundkurs
borya
 
Vorlesung 7: Laufzeit, Maps
Vorlesung 7: Laufzeit, MapsVorlesung 7: Laufzeit, Maps
Vorlesung 7: Laufzeit, Maps
Michael 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-API
tutego
 
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 / ÜbersichtWas ist SQL?SQL-BefehleINSERT, UPDATE, DELETESELECT, JOIN… weitereWeitere Aspekte zum Thema SQLAnmerkungen zum SQL-SyntaxSicherheitsaspekteNützlichesAufgabeVorbereitungAufgabeLösung
  • 3. SQLDatenbanksprache für relationale DatenbankenDefinition von DatenAbfrage von DatenManipulation von DatenBesteht aus drei Teilen: Data Manipulation Language, Data Definition Language, Data Control LanguageVorteil: Unabhängigkeit von benutzer Datenbanksoftware (MySQL, MSSQL, etc)
  • 4. INSERT, SELECT, UPDATE, DELETE, JOINSQL-Befehle
  • 5. INSERT INTOFügt neue Daten in die Datenbank einSyntax: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: BeispielINSERT INTO firma(titel, standort)VALUES(‘Reissdorf‘, ‘Köln‘), (‘Sion‘, ‘Köln‘)
  • 7. UPDATEBefehl, um Datensätze zu ändernSyntax:UPDATE tabelleSETspalte1 = ‘Wert 1‘,spalte2 = ‘Wert 2‘WHEREid = 99;ACHTUNG!: Wird WHERE weggelassen, werden ALLE Datensätze in der Tabelle geändert!
  • 8. UPDATE: BeispielUPDATE firmaSETstandort= ‘München‘WHEREid= 6;WHERE-Anweisungen können auf alle Spalten angewendet werden:  WHERE titel = ‘Sion‘
  • 9. DELETELöscht Datensätze aus der DatenbankSyntax:DELETE FROM tabelleWHEREid = 5ACHTUNG!: Wird die WHERE-Anweisung weggelassen, werden ALLE Daten der Tabelle gelöscht!
  • 10. DELETE: BeispielDELETE FROM firmaWHEREid = 7Auch hier kann sie WHERE Anweisung andere Spalten abfragen: WHERE titel LIKE ‘Franzisk%‘
  • 12. SELECT: BeispielSELECT *FROM firmaWHERE standort= ‘Köln‘ORDER BY titel ASC;Tipp: WHERE standort LIKE ‘Kö%‘
  • 13. JOINs4 wichtige JOIN-ArtenInner/Equivalent/Natural JOINLeft (Outer) JOINRight (Outer) JOINFull (Outer) JOINDienen dazu, Tabellen bei Operationen zu verknüpfenErgebnis wird wie normale Tabelle verwendetVerdeutlichung: Es entsteht eine neue, virtuelle Tabelle, die sich aus den beiden (oder mehreren) „gejointen“ Tabellen zusammensetzt.
  • 14. JOINs: SyntaxSyntax:(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 JOINDie 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 JOINVariante 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 JOINKombination aus Right + LeftJoinAlle Elemente aus beiden Tabellen werden übernommenElemente mit übereinstimmendem Attribut werden verknüpft Es können unvollständige Datensätze entstehen
  • 18. Weitere, weniger verbreitete JOINsUNION JOINÄhnlich FULL JOIN, ohne Verknüpfung bei gleichem AttributSEMI JOINVergleichbar mit INNER JOIN, allerdings werden nur Elemente aus der ersten Tabelle übernommenSELF JOINVerknüpfung der selben TabelleCROSS JOINErzeugt alle Möglichen Zeilenkombinationen aus beiden TabellenKreuztabellenprodukt
  • 19. JOINs: BeispielSELECT bierart.titel AS ba, firma.titel AS f, bier.alkoholgehalt AS alkFROM bier AS bierINNER JOIN bierart AS bierart USING(bierartid)LEFT JOIN firma AS firma USING(firmaid)ORDER BY firma.titel ASCLiefert Ergebnis, wenn die verknüpfte Firma, nicht aber, wenn die verknüpfte Bierart fehlt
  • 21. Weitere SQL-BefehleTRUNCATE tabelleLöscht alle Daten der angegebenen Tabelle und setzt AUTO_INCREMENT der Tabelle zurückCREATE TABLE tabelle (‘Spalte1‘, ‘Spalte 1 Typ‘, ‘Spalte2‘, ‘Spalte2 Typ‘)Erzeugt tabelle mit den Spalten Spalte1 und Spalte2CREATE DATABASE, DROP TABLE, ALTER TABLE
  • 22. Anmerkungen zum Syntax / SchlüsselwörterStrings müssen in Abfragen immer in ‘ oder “ stehenMüssen escaped werdenBei WHERE-Anweisungen darf nur ein = verwendet werden, nicht wie bei Java == (Also WHERE x = 3LIKE: WHERE spaltex LIKE ‘%Köl%‘Gibt alle Datensätze aus, in deren Spalte spaltexKöl vorkommt% = Platzhalter für beliebig viele ZeichenDISTINCT: SELECT DISTINC spaltex FROM tabelleWenn es in der Tabelle mehrere Datensätze gibt, in denen spaltex übereinstimmt, wird nur einer dieser Datensätze ausgelesen.
  • 23. NützlichesAS – Spalten-Namen können innerhalb von Abfragen mit anderem Namen benutzt werden. Z.B.:SELECT firma.titel AS firmenname, bierart.titel AS bierartnameFROM firma AS firmaMehrere Werte in WHERE Anweisung abfragen:WHERE id IN(1,7,25,38) oder WHERE titel IN(‘test‘, ‘test2‘)AUTO_INCREMENTFü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. SicherheitsaspekteBevor 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 werdenAngriffs-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 BierdatenbankAufgabe
  • 26. ER-Diagramm der BierdatenbankEntitäten: Bierart, FirmaRelationship: Bier
  • 27. PHP-GrundlagenSQL-Queries immer in doppelten Anführungszeichen schreiben (“)Alle Variablen fangen mit $ anVariablen können innerhalb von “ genutzt werdenFalls in der Query eine Variable genutzt wird, die einen String enthält, muss diese mit einfachen ‘ umschlossen werdenJede Anweisung endet mit einem ;Kommentare wie in JavaBeispiel:$sql->query(“SELECT …. WHERE x = ‘$data‘ “);
  • 28. VorbereitungXAMPP suchenEntweder DesktopOder C:rogrammeamppXAMPP startenxampp_start.exe
  • 29. Datenbank vorbereitenIm Browser 127.0.0.1/phpmyadmin aufrufenBei „Neue Datenbank anlegen“:„bier“ eingeben -> „Anlegen“ klickenAuf der folgenden Seite den Reiter „Importieren“ wählenDate bierdatenbank.sql von moodle auswählen -> OKFertig!
  • 30. PHP-Datei vorbereitenDatei index.php aus moodle kopieren:/bier/index.phpAngabe relativ zum Verzeichnis htdocs, welches sich im xampp-Verzeichnis befindetDatei kann zum testen über http://127.0.0.1/bier/ aufgerufen werdenIn die Datei müssen SQL-Queries eingetragen werdenz.B. C.rogrammeampptdocsierndex.php
  • 31. AufgabeIn der Datei index.php wurden einige Abfragen durch QUERY HIER ersetztDie fehlenden Abfragen sollen nun eingefügt werden, so dass das Script funktioniertVorgeschlagene Reihenfolge: (Nach Schwierigkeit)Bierart einfügenFirma einfügenBier einfügenListe aller Biere ausgebenFirmen suchen, die bestimmte Bierart brauen
  • 32. ER-Diagramm der BierdatenbankEntitäten: Bierart, FirmaRelationship: Bier