Grundkonzepte von SQL

Werbung
Internet – Praktikum im Grundstudium:
Grundlagen von SQL
Nutzung von phpMyAdmin
Dr. Guido Rößling
Dipl.-Ing. Andreas Hartl
Grundkonzepte von SQL
• Relationale Datenbanken basieren auf Tabellen
• Objektorientierte Datenbanken basieren auf Objekten
• Wir werden „nur“ mit einer relationalen DB arbeiten
– und zwar mit MySQL (www.mysql.com)
• In diesem Vortrag werden die Grundkonzepte von SQL
erläutert
– Wichtiges Wissen über Datenbanken ist Stoff der
„Datenbanken“-Vorlesungen bei Prof. A. Buchmann!
– Damit können wir uns natürlich nicht vergleichen…
– … aber für die „tägliche Praxis“ langt auch dieser Kurs ☺
27.05.2004
SQL und phpMyAdmin
2
1
Grundkonzepte von SQL
• SQL-Datenbanken werden in der Regel kommandobasiert
gesteuert
– also nicht „grafisch“ oder per Drag und Drop wie Access!
• Der Nutzer muss die wesentlichen SQL-Befehle kennen
• Essentiell ist folgendes Grundkonzept:
– Eine Datenbank enthält (viele) Tabellen
– Tabellen sind untereinander verknüpfbar (direkt / indirekt)
– Einfügen, Löschen, Ändern, Suchen erfolgt durch SQL-Abfragen
• Wie sehen diese Befehle aus?
27.05.2004
SQL und phpMyAdmin
3
Anlegen einer Database
• Anfangs enthält die Datenbank praktisch keine
Daten
• Zunächst muss eine Database angelegt werden
• Dort liegen dann die Tabellen
– Grob ähnlich zu Java Packages ☺
• Dazu dient folgender Befehl (Schlüsselwörter fett):
CREATE DATABASE [IF NOT EXISTS] name {
specification } ;
• Definition von specification: siehe Merkblatt
• Nutzung der Datenbasis: USE name;
27.05.2004
SQL und phpMyAdmin
4
2
Anlegen einer Tabelle
• Zum Anlegen einer Tabelle gibt es CREATE TABLE
• Ab hier gilt folgende Notation:
– [x]
– {y}
x ist optional
nichts, y, oder eine Folge von y durch Komma getrennt
• Syntax (EBNF):
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] name
{ create_definition }
• create_definition hat folgendes Format:
name type [NOT NULL | NULL] [DEFAULT default_value]
[AUTO_INCREMENT]
• NOT NULL: Das Feld muss immer einen definierten Wert haben
• DEFAULT: Vorgabe eines Standardwertes, falls nichts
angegeben
– Besonders hilfreich: NOT NULL + DEFAULT
• AUTO_INCREMENT: Hochzählen (bei int), wenn 0 angegeben
SQL und phpMyAdmin
27.05.2004
5
Typen zum Anlegen eines Feldes
INT
Integer-Wert, 4 Bytes
Wie int in Java
DOUBLE
Realwert, 4 Byte
Wie float in Java
DATE
Datumsangabe, Standard
'yyyy-mm-dd'
TIME
Zeitangabe
'hh-mm-ss'
TIMESTAMP
Systeminterne Zeitangabe
00000000000000
DATETIME
Datum, dann Uhrzeit
'yyyy-mm-dd
hh:mm:ss'
VARCHAR(l)
Zeichenkette (Länge l <=
255!)
'ccc'
TEXT
(Fast) beliebig langer Text "xxxx"
SET(e1,e2,..)
Mengenaufzählung
ENUM(e1, e2,…) Aufzählung, nur ein
Element wählbar
27.05.2004
SQL und phpMyAdmin
Wie Checkboxen
Wie Radio Buttons
6
3
Löschen vorhandener Tabellen
• Tabellen werden gelöscht / entfernt mit
DROP TABLE [IF EXISTS] name {, name };
• Vorsicht: die Tabelle ist dann unwiderruflich „weg“!
• Der Nutzer muss die passende Berechtigung haben
– Zuteilung der Rechte erfolgt durch den GRANT Befehl
– Syntax und Nutzung siehe MySQL-Dokumentation
27.05.2004
SQL und phpMyAdmin
7
Einfügen in eine Tabelle
• Zum Einfügen dient der INSERT Befehl:
• INSERT [INTO] tableName [ ( { colName })] VALUES
( {expr | DEFAULT} )
– Hier müssen die Daten in der richtigen Reihenfolge
angegeben werden
• INSERT [INTO] tableName SET { colName= expr |
DEFAULT };
– Die Reihenfolge ist nun egal, da die Spaltennamen
angegeben werden
• colName spezifiziert, welche Spalten betroffen sein
sollen
– Default bei Weglassen: alle Spalten
27.05.2004
SQL und phpMyAdmin
8
4
Ändern von Tabellenfeldern
• UPDATE tableName SET { colName= expr } [WHERE
whereClause];
• Ändert den Eintrag in Spalte colName in die
Expression ab
• Mittels WHERE kann spezifiziert werden, welche
Einträge betroffen sein sollen – etwa nur Personen
mit Alter > 65, …
SQL und phpMyAdmin
27.05.2004
9
Syntax der WHERE-Anfragen
• Genutzt – wie gesehen – u. a. in INSERT, UPDATE
• (Sehr) umfangreiche Syntax, hier nur Auszüge:
– Numerische Vergleiche mit x {<, >=, =, >=, >, !=} y
• Geht auch mit Datum / Uhrzeitangaben
• Es kann dabei auch gerechnet werden! (+,-,*,/,%,|,&,<<,>>)
– Logische Verknüpfungen: AND bzw. &&, OR / ||, NOT / !
– Bereichsprüfungen:
• value BETWEEN wert1 AND wert2
• value [NOT] IN (wert1, wert2, …)
– String-Vergleiche:
• x [NOT] LIKE y: Substringsuche, etwa name LIKE „%ülle%“
% dient hier als „Wildcard“
• LOCATE(x, y)
Position (ab 1) von String x in y, sonst 0
27.05.2004
SQL und phpMyAdmin
10
5
Datenbankabfragen
• Anfragen an die Datenbank erfolgen per SELECT:
SELECT [DISTINCT] feld {, feld} FROM tabelle {id,
tabelle id} [WHERE whereClause]
• Bei DISTINCT wird im Fall doppelter Datensätze nur
einer ausgegeben
• Es kann eine beliebige Auswahl von Feldern
ausgelesen werden, etwa nur vorname, alter
– Alternativ Angabe von *
alle Felder
• Das Ergebnis ist eine (interne Ergebnis-)Tabelle
– …die nur genau die abgefragten Felder enthält(!)
27.05.2004
SQL und phpMyAdmin
11
SELECT (2)
• Es können auch Felder aus mehr als einer Tabelle abgefragt werden
• Meist erfolgt im where eine Abstimmung zwischen den Feldern:
• SELECT
p.id, p.name, fibu.gehalt
FROM
Personen p, Finanzbuchhaltung fibu
WHERE
p.id = fibu.id AND p.alter > 40;
• Hier gibt es zwei Tabellen:
– Personen (id, name, alter, …)
– Finanzbuchhaltung (id, gehalt, …)
• Was besagt das Ergebnis?
• WHERE kann auch auf nicht selektierten Feldern arbeiten!
– Feldnamen bei SELECT sagen nur, was als Ergebnis sichtbar wird
27.05.2004
SQL und phpMyAdmin
12
6
„Dynamisches SQL“
• SQL-Befehle können auch (etwa per PHP!) generiert
werden
• Hier ist besonders auf korrekte Syntax zu achten
• Besonders ratsam ist hier die Ausgabe des Befehls
als XHTML-Kommentar (<!-- … -->)
• Auf die Art kann bei einem Fehler der Befehl aus
dem XHTML-Source kopiert und per phpMyAdmin
„getestet“ werden
27.05.2004
SQL und phpMyAdmin
13
Was wir verschwiegen haben…
• … ist ein Großteil von SQL und Datenbankkonzepten!
–
Vorlesungen „Datenbanken I/II“ bei Prof. A. Buchmann
– Einige Details zur Steuerung der Ausgabe
• Für „Experten“: ORDER BY, LIMIT, GROUP BY
• Kommt beim nächsten Mal im Kontext PHP dran
– Viele Datentypen
– Ändern der Tabellenstruktur per ALTER TABLE
• Das machen wir „bequem“ per phpMyAdmin
– Rechtevergabe per GRANT (brauchen wir hier auch nicht!)
– SEHR viele Optionen für WHERE, INSERT, SELECT, …
• Siehe Datenbankvorlesungen und http://dev.mysql.com/doc/
27.05.2004
SQL und phpMyAdmin
14
7
phpMyAdmin
• Der Name ist Programm:
– PHP-basierte Implementierung, genutzt per WWW…
– … um MySQL-Datenbanken…
– … zu administrieren
• Datenbasen und Tabellen werden angezeigt im
linken Navigationsframe
• Einzelne Tabellen sind einfach modifizierbar
–
–
–
–
Strukturänderung
Browsen
Einfügen, Löschen, Aktualisieren von Einträgen
SQL-Anfragen
27.05.2004
SQL und phpMyAdmin
15
phpMyAdmin (2)
• Besonders hilfreich für uns:
– Einfacher Check, ob bisherige Befehle „funktionierten“
– Testen von SQL-Befehlen:
• Vorab zum Experimentieren, „bis es geht“
• Nachträglich, um Fehler zu finden und zu beheben
•
besonders bei dynamisch zusammengestellten Befehlen!
• Zusätzlich Export als CSV-Daten möglich
27.05.2004
SQL und phpMyAdmin
16
8
phpMyAdmin (3)
• Links sind die
Tabellen zu sehen
• Das Tool ist
weitgehend
selbsterklärend
• Besonders
hilfreich: zu
„grafischen“
Operationen und
QBE wird SQL
angezeigt
27.05.2004
SQL und phpMyAdmin
17
9
Herunterladen