MySQL-Tutorial

Werbung
Einführung in MySQL
SQL (Structured Query Language) ist eine Computersprache zum Speichern, Bearbeiten
und Abfragen von Daten in relationalen Datenbanken. Eine relationale Datenbank kann
man sich als eine Sammlung von Tabellen (den Relationen) vorstellen, in welchen
Datensätze abgespeichert sind. Jede Zeile (Tupel) in einer Tabelle ist ein Datensatz. Jedes
Tupel besteht aus einer Reihe von Attributen (Eigenschaften), den Spalten der Tabelle. Eine
erste Version von SQL erschien 1974, als eine Arbeitsgruppe bei IBM den ersten Prototyp
einer relationalen Datenbank entwickelte. Die erste kommerzielle relationale Datenbank
wurde von Relational Software (der späteren Firma Oracle) auf den Markt gebracht.
SQL-Befehle zur Tabellen-Bearbeitung
CREATE TABLE
Tabellen stellen die Grundstruktur für die Speicherung von Daten in der Datenbank dar. Da
der Datenbankanbieter in den meisten Fällen nicht im Voraus wissen kann, wie Ihre
Anforderungen an die Datenspeicherung genau aussehen, ist davon auszugehen, dass Sie
die Tabellen in der Datenbank selbst erzeugen müssen.
Bevor wir näher auf die SQL-Syntax für CREATE TABLE eingehen, sollten wir zunächst
verstehen, wie eine Tabelle aufgebaut ist. Tabellen sind in Zeilen und Spalten aufgeteilt.
Bei einer Tabelle für Kundendaten könnten die Spalten beispielsweise Informationen wie
Vorname, Nachname, Strasse, Wohnort, Land, Geburtsdatum usw. enthalten. Bei der
Definition einer Tabelle, geben wir dementsprechend die Spaltenkopfzeilen und die
Datentypen für die jeweilige Spalte an.
Wenn wir eine Tabelle definieren, müssen wir für jede Spalte den zugehörigen Datentyp
angeben (z. B. für 'Vorname' den Typ CHAR(50), also einen aus 50 Zeichen bestehenden
String).
Die SQL-Syntax für den Befehl CREATE TABLE sieht folgendermassen aus:
CREATE TABLE "Tabellen_Name"
("Spalte 1" "Datentyp_für_Spalte_1",
"Spalte 2" "Datentyp_für_Spalte_2",
... );
Zur Erstellung der oben beschriebenen Kundentabelle würden wir also eingeben (mit
Angabe von Datentypen):
CREATE TABLE KUNDE (
Kunde_ID INT NOT NULL AUTO_INCREMENT ,
Nachname VARCHAR( 30 ) NOT NULL ,
Vorname VARCHAR( 20 ) NOT NULL ,
Strasse VARCHAR( 40 ) NOT NULL ,
PLZ VARCHAR( 10 ) NOT NULL ,
Ort VARCHAR( 30 ) NOT NULL ,
Geburtsdatum DATE NOT NULL);
INSERT INTO
Wie gelangen die Datenzeilen in die Tabellen? Um diese Frage geht es in den nächsten
Abschnitten, welche die Anweisungen INSERT und UPDATE behandeln.
In SQL gibt es im Wesentlichen zwei Methoden zum Einfügen (INSERT) von Daten in eine
Tabelle: Bei der einen wird jeweils eine Zeile eingefügt und bei der anderen mehrere
gleichzeitig. Sehen wir uns zunächst den Befehl zum Einfügen (INSERT) einzelner
Datenzeilen an.
Die Syntax für die entsprechende Funktion sieht folgendermassen aus:
INSERT INTO "Tabellen_Name" ("Spalte1", "Spalte2", ...)
VALUES ("Wert1", "Wert2", ...);
Beispielsweise könnten wir in oben erstellter Tabelle KUNDE folgende Einträge vornehmen:
INSERT INTO `KUNDE` (`Kunde_ID`, `Nachname`, `Vorname`, `Strasse`, `PLZ`, `Ort`,
`Geburtsdatum`) VALUES
(NULL, 'Sorglos', 'Susi', 'Himmelsweg 7', '5555', 'Sternlingen', '2000-12-24'),
(NULL, 'Masorati', 'Ricki', 'Schnellstrasse 200', '1001', 'Rasingen', '1984-01-01'),
(NULL, 'Ratlos', 'Rudi', 'Schwermutgasse 3', '9998', 'Stahlikon', '2001-02-03');
Hinweis: Beachten Sie bitte, dass die Attributwerte mit einfachen Anführungszeichen
versehen sein müssen.
UPDATE
In bestimmten Fällen kann es erforderlich sein, bereits vorhandene Daten zu aktualisieren.
Dies können wir mit dem Befehl UPDATE tun. Die entsprechende Syntax lautet:
UPDATE "Tabellen_Name"
SET "Spalte1" = [Wert]
WHERE {Bedingung};
ALTER TABLE
Nach der Erstellung einer Tabelle in der Datenbank gibt es viele Anlässe für die Änderung
der Struktur dieser Tabelle. Typische Vorgänge sind:




Spalten hinzufügen
Spalten löschen
Spaltennamen ändern
Datentyp einer Spalte ändern
Beachten Sie bitte, dass es sich hierbei nicht um eine vollständige Liste handelt. Der Befehl
ALTER TABLE wird auch bei anderer Gelegenheit verwendet, beispielsweise zum Ändern der
Primärschlüsseldefinition.
Die SQL-Syntax für den Befehl ALTER TABLE sieht folgendermassen aus:
ALTER TABLE "Tabellen_Name"
[Alter Spezifikation];
[Alter Spezifikation] hängt von der Art der gewünschten Änderung ab. Für die oben
aufgeführten Anwendungszwecke lauten die entsprechenden Anweisungen:
Spalte hinzufügen:
ADD "Spalte 1" "Datentyp für Spalte 1";
Spalte löschen:
DROP "Spalte 1";
Spaltenname ändern:
CHANGE "alter Spaltenname" "neuer Spaltenname" "Datentyp für neuen Spaltennamen";
Datentyp einer Spalte ändern:
MODIFY "Spalte 1" "neuer Datentyp";
Es folgen nun Übungen für die einzelnen Vorgänge, unter Verwendung der im Abschnitt
CREATE TABLE erzeugten "Kunden"-Tabelle.
Zunächst fügen wir eine Spalte "Geschlecht" (1 Zeichen) zu dieser Tabelle hinzu. Wie heisst
der Befehl?
..............................................................
....................................
Als nächstes benennen wir die Spalte "Strasse" in "Str." (max. 50 Zeichen) um. Wie heisst
der Befehl?
..............................................................
....................................
Dann ändern wir den Datentyp der Spalte "Ort" zu CHAR(30). Wie heisst der Befehl?
..............................................................
....................................
Schliesslich löschen wir die Spalte "Geschlecht" wieder. Wie heisst der Befehl?
..............................................................
....................................
Primärschlüssel
Ein Primärschlüssel dient der eindeutigen Identifizierung der einzelnen Zeilen in einer
Tabelle. Er kann entweder Teil des eigentlichen Datensatzes oder ein künstliches Feld sein
(das mit dem Datensatz nichts zu tun hat). Ein Primärschlüssel kann aus einem oder
mehreren Feldern einer Tabelle bestehen. Primärschlüssel, die aus mehreren Attributen
bestehen, werden als zusammengesetzte Schlüssel bezeichnet.
Primärschlüssel können entweder bei der Erstellung der Tabelle (mit CREATE TABLE) oder
bei der Änderung der vorhandenen Tabellenstruktur (mit ALTER TABLE) definiert werden.
Definition eines Primärschlüssels während der Erzeugung einer Tabelle:
CREATE TABLE KUNDE
(Kunde_ID integer PRIMARY KEY,
Nachname_Name varchar(30),
Vorname varchar(30));
Definition eines Primärschlüssels während der Änderung einer Tabelle:
ALTER TABLE KUNDE ADD PRIMARY KEY (Kunde_ID);
Hinweis: Vor Verwendung des Befehls ALTER TABLE zur Hinzufügung eines
Primärschlüssels müssen Sie sicherstellen, dass das entsprechende Feld als 'NOT NULL'
definiert ist, d.h. NULL ist kein akzeptabler Wert für dieses Feld.
Fremdschlüssel
Ein Fremdschlüssel ist ein Feld (oder mehrere Felder), das auf den Primärschlüssel einer
anderen Tabelle verweist. Zweck des Fremdschlüssels ist es, die referentielle Integrität der
Daten sicherzustellen. Die referentielle Integrität verhindert bei Löschprozessen das
Entstehen von verwaisten Datensätzen:
Nehmen wir zum Beispiel an, es liegen zwei Tabellen vor, eine Kundentabelle mit allen
Kundendaten und eine Bestellungstabelle mit allen Kundenaufträgen. Die Bedingung lautet
nun, dass alle Aufträge einem bereits in der Kundentabelle verzeichneten Kunde
zugewiesen sein müssen. In diesem Fall platzieren wir einen Fremdschlüssel in die
Bestellungstabelle und setzen ihn in Bezug zum Primärschlüssel der Kundentabelle. Auf
diese Weise ist sichergestellt, dass alle Aufträge in der Bestellungstabelle einem Kunden in
der Kundentabelle zugeordnet sind. Mit anderen Worten, die Bestellungstabelle kann keine
Daten zu einem Kunden enthalten, der nicht in der Kundentabelle aufgeführt ist.
Die beiden Tabellen sind wie folgt strukturiert:
Tabelle KUNDE
Spaltenname
Merkmal
Kunde_ID
Primärschlüssel
Nachname
Vorname
Tabelle BESTELLUNGEN
Spaltenname
Merkmal
Bestellung_ID Primärschlüssel
Kunde_ID
Fremdschlüssel
Bestelldatum
Im oben stehenden Beispiel ist die Spalte KUNDE_ID in der Tabelle BESTELLUNGEN ein
Fremdschlüssel, der auf die Spalte Kunde_ID der Tabelle KUNDE verweist.
Es folgen Beispiele für die Definition des Fremdschlüssels während der Erzeugung der
Tabelle BESTELLUNGEN:
CREATE TABLE BESTELLUNGEN
(Bestellung_ID integer, Kunde_ID integer, Bestelldatum DATE, PRIMARY KEY
(Bestellung_ID),
FOREIGN KEY (Kunde_ID) REFERENCES KUNDE (Kunde_ID));
Nachträgliches Einfügen des Fremdschlüssels in die Tabelle BESTELLUNGEN:
ALTER TABLE BESTELLUNGEN
ADD FOREIGN KEY (Kunde_ID) REFERENCES KUNDE (Kunde_ID);
DROP TABLE
Manchmal ist es wünschenswert, eine Tabelle aus der Datenbank zu löschen. Zum Glück
gibt es mit DROP TABLE einen entsprechenden SQL-Befehl:
DROP TABLE "Tabellen_Name";
DELETE FROM
Manchmal ist es wünschenswert, Datensätze aus einer Tabelle zu entfernen. Dies können
wir mit dem Befehl DELETE FROM erreichen. Die entsprechende Syntax lautet:
DELETE FROM "Tabellen_Name"
WHERE {Bedingung};
Am einfachsten lässt sich dies mit einem Beispiel verdeutlichen. Nehmen wir an, dass
folgende Tabelle vorliegt, die Sie zuerst mit CREATE TABLE und INSERT INTO noch
erzeugen müssen:
Tabelle TAGESUMSAETZE
Filiale
Los Angeles
San Diego
Los Angeles
Boston
Betrag
1500 SFr.
250 SFr.
300 SFr.
700 SFr.
Datum
05.Jan.1999
07.Jan.1999
08.Jan.1999
08.Jan.1999
und wir möchten alle Daten zu „Los Angeles“ aus dieser Tabelle entfernen. Dazu
verwenden wir folgende SQL-Anweisung:
..............................................................
....................................
SQL-Abfrage-Befehle
SELECT
Eine häufige Anwendung ist die Auswahl von Daten aus den Tabellen einer Datenbank. Und
damit kommen wir schon zu zwei Schlüsselwörtern: wir wählen (SELECT) Daten aus
(FROM) einer Tabelle.
SELECT "Spalten_Name" { , "Spalten_Name"} FROM "Tabellen_Name";
Wollen wir alle Datensätze einer Tabelle ausgeben, so geben wir folgenden SQL-Befehl ein:
SELECT * FROM "Tabellen_Name";
WHERE
Nehmen wir an, wir möchten nur Daten aus einer Tabelle auswählen, die bestimmte
Bedingungen erfüllen. Zum Beispiel nur Warenhäuser mit einem Umsatz von mehr als
1.000 SFr.. Dazu verwenden wir das Schlüsselwort WHERE. Die Syntax sieht
folgendermassen aus:
SELECT "Spalten_Name"
FROM "Tabellen_Name"
WHERE "Bedingung";
Um zum Beispiel alle Filialen mit einem Umsatz von mehr als 1‘000 SFr. in der Tabelle
TAGESUMSAETZE auszuwählen, geben wir ein:
..............................................................
....................................
AND OR
Im vorhergehenden Abschnitt haben wir das Schlüsselwort WHERE kennen gelernt, mit
dem sich Daten aus einer Tabelle auswählen lassen, die bestimmte Bedingungen erfüllen.
Dabei kann es sich um eine einfache Bedingung (wie im vorigen Beispiel) oder eine
zusammengesetzte Bedingung handeln. Zusammengesetzte Bedingungen bestehen aus
mehreren durch AND oder OR verbundenen einfachen Bedingungen. Eine einzelne SQLAnweisung kann eine unbegrenzte Anzahl einfacher Bedingungen enthalten.
Die Syntax für eine zusammengesetzte Bedingung sieht wie folgt aus:
SELECT "Spalten_Name"
FROM "Tabellen_Name"
WHERE "einfache Bedingung"
{[AND|OR] "einfache Bedingung"}+
Das Symbol „{}+“ bedeutet, dass der Ausdruck in der Klammer einmal oder mehrere Male
auftreten kann. Beachten Sie, dass AND und OR austauschbar verwendet werden können.
Zusätzlich kann mit dem Klammersymbol () die Reihenfolge der Bedingungen angegeben
werden.
Mit welchem SQL-Befehl können Sie alle Filialen mit einem Umsatz von mehr als 1‘000 SFr.
oder alle Warenhäuser mit einem Umsatz von weniger als 500 SFr., aber mehr als 275 SFr.
in der Tabelle TAGESUMSAETZE auswählen?
..............................................................
....................................
LIKE
LIKE ist ein weiteres Schlüsselwort, das in der WHERE-Klausel Verwendung findet. Im
Wesentlichen ermöglicht LIKE eine Suche auf der Grundlage eines Musters an Stelle einer
genauen Angabe (wie bei IN) oder der Definition eines Bereichs (wie bei BETWEEN).
Konsultieren Sie für IN und BETWEEN SQL-Referenzen im Internet. Die Syntax für LIKE
sieht folgendermassen aus:
SELECT "Spalten_Name"
FROM "Tabellen_Name"
WHERE "Spalten_Name" LIKE {MUSTER};
{MUSTER} besteht oft aus regulären Ausdrücken. Hier einige Beispiele:

'A_Z': Alle Zeichenketten die mit einem 'A' beginnen, worauf ein weiteres Zeichen
folgt, und mit einem 'Z' enden. 'ABZ' und 'A2Z' würden beispielsweise diese
Bedingung erfüllen, 'AKKZ' hingegen nicht.

'ABC%': Alle Zeichenketten, die mit 'ABC' beginnen. Sowohl 'ABCD' als auch 'ABCABC'
würden zum Beispiel diese Bedingung erfüllen.

'%XYZ': Alle Zeichenketten, die auf 'XYZ' enden. So würden beispielsweise sowohl
'WXYZ' als auch 'ZZXYZ' diese Bedingung erfüllen.

'%AN%': Alle Zeichenketten, die an irgendeiner Stelle das Muster 'AN' enthalten.
Sowohl 'LOS ANGELES' als auch 'SAN FRANCISCO' würden zum Beispiel diese
Bedingung erfüllen.
Wir möchten nun alle Filialen finden, deren Name 'an' enthält. Was müssen wir eingeben?
..............................................................
....................................
ORDER BY
Bisher haben wir uns mit dem Abrufen von Daten aus einer Tabelle unter Verwendung der
Befehle SELECT und WHERE beschäftigt. In vielen Fällen müssen die ausgegebenen Daten
jedoch auf eine bestimmte Weise sortiert werden. Dies könnte beispielsweise in
aufsteigender oder absteigender Reihenfolge geschehen. In solchen Fällen können wir das
Schlüsselwort ORDER BY einsetzen.
Die Syntax für eine ORDER BY-Anweisung sieht wie folgt aus:
SELECT "Spalten_Name"
FROM "Tabellen_Name"
[WHERE "Bedingung"]
ORDER BY "Spalten_Name" [ASC, DESC];
Das Symbol „[ ]“ bedeutet, dass die WHERE-Anweisung optional ist. Ist eine WHEREKlausel vorhanden, steht sie vor der ORDER BY-Klausel. „ASC“ bedeutet, dass die
Ergebnisse in aufsteigender Reihenfolge angezeigt werden, „DESC“, dass sie in
absteigender Reihenfolge erscheinen. Findet sich keine diesbezügliche Angabe, wird die
Voreinstellung „ASC“ verwendet.
Es besteht die Möglichkeit, nach mehr als einer Spalte zu sortieren. In diesem Fall sieht die
ORDER BY-Klausel wie folgt aus:
ORDER BY "Spalten_Name1" [ASC, DESC], "Spalten_Name2" [ASC, DESC];
So könnten wir zum Beispiel den Inhalt der Tabelle TAGESUMSAETZE nach Euro-Beträgen
in absteigender Reihenfolge sortieren und hierzu folgenden SQL-Befehl eingeben:
..............................................................
....................................
Zusätzlich zum Spaltennamen lässt sich auch mit der Spaltenposition (basierend auf der
SQL-Abfrage) angeben, auf welche Spalte die ORDER BY-Klausel bezogen werden soll. Die
erste Spalte ist 1, die zweite 2 usw. Im obigen Beispiel werden die gleichen Ergebnisse mit
folgendem Befehl erreicht:
SELECT Filiale, Betrag, Datum
FROM TAGESUMSAETZE
ORDER BY 2 DESC;
Funktionen
Natürlich liegt die Frage nahe, ob wir auch Rechenoperationen wie Addition oder
Mittelwertbildung vornehmen können. Die Antwort lautet: ja. SQL verfügt über mehrere
arithmetische Funktionen, und zwar:
AVG
COUNT
MAX
MIN
SUM
Berechnet den Durchschnitt der Spaltenwerte.
Zählt die Anzahl der Werte in der Spalte.
Nennt den grössten Wert in der Spalte.
Evaluiert den kleinsten Wert innerhalb der Spalte.
Gibt die Summe der Spaltenwerte zurück.
Die Syntax für die Funktionen sieht folgendermassen aus:
SELECT "Funktion" ("Spalten_Name")
FROM "Tabellen_Name";
Um zum Beispiel die Summe aller Tagesumsätze sämtlicher Filialen zu erhalten, geben wir
ein:
..............................................................
....................................
COUNT und DISTINCT
Die Funktion COUNT haben Sie bereits im vorangegangenen Abschnitt kennengelernt: Sie
erlaubt die Zählung (COUNT) der Zeilen in einer bestimmten Tabelle. Die Syntax lautet
bekanntermassen:
SELECT COUNT ([DISTINCT] "Spalten_Name")
FROM "Tabellen_Name";
COUNT und DISTINCT können zusammen in einer Anweisung verwendet werden, um die
Anzahl der individuellen Einträge in einer Tabelle auszulesen.
Um zum Beispiel die Anzahl unterschiedlicher Filialen herauszufinden, müssen Sie
eingeben:
..............................................................
....................................
Notieren Sie nun, was die DISTINCT-Klausel bewirkt:
GROUP BY
Erinnern Sie sich an die Berechnung des Gesamtumsatzes für alle Warenhäuser mit Hilfe
des Schlüsselworts SUM? Wie kann nun der Gesamtumsatz jeder einzelnen Filiale
berechnet werden? Dazu sind zwei Dinge erforderlich: Erstens müssen wir sowohl den
Filialnamen als auch den Gesamtumsatz auswählen. Zweitens müssen wir sicherstellen,
dass alle Absatzzahlen nach Filialen gruppiert sind. Die entsprechende SQL-Syntax lautet:
SELECT "Spalten_Name 1", SUM("Spalten_Name 2")
FROM "Tabellen_Name"
GROUP BY "Spalten_Name 1";
Das Schlüsselwort GROUP BY wird verwendet, wenn mehrere Spalten aus einer Tabelle
(oder mehreren Tabellen) ausgewählt werden und mindestens ein arithmetischer Operator
in der SELECT-Anweisung enthalten ist. In diesem Fall müssen wir nach allen anderen
ausgewählten Spalten GRUPPIEREN, d. h. nach allen Spalten ausser derjenigen, auf die
sich der arithmetische Operator bezieht.
Angepasst auf unser Filialmodell lautet der SQL-Befehl:
..............................................................
....................................
Können Sie das Ergebnis auch nach absteigenden Umsatzzahlen anzeigen lassen? Wie
lautet der entsprechende Befehl?
..............................................................
....................................
JOIN (fakultativ)
Sehen wir uns nun den Begriff des Verbunds, des Joins, näher an. Eine korrekte JoinVerknüpfung in SQL setzt viele der bisher vorgestellten Elemente voraus. Nehmen wir an,
es liegen die folgenden zwei Tabellen vor,
Tabelle TAGESUMSAETZE
Filiale
Los Angeles
San Diego
Los Angeles
Boston
Betrag
1500 SFr.
250 SFr.
300 SFr.
700 SFr.
Datum
05.Jan.1999
07.Jan.1999
08.Jan.1999
08.Jan.1999
Tabelle GEOGRAPHIE
Region
Ost
Ost
West
West
Filiale
Boston
New York
Los Angeles
San Diego
und wir möchten den Umsatz pro Region ermitteln. Die Tabelle GEOGRAPHIE enthält
Informationen zu Regionen und Filialen und die Tabelle TAGESUMSAETZE enthält
Umsatzdaten für die einzelnen Warenhäuser. Um nun die Umsatzdaten für die jeweiligen
Regionen anzeigen zu lassen, müssen wir die Daten der beiden Tabellen miteinander
kombinieren. Wenn wir uns die beiden Tabellen genauer ansehen, stellen wir fest, dass sie
über das gemeinsame Attribut "Filiale" verknüpft sind. Hier zunächst die SQL-Anweisung,
die Verwendung der einzelnen Segmente wird dann anschliessend erläutert:
SELECT A1.Region REGION, SUM (A2.Betrag) UMSATZ
FROM GEOGRAPHIE A1, TAGESUMSAETZE A2
WHERE A1.Filiale = A2.Filiale
GROUP BY A1.Region;
Die ersten beiden Zeilen weisen SQL an, zwei Felder auszuwählen. Das erste ist das Feld
„Region“ aus der Tabelle GEOGRAPHIE (mit dem Alias REGION) und das zweite die Summe
des Felds „Betrag“ aus der Tabelle TAGESUMSAETZE (mit dem Alias UMSATZ). Beachten
Sie die Verwendung der Tabellen-Aliasse: GEOGRAPHIE hat den Alias „A1“ und
TAGESUMSAETZE den Alias „A2“. Ohne die Aliasnamen sähe die erste Zeile wie folgt aus:
SELECT GEOGRAPHIE.Region REGION, SUM(TAGESUMSAETZE.Betrag) UMSATZ
und wäre somit deutlich unübersichtlicher. Im Wesentlichen machen Tabellenaliasse die
gesamte SQL-Anweisung verständlicher, insbesondere wenn mehrere Tabellen mit
einbezogen sind.
Sehen wir uns nun die dritte Zeile mit der WHERE-Anweisung genauer an. Hier wird die
Verbundbedingung festgelegt. Im vorliegenden Fall möchten wir sicherstellen, dass der
Inhalt im Feld „Filiale“ in der Tabelle GEOGRAPHIE demjenigen in der Tabelle
TAGESUMSAETZE entspricht. Dies erreichen wir, indem wir die Inhalte gleichsetzen. Diese
WHERE-Anweisung ist entscheidend für die richtige Ausgabe. Ohne korrekte WHEREAnweisung ergibt sich ein kartesischer Verbund. Damit würde die Abfrage alle möglichen
Kombinationen der zwei Tabellen (oder wie gross auch immer die Anzahl der Tabellen in
der FROM-Anweisung ist) ausgeben. Im vorliegenden Fall wäre das Ergebnis eines
kartesischen Verbunds eine Gesamtzahl von 4 x 4 = 16 Zeilen.
UNION (fakultativ)
Der SQL-Befehl UNION vereinigt die Ergebnisse zweier Abfragen. Damit ähnelt UNION in
gewisser Hinsicht dem Begriff des JOIN, da beide Befehle für aufeinander bezogene Daten
in unterschiedlichen Tabellen verwendet werden. Bei UNION gilt jedoch die Einschränkung,
dass alle entsprechenden Spalten vom gleichen Datentyp sein müssen. Auch werden mit
UNION nur unterschiedliche Werte ausgewählt, also mehrfach vorkommende Ergebnistupel
entfernt (ähnlich wie bei SELECT DISTINCT).
Die Syntax lautet:
[SQL-Anweisung 1]
UNION
[SQL-Anweisung 2];
Liegen z. B. folgende zwei Tabellen vor,
Tabelle TAGESUMSAETZE
Filiale
Los Angeles
San Diego
Los Angeles
Boston
Betrag
1500 SFr.
250 SFr.
300 SFr.
700 SFr.
Datum
05.Jan.1999
07.Jan.1999
08.Jan.1999
08.Jan.1999
Tabelle INTERNETVERKAEUFE
Datum
07.Jan.1999
10.Jan.1999
11.Jan.1999
12.Jan.1999
Betrag
250 SFr.
535 SFr.
320 SFr.
750 SFr.
und wir möchten alle Tage herausfinden, an denen sowohl in einer der Filialen als auch
über den Internet-Shop ein Verkaufsvorgang stattgefunden hat, verwenden wir folgende
SQL-Anweisung:
SELECT Datum FROM TAGESUMSAETZE
UNION
SELECT Datum FROM INTERNETVERKAEUFE
Welches Ergebnis erhalten wir mit "SELECT DISTINCT Datum" durch Eingabe des folgenden
Befehls?
SELECT DISTINCT Datum FROM TAGESUMSAETZE
UNION
SELECT DISTINCT Datum FROM INTERNETVERKAEUFE
MySQL-Datentypen
Datentyp
Bedeutung, Bereich
Speicherbedarf
Numerische Datentypen
INT
Ganzzahl (Standard), -2147283648 bis 2147283647 (0 bis
4294967295)
4 Byte
FLOAT
Fliesskommazahl, einfache Genauigkeit
4 Byte
DOUBLE
Fliesskommazahl, doppelte Genauigkeit
8 Byte
DECIMAL(G,N)
Festkommazahl, Länge G mit N Nachkommastellen
Grösse G+2
Byte
Datums- und Uhrzeit-Datentypen
DATE
Datum, Format: YYYY-MM-DD
3 Byte
DATETIME
Datum und Uhrzeit, Format: YYYY-MM-DD hh:mm:ss
8 Byte
TIME
Uhrzeit, Format hh:mm:ss
3 Byte
Zeichenketten-Datentypen
CHAR(G)
Zeichenkette mit fester Grösse G, max. 255 Zeichen
Grösse G
Byte
VARCHAR(G)
Zeichenkette mit variabler Grösse G, max. 255 Zeichen Grösse G
Byte
ENUM('wert1','wert2',...)
Auflistung,
Auswahl nur eines Feldes
65535
Elemente
SET('wert1','wert2',...)
Auflistung,
Mehrfachauswahl
64 Elemente
Eigenschaften der Datentypen
AUTO_INCREMENT = automatische Nummerierung
DEFAULT 'wert' = Vorgabewert
NOT NULL = nicht leer, Wert ist erforderlich
UNIQUE = Wert darf nur 1x vorkommen, keine Wiederholungen
UNSIGNED = ohne Vorzeichen, nur positive Zahlen
PRIMARY KEY = Primärschlüssel
ZEROFILL = Zahl mit führenden Nullen versehen
Quellen:
http://sql.1keydata.com/de/
http://bkb-netz1.dynalias.org/grantz/db/sql/hilfen/mysql-datentypen.html
Lösungen:
1)
ALTER TABLE KUNDE ADD Geschlecht CHAR(1);
2)
ALTER TABLE KUNDE CHANGE Strasse Str CHAR(50);
3)
ALTER TABLE KUNDE MODIFY Ort CHAR(30);
4)
ALTER TABLE KUNDE DROP Geschlecht;
5)
DELETE FROM TAGESUMSAETZE WHERE Filiale = `Los Angeles`
6)
SELECT Filiale FROM TAGESUMSAETZE WHERE Betrag > 1000;
7)
SELECT Filiale FROM TAGESUMSAETZE WHERE Betrag > 1000 OR (Betrag <
500
AND Betrag > 275)
8)
SELECT * FROM TAGESUMSAETZE WHERE Filiale LIKE '%an%'
9)
SELECT Filiale, Betrag, Datum FROM TAGESUMSAETZE ORDER BY Betrag
DESC;
10) SELECT SUM (Betrag) FROM TAGESUMSAETZE
11) SELECT COUNT (DISTINCT Filiale) FROM TAGESUMSAETZE;
12) SELECT Filiale, SUM(Betrag) FROM TAGESUMSAETZE GROUP BY Filiale;
13) SELECT Filiale, SUM(Betrag) FROM TAGESUMSAETZE GROUP BY Betrag DESC;
Herunterladen