Gewerbliche Schulen der Stadt Essen

Werbung
INFORMATIONSUNTERLAGEN
zu
„Grundzüge der SQL-Programmierung“
Vag 09/2005
1.
SQL
1.1. Einführung
Die Sprache SQL (structured query language) wird als einer der Hauptgründe für den
kommerziellen Erfolg von relationalen Datenbanken in der Geschäftswelt gesehen. Die
ANSI (American National Standards Institute) und die ISO (International Standards Organization) entwickelten eine Standard Version von SQL (ANSI 1986) mit dem Namen SQL86 oder SQL1. Seit den 90er Jahren wird der erweiterte Standard SQL2 oder SQL-92 angewendet. Durch den Einsatz von SQL in kommerziellen DBMS-Produkten wurde die Migration zwischen einzelnen DBMS-Produkten, die den Standard implementiert haben, für
den Endbenutzer vereinfacht. Der Benutzer von relationalen Datenbanken muss sich im
Idealfall keine Gedanken mehr machen, mit welchem DBMS-Produkt er momentan arbeitet, denn die Schnittstelle (SQL) zu den einzelnen Systemen bleibt für ihn immer die gleiche.
Leider ist diese Vorstellung nur begrenzt gültig, da jedes DBMS eigene Sprachdialekte
implementiert hat. Zwar gelten viele syntaktische Regeln bei allen Systemen allerdings
kommt der Programmierer nicht an der Tatsache vorbei, sich bei dem verwendeten System über die Besonderheiten und einen ggf. erweiterten Sprachumfang zu informieren.
(Bsp. PL-SQL der Fa. Oracle, „MS-Access SQL)
In dem vorliegenden Informationsmaterial wird auf diese Besonderheiten verzichtet. Vielmehr soll durch die allgemeine Struktur der Leser ermuntert werden, das eine oder andere
in der Referenz zu dem jeweiligen System nachzuschlagen.
Vag
2
SQL_Grundlagen.doc
2.
Programmierung eines Datenbanksystems mit SQL
2.1. Grundlagen zu SQL
Unter der Programmierung einer Datenbank versteht man üblicherweise die Umsetzung
des Datenmodells in eine entsprechende Tabellenstruktur innerhalb eines Datenbanksystems. Dazu muss zunächst eine Datenbank im System generiert werden. Anschließend
werden dann der Datenbank die einzelnen Tabellen hinzugefügt. Die Programmiersprache, die ein relationales Datenbankmanagementsystem versteht nennt sich SQL (Structured Query Language). MySQL lehnt sich an den Standard ANSI SQL 92 an.
Die Sprache SQL gliedert sich gemäß Bild 5 in die Bereich DDL = Data Definition Language, DML = Data Manipulation Language und DCL = Data Control Language. Den drei
Sprachbereichen sind jeweils verschiedene Statements zugeordnet, die entsprechend
dem zugehörigen Sprachbereich die Verwaltung eines Datenbanksystems via SQL ermöglichen.
SQL
DDL
DML
DCL
Anlegen, Verändern und Löschen
von Datenbanken,
Tabellen
Anlegen, Verändern und Auswählen von Datensätzen in Tabellen
Verwaltung der
Zugangskontrolle
auf Datenbanken
und Tabellen
Create Database
Insert ...
Grant ...
Create Table
Update ...
Revoke ...
Drop Database
Delete ...
Lock / Unlock
Drop Table
Select ...
Alter Table
Bild 5: Die Struktur der Datenbanksprache SQL
Vag
3
SQL_Grundlagen.doc
In den nun folgenden Abschnitten werden die in Bild 5 grau hinterlegten Statements mit
ihrer Grundsyntax dargestellt. Eine Darstellung bis ins Detail soll in diesem Kompendium
nicht erfolgen. Vielmehr sei hier auf die Literatur bzw. auf einschlägige Internetseiten verwiesen.
http://cheese.geo.unizh.ch:9000/student/all/de/basic/RelQueryLang/BasicQueries
2.2. Anlegen, Löschen und Ändern von Datenbanken und Tabellen (Create .., Alter ..
Drop ...)
Die einzelnen Befehlsnamen sprechen im Grunde genommen für sich. Daher wird die
Syntax im folgenden überwiegend kommentarlos aufgeführt:
CREATE DATABASE datenbankname;
Es wird eine Datenbank mit dem Namen „datenbankname“ angelegt. Es ist zu beachten, dass MySQL Groß-/Kleinschreibung unterscheidet!!
DROP DATABASE datenbankname;
Die angegebene Datenbank wird unwiederbringlich gelöscht!
CREATE TABLE tablename (Attribut1 Datentyp [NOT NULL] [PRIMARY KEY]
[AUTO_INCREMENT], Attribut 2 Datentyp [Modifikatoren] , …);
Das Create Table Statement wird für das Anlegen von Tabellen benötigt. Dazu müssen
einerseits sämtliche Attribute einer Tabelle angegeben werden und andererseits die Datentypen deklariert werden. Eine Auflistung der gängigen Datentypen befindet sich am
Ende des Umdrucks,
Zusätzlich können zu den Attributen sogenannte Modifikatoren angegeben werden.
Diese sind optional und haben folgende Bedeutung:
NOT NULL: Der Wert des Attributs darf nicht leer sein!
PRIMARY KEY: Bei dem Attribut handelt es sich um den Primärschlüssel oder
einen Teil davon.
AUTO_INCREMENT: Der Wert des Attributs wird automatisch beim Anlegen eines
neuen Datensatzes inkrementiert. Es sind nur ganzzahlige
Datentypen zulässig.
Hinweis: Sollte der Primärschlüssel aus mehreren Attributen zusammengesetzt werden,
so gilt folgende Syntax:
Vag
4
SQL_Grundlagen.doc
CREATE TABLE Bestelldetails (
Artikelnr INT( 10 ) NOT NULL ,
Bestellungnr INT( 10 ) NOT NULL ,
Datum DATE NOT NULL ,
Kommentar VARCHAR( 50 ) NOT NULL,
PRIMARY KEY(Artikelnr, Bestellungnr)
);
DROP TABLE tabellenname;
Die angegebene Tabelle wird gelöscht.
ALTER TABLE tabellenname MODIFY meinespalte neuertyp;
In der Tabelle tabellenname wird der Datentyp der Spalte meinespalte in „neuertyp“
umgewandelt. Das Alter table Statement hat eine Vielzahl von Parametern, die hier
nicht näher erläutert werden. Bei Bedarf können diese nachgeschlagen werdn.
2.3. Einfügen, Ändern und Löschen von Daten in Tabellen (Insert ..., Update ..., Delete ... )
INSERT INTO tabellenname (attribut1, attribut2 ....) VALUES (wert1, wert2, ....);
Bei der Ausführung des Statements werden den Attributen der gewählten Tabelle die
Werte entsprechend der Liste zugewiesen.
Folgendes ist bei der Angabe der Werte zu beachten:
• Handelt es sich um Zahlen, wird die übliche Darstellung gewählt
• Sollen Zeichnketten eingegeben werden, so müssen diese in ″ ″ geschrieben
werden.
• Hat ein Attribut den Modifikator Auto_Increment erhalten so wird dieses Attribut
sowohl in der Attributliste als auch in der Werteliste weggelassen.
• Soll ein Passwort eingegeben werden so ist der Wert des Attributes miit der
Funktion PASSWORD(zeichenkette) zu übergeben.
• Der Tabellenname ist grndsätzlich in Hochkommas einzuschließen.
´tabellenname´
UPDATE tabellenname SET attribut1=wert1, attribut2=wert2 … [where-Klausel];
Das Update-Statement ist notwendig, um Attributwerte innerhalb einer Tabelle zu
verändern. Die angefügte Where-Klausel erlaubt dann die Auswahl des jeweiligen
Datensatzes. Die Syntax der Where-Klausel entspricht der beim Select Statement
und kann in dem zugehörigen Abschnitt 2.4 nachgelesen werden.
DELETE FROM tabellenname [where-Klausel];
Es werden entweder alle Datensätze in der Tabelle gelöscht oder nur diejenigen, die
durch die where-Klausel markiert werden.
2.4. Abfragen auf Tabellen (Select ...)
Vag
5
SQL_Grundlagen.doc
Abfragen auf Tabellen werden mit dem Schlüsselwort Select eingeleitet. Grundsätzlich
ergibt sich folgende Syntax für das Select – Statement:
SELECT [DISTINCT | ALL] <Liste der Spalten, Funktionen, Konstanten etc> FROM tabellenname
WHERE Bedingungen
GROUP BY Gruppierte Spalten
HAVING Bedingung
ORDER BY <zu sortierende Spalten> [ASC|DESC]
;
Im folgenden werden die einzelnen Ausdrücke und Optionen näher betrachtet:
• Distinct | ALL: Distinct bewirkt, dass Dopplungen im Ergebnis einer Abfrage unterdrückt werden. z.B. Eine Abfrage ermittelt die Postleitzahlen der gespeicherten Kunden. Zwangsläufig kommt es zu Dopplungen. Diese werden mit Distinct unterdrückt.
ALL hat denselben Effekt wie das Fehlen eines der beiden Ausdrücke.
• Liste der Spalten ...: Im einfachsten Fall werden hier durch Kommas abgetrennt die
Spaltenname der Tabelle aufgeführt, die im Rahmen der Abfrage interessieren. ZUsätzlich können hier sogenannte Aggregatfunktionen eingesetzt werden z.B. zur Min
Max Bestimmung oder zu Berechnungen wie Summenbildung etc..
Î min Bestimmen des minimalen Werts eines Attributs
Î max Bestimmen des maximalen Werts eines Attributs
Î sum Berechnen der Summe aller Werte eines Attributs
Î count Anzahl der Werte eines Attributs (nicht der verschiedenen Werte!)
Î avg Berechnen des Durchschnitts aller Werte einen Attributs, wobei NULLWertenicht in die Berechnung einfliessen
•
•
tabellennamen gibt hier an, welche Tabelle die Grundlage für die Abfrage ist. Sind
mehrere Tabellen beteiligt, müssen diese über sogenannte JOINS verknüpft werden.
WHERE Bedingungen: In der Where-Klausel können z.B. mathematische Ausdrücke
eingesetzt werden, um die Anzahl der Ergebnisdatensätze einzuschränken. SQL unterstützt eine Reihe von Vergleichs- und Mengenoperatoren. Vergleichsoperatoren wie
=,<,>,<>,<=,>=,between.
Bsp: Anzeige aller Datensätze, in denen die Postleitzahl zwischen 45000 und
45277angesiedelt ist: ... where PLZ >= 45000 AND PLZ <=45277 ...
Zusätzlich kann für die Suche in Zeichenketten der Ausdruck RegEXP (Regular Expession) verwendet werden: where Name Regexp Mack%
Hiermit werden alle Namen selektiert, die mit Mack beginnen und mit beliebig vielen
Zeichen fortgesetzt werden. (z.B. Macke, Mackielski usw.)
•
GROUP BY Gruppierte Spalten: Die Gruppierung von Spalten hat nur beim Einsatz
der o.g. Aggregatfunktionen eine Bedeutung
•
HAVING Bedingung: Having wird wie die Where Klausel bei der Verwendung von
Aggregatfunktionen verwendet, um das Berechnungsergebnis ebenfalls als Filterkriterium einzusetzen.
Vag
6
SQL_Grundlagen.doc
•
ORDER BY <zu sortierende Spalten> [ASC|DESC]: Soll das Ergebnis einer Abfrage
sortiert erscheinen, so lässt sich dies mit der Order By Klausel erreichen. Dabei wird
angegeben, welche Spalte sortiert erscheinen soll und in welcher Reihenfolge, ASC=
Aufsteigend und DESC=Absteigend.
Beispiele:
a)
Select * from Kunde;
b)
Select Name, Vorname From Kunde
c)
Select Vorname FROM Kunde
Where Name=”Müller”
Select Vorname FROM Kunde
Where Name=”Müller”
Order By Vorname ASC
d)
e)
e)
Vag
SELECT *
FROM `bestellungen`
WHERE Versanddatum
BETWEEN '1996/01/01'
AND '1996/08/31'
SELECT Kategorienr, Sum( Einzelpreis )
FROM artikel
GROUP BY Kategorienr
7
Es wird die gesamte Kundentabelle zurückgegeben
Es werden alle Name und Vorname zurückgegeben
Es werden die Vorname aller Kunden mit
dem Namen Müller ausgegeben
Es werden die Vorname aller Kunden mit
dem Namen Müller ausgegeben, die Vorname sind alphabetisch aufsteigend sortiert.
Ausgabe aller Bestelldaten, deren Versand zwischen dem 01.01.1996 und dem
31.08.1996 stattgefunden hat. Das Format des Datums ist in der Referenzliste
nachzulesen.
Berechnung der Summe der Einzelpreise
in den Artikelkategorien und Ausgabe der
Summenwerte je Kategorie.
SQL_Grundlagen.doc
Numerische Werte
Typname
TINYINT
sehr kleine ganze Zahl
SMALLINT
kleine ganze Zahl
MEDIUMINT
INT
BIGINT
FLOAT
DOUBLE
DECIMAL(M,D)
mittelgroße ganze Zahl
Standard
groß
Fließkommazahl, einfache Genauigkeit
Fließkommazahl, doppelte Genauigkeit
als Zeichenkette dargestellte Fließkommazahl
DECIMAL(4,1)
DECIMAL(6,2)
Bedeutung
Bereich
-128 bis 127 oder
0 bis 255 (UNSIGNED)
-32768 bis 32767 oder
0 - 535
-223 - 223 - 1 (0 - 224)
-231- 231- 1
-263 - 263 - 1
rund -10-38 - 238
rund -10-308 - 2308
hängt von der Anzeigegröße M und den Dezimalstellen D ab
-999.9 bis 9999.9
-9999.99 bis 99999.99
Speicherbedarf
1 Byte
2 Byte
3 Byte
4 Byte
8 Byte
4 Byte
8 Byte
(M+2) Byte
Alle Integer-Typen können UNSIGNED deklariert werden, so dass keine negativen Zahlen möglich sind.
Der Wertebereich beginnt dann bei 0, bleibt aber insgesamt gleich groß (d.h. größere positive Zahlen möglich).
Für numerische Spalten kann mit AUTO_INCREMENT ein eindeutiger Eintrag erzwungen werden (eine Spalte pro Tabelle)
Va
16
SQL_Grundlagen.doc
Zeichenkettenwerte (String, Character)
Typname
Bedeutung
maximale Größe
Zeichenkette fester Länge
Zeichenkette variabler Länge
sehr kleines Binary Large Object (Bild, Töne)
kleines BLOB
mittleres BLOB
großes BLOB
sehr kleine Textzeichenkette
kleine Textzeichenkette
mittelgroße Textzeichenkette
große Textzeichenkette
Auflistung, Auswahl nur eines Feldes möglich
Menge, Mehrfachauswahl möglich, auch nichts
CHAR(M)
VARCHAR(M)
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
ENUM
SET
M Byte
M Byte
(28 -1) Byte
(216 -1) Byte
(224 -1) Byte
(232 -1) Byte
(28 -1) Byte
(216 -1) Byte
(224 -1) Byte
(232 -1) Byte
65535 Elemente
64 Elemente
Mit Hilfe des Attributs DEFAULT kann ein Standardwert vorgegeben werden (außer für BLOB und TEXT).
Datums- und Zeitwerte
Typname
DATE
TIME
DATETIME
TIMESTAMP
YEAR
Va
Bedeutung
Datum im Format: JJJJMM-TT
Zeitwert im Format :
hh:mm:ss
Datum / Zeitwert
Zeitstempelwert im Format:
JJJJMMDDhhmmss
Jahreswert im Format JJJJ
Bereich
Speicherbedarf
1.1.1000 bis 31.12.9999
3 Byte
abgelaufene Zeit:
-838h 59min 59s bis 838h 59min 59s
1.1.1000 0Uhr bis 31.12.9999 23:59:59
1970.... bis 2037....
3 Byte
1901 bis 2155
1 Byte
17
8 Byte
4 Byte
SQL_Grundlagen.doc
Herunterladen