Was ist SQL?
SQL ist eine Standardsprache, mit der man auf Datenbanken zugreifen kann.
SQL = Structured (Strukturiert) Query (Abfrage) Language (Sprache).
SQL ist aber mehr, als nur eine Möglichkeit, Informationen von einer Datenbank abzurufen.
Mit SQL kann man:
- Datenbanken selbst anlegen, ändern und löschen
- Tabellen erzeugen, ändern und löschen
- Daten hinzufügen, abrufen, ändern und löschen
- Aktionen aufgrund von Änderungen der der Datenbank ausgelöst werden (z.B. Trigger)
SQL findet man nicht nur
in MySQL. Auch Datenbanksysteme wie MS-SQL-Server und Oracle arbeiten
mit SQL. Die grundlegende Syntax ist gleich, bei den höheren Funktionen
(z.B. JOIN, Trigger) findet man Unterschiede.
Wie kann ich SQL nutzen?
Mit Datenbanken kann man auf verschiedene Arten arbeiten. Am meisten wird wohl die Kombination MySQL/PHP verwendet. Auch Perl wird von vielen Scripten verwendet.
MySQL und PHP
SQL mit PHP auszuführen ist garnicht mal so schwer. Mit PHP kann man direkt und ohne ODBC (Open Database Connectivity) auf MySQL zugreifen.
Als erstes muss eine Verbindung zur Datenbank aufgebaut werden
(connect/pconnect). Dann kann eine Datenbank ausgewählt werden
(mysql_select_db). Danach kann eine SQL-Anweisung erstellt und mit
mysql_query ausgeführt werden.
Falls man mit mehreren Datenbanken arbeiten möchte, bietet sich
mysql_db_query an. Ein Parameter dieser Anweisung ist die Datenbank,
mysql_selsect_db muss nicht vorher ausgeführt werden.
So werden z.B. alle Daten aus einer Tabelle abgerufen:
<?php
$query = "SELECT * FROM Meine_Tabelle";
$result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());
?>
Hier eine Auflistung der wohl wichtigsten mysql-Anweisungen unter PHP.
mysql_connect Stellt eine Datenbankverbindung
her. Der Rückgabewert dieser Funktion ist eine Verbingungs-ID, die für
weiter Funktionen benötigt wird.
mysql_pconnect Unterschied zu mysql_connect: Die Verbindung bleibt auch nach Ausführung des Scriptes erhalten, die mit mysql_close geschlossen werden muss.
mysql_select_db Legt die Datenbank fest, mit der weiter Funktionen (z.B. mysql_query) ausgeführt werden.
mysql_query Führt eine SQL-Anweisung aus.
Der Rückgabewert ist abhängig von der ausgeführten Anweisung. Bei
SELECT ist der Rückgabewert eine Ergebnistabelle, bei INSERT, UPDATE
und DELETE ein Wert.
mysql_db_query Unterschied zu mysql_query: Es muss eine Datenbank als Parameter übergeben werden.
mysql_result Liefert den Inhalt eines bestimmten Datensatzes der Ergebnistabelle. Wird genutzt, um das Ergebnis einer Abfrage (SELECT) auszugeben.
mysql_insert_id Ermittelt den Wert eines AUOINCREMENT-Feldes, wenn der betreffende Datensatz zuvor mit einer INSERT-Anweisung erzeugt wurde.
mysql_fetch_row Liefert eine Ergebniszeile als Array. Auf die einzelnen Spalten greift man über die Array-Indizies zu.
mysql_num_rows Ermittelt die Zahl der Zeilen (Datensätze) einer Ergebnistabelle. Diese Funktion verwendet man, um alle Datensätze einer Schleife auszugeben.
mysql_field_name Liefert den Namen eines Feldes.
mysql_errno Liefertdie Fehlernummer einer zuvor fehlgeschlagenen Operation. Die Fehlernummer lässt sich für die Fehlerbehandlung nutzen.
mysql_error Liefert die Fehlermeldung einer zuvor fehlgeschlagenen Operation.
mysql_close Schliesst eine Verbindung zur Datenbank.
Als Argument ist die Verbindungs-ID zu verwenden, die von
connect/pconnect zurückgegeben wird.
Diese Liste ist nur ein Auszug. Wer Genaueres wissen möchte, kann sich bei www.php.net informieren.
Index, Key
Indizies unterstützen die schnelle Sortierung und Filterung von Datensätzen und können daher Abfragen beschleunigen. Die einzelnen Datensätze können somit direkt angespochen werden, ohne bei jedem SELECT oder UPDATE die ganze Tabelle durchsuchen zu müssen.
Mehrere Spalten können zu einem Index zusammengefasst werden. Meistens ist es aber sinnvoller, eine einzelne Spalte dafür zu verwenden.
Der Wert in den Klammern ist bei allen Schlüsselworten wahlweise der
Spaltenname oder Index der Spalte oder auch der Spalten in der Tabelle.
Indizies können auch nach dem Erstellen einer Tabelle mit CREATE INDEX und ALTER TABLE erstellt werden. Wenn Daten in der Tabelle enthalten sind, die nicht eindeutig sind, kann es dabei Probleme geben.
INDEX()
Ein Index kann über mehrere
Spalten gehen. Die Hauptsortierung wird dann durch die erste Spalte
bestimmt.
UNIQUE() Es entsteht ein Index, der nur eindeutige Werte
enthält. Das Hinzufügen eines schon enthaltenen Wertes führt zu einer
Fehlermeldung. Sinnvoll ist es, einer Spalte mit Ganzzahlen (z.B.
integer), AUTO_INCREMENT zuzuweisen.
KEY() Ist ein Synonym für INDEX.
PRIMARY KEY() Ein PRIMARY KEY ist ein eindeutiger KEY mit der zusätzlichen Beschränkung, dass alle Schlüsselspalten als NOT NULL deklariert sein müssen.
Beispiele
1. Beispiel
SQL-Befehl:
CREATE TABLE `tabelle1` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` VARCHAR( 25 ) NOT NULL ,
`eintrag` TEXT NOT NULL ,
`datum` DATETIME NOT NULL ,
INDEX ( `id` )
);
Hier wird eine Tabelle mit dem Tabellennamen tabelle1 angelegt. Sie enhält 4 Spalten.
Bei einem INSERT wird der Wert der in die 1. Spalte eingetragen wird,
von der Datenbank selbst erstellt (AUTO_INCREMENT). Für die anderen 3
Spalten müssen Werte angegeben werden (NOT NULL).
Die Spalte id id ist indiziert.
2. Beispiel:
SQL-Befehl:
CREATE TABLE `artikel` (
`artikelnummer` INT UNSIGNED NOT NULL ,
`artikelbezeichnung` VARCHAR( 50 ) NOT NULL ,
`preis` DECIMAL( 5, 2 ) ,
`steuersatz` CHAR( 1 ) ,
`bestand` INT UNSIGNED,
PRIMARY KEY ( `artikelnummer` )
);
Eine Tabelle mit dem Tabellennamen artikel und 5 Spalten wird angelegt.
"artikelnummer" und "artikelbezeichnung" müssen bei INSERT immer Werte
enthalten, die anderen 3 Spalten dürfen auch leer (NULL) sein.
Die Werte der Spalte "preis" haben maximal 5 Stellen, 2 davon nach dem Dezimalpunkt (999.99).
"artikelnummer" und "bestand" sind UNSIGNED. Es sind hier somit nur positive Werte möglich.
Die Spalte "steuer" enthält die ID'S aus der Tabelle steuer:
SQL-Befehl:
CREATE TABLE `steuer` (
`id` CHAR( 1 ) NOT NULL ,
`steuersatz` TINYINT UNSIGNED NOT NULL ,
`beschreibung` VARCHAR( 25 ) NOT NULL ,
PRIMARY KEY ( `id` )
);
Diese muss nur 3 Spalten enthalten:
id steuersatz beschreibung
0 0 keine Steuer
1 7 geringer Satz
2 16 voller Satz
Falls sich der Steuersatz mal ändern sollte, muss nur die 2. Tabelle
geändert werden und nicht alle Werte in der Tabelle "artikel".
Bei einer Datenbankabfrage werden beide Tabellen mit WHERE oder JOIN verknüpft.
Tabelle ändern
Mit ALTER TABLE kann die Struktur eine bestehenden Tabelle verändert werden.
Es können Spalten hinzugefügt (ADD), verändert (CHANGE) und gelöscht (DROP) werden.
Indexangaben können verändert werden (ADD, DROP), Spalten sortiert
(ORDER BY) und auch die ganze Tabelle umbenannt werden (RENAME).
Beispiele:
SQL-Befehl:
ALTER TABLE `tabelle1` ADD `vorname` VARCHAR( 25 ) AFTER `name` ;
Hier wurde in der "tabelle1" die Spalte mit dem Spaltennamen "vorname" nach der Spalte "name" eingefügt. Die neue Spalte hat den Datentyp varchar und die Werte können maximal 25 Zeichen lang sein.
SQL-Befehl:
ALTER TABLE `kunden` CHANGE `name` `name` VARCHAR( 30 ) NOT NULL
Die Spalte "name" wurde geändert.
Sie konnte nach CREATE TABLE Werte von maximal 25 Zeichen länge
aufnehmen, jetzt können die Werte maximal 30 Zeichen lang sein. Bei
einem Verringern der Länge würde bei schon vorhandenen Daten evtl.
Datenverlust auftreten. Werte zu lang sind, werden einfach gekürzt.
SQL-Befehl:
ALTER TABLE `tabelle1` ADD PRIMARY KEY ( `id` )
Mit dieser SQL-Anweisung wurde in der "tabelle1" die Spalte "id" zum Primärschlüssel (war nach CREATE TABLE nur INDEX).
SQL-Befehl:
ALTER TABLE `tabelle1` DROP INDEX `id`
Der Index für Spalte "id" wurde gelöscht.
SQL-Befehl:
ALTER TABLE `tabelle1` RENAME `kunden` ;
Und hier wurde die Tabelle "tabelle1" in "kunden" umbenannt. Alternativ könnte man dazu auch RENAME TABLE verwenden
Tabelle umbenennen
Wie im Beispiel auf der
vorherigen Seite gesehen, kann eine Tabelle mit ALTER TABLE umbenannt
werden. Alterativ kann man dazu auch RENAME TABLE verwenden.
SQL-Befehl:
RENAME TABLE `tabelle1` TO `kunden`
Benennt die Tablelle "tabelle1" in "kunden" um.
Tabelle leeren
Tabellen können mit TRUNCATE TABLE geleert werden. Intern wird dabei die Tabelle gelöscht und neu angelegt. Alternativ können auch all Datensätze einer Tabelle mit DELETE FROM gelöscht werden.
SQL-Befehl:
TRUNCATE TABLE `artikel`
Löscht unwiderruflich alle Sätze in der Tabelle artikel.
Tabelle löschen
Der Befehl DROP TABLE löscht unwiderruflich eine Tabelle. Eventuell sollte die Tabelle vorher gesichert werden.
SQL-Befehl:
DROP TABLE `telefon`
Löscht die Tabelle telefon unwiderruflich.
Daten einfügen
Mit INSERT werden Werte in eine Tabelle eingefügt. Für diese Anweisung sind verschiedene Schreibweisen möglich:
INSERT INTO tabelle
[(spalten_name,...)]
VALUES (ausdruck,...),(...),...
und:
INSERT INTO tabelle
SET spalten_name=ausdruck, spalten_name=ausdruck, ...
und:
INSERT INTO tabelle [(spalten_name,...)]
SELECT ...
Bei den ersten beiden Varianten werden die Spaltennamen und einzutragene Werte unterschiedlich angeordnet.
Die dritte Variante liest die Werte, die eingetragen werden sollen,
zuvor mit einer SELECT-Anweisung aus einer Tabelle aus. Es wird also
eine INSERT- und eine SELECT-Anweisung miteinander verbunden. Der
INSERT-Zweig legt nur noch die Zieltabelle und die Spaltennamen fest,
in welche die Werte geschrieben werden sollen.
Strings müssen immer in einfache Anführungszeichen (') gesetzt werden. Nummerische Werten können auch als Strings, also mit ' übergeben werden.
Strings die zu lang sind, werden auf den Maximalwert, der für die
jeweilige Spalte möglich ist, gekürzt. Bei nummerischen Werten wird der
jeweilige Maximalwert eingetragen. Bei solchen Fällen wird eine Warnung
ausgegeben.
Spalten mit Primärschlüssel (PRIMARY_KEY) müssen einen eindeutigen Wert übergeben bekommen.
Spalten, bei denen der Wert automatisch generiert wird (AUTO_INCREMENT), müssen keine Werte übergeben bekommen. Der so generierte Wert kann mit mit der mysql_insert_id-Funktion ermittelt werden.
INSERT - Beispiele
1. Beispiel:
SQL-Befehl:
INSERT INTO `steuer` ( `id` , `steuersatz` , `beschreibung` )
VALUES ('2', '16', 'voller Steuersatz');
Hier wird in die Tabelle "steuer", die wir bei einem vorherigen
Beispiel mit CREATE TABLE angelegt haben, ein Datensatz eingetragen.
2. Beispiel:
SQL-Befehl:
INSERT INTO `artikel` ( `artikelnummer` , `artikelbezeichnung` , `preis` , `steuersatz` , `bestand` )
VALUES (
'12345', 'Irgendwas', '12.23', '2', NULL
);
Und hier wird in die Tabelle "artikel" ein Datensatz eingetragen. Der Wert für die Spalte "artikelnummer" könnte auch ohne Anführungszeichen stehen, da die Spalte nummerisch ist (INT).
"artikelnummer" und "artikelbezeichnung" müssen immer Werte enthalten (NOT NULL), wobei darauf zu achten ist, das die Werte für "artikelnummer" eindeutig sind (PRIMARY KEY).
3. Beispiel:
SQL-Befehl:
INSERT INTO `kunden` ( `id` , `name` , `vorname` , `eintrag` , `datum` )
VALUES (
'', 'Müller', 'Michael', 'Müller''s mögen keine Milch.', NOW( )
);
Der Wert für die Spalte "eintrag" sieht wohl ungewohnt aus. Das Sonderzeichen
' im Text würde als Endezeichen für die Spalte "eintrag" gelesen werden
('Müller') und es würde so zu einer Fehlermeldung kommen. Damit das
nicht passiert, wird dem ' im Text noch ein ' vorangesetzt. Texte
sollten daher auch nicht einfach so aus Formularen übernommen sondern
immer erst geprüft und ggf. aufgearbeitet werden.
Die Spalte "datum" (DATETIME) soll hier das aktuelle Datum enthalten. MySQL bietet dafür die Funktion NOW() an.
Für die Spalte "id" muss kein Wert übergeben werden (AUTO_INCREMENT). Der generierte Wert kann so ermittelt werden:
<?php
$lastid = mysql_insert_id($lk);
?>
Daten auslesen
Mit SELECT werden Daten aus einer Tabelle ausgelesen.
Hier eine verkürzte Syntax dieser Anweisung, die für die meisten Fälle reichen sollte:
SELECT [DISTINCT]
select_ausdruck,...
FROM tabelle
[WHERE ...]
[GROUP BY ... [ASC | DESC], ...]
[HAVING ...]
[ORDER BY ... [ASC | DESC] ,...]
[LIMIT [vonzeile] zeilen]
Die einfachste SELECT-Anweisung ist: SELECT * FROM kunden
Dabei werden alle Datensätze aus der Tabelle "kunden" ausgelesen.
Klauseln und Funktionen können, müssen aber nicht angegeben werden. Die Reihenfolge wie sie hier abgebildet ist, muss dabei eingehalten werden.
Die SELECT-Anweisung wird mit mysql_db_query oder auch mysql_query ausgeführt. Als Rückgabewert liegt eine Tabelle vor, die mit mysql_fetch_row oder auch einer for-Schleife zeilenweise ausgegeben werden kann. Hier Beispiel dazu.
Die einzelnen Spalten können über Index, dem Spaltennamen oder dem mit "AS" vergebenen Aliasnamen angesprochen werden.
Die Reihenfolge der einzelnen Werte wird durch die Reihenfolge in der SELECT-Anweisung festgelegt.
Wenn alle Spalten einer Tabelle ausgelesen werden sollen, kann anstatt
der Spaltennamen auch ein * (Stern) angegeben werden. Die Reihenfolge
der Ergebniswerte entspricht dann der Reihenfolge der Spalten in der
Tabelle.
< OLE-Objekt: Bild (Metafile) >>
Eine Spalte kann mit spaltenname, tabelle.spaltenname und auch mit datenbank.tabelle.spaltenname ausgelesen werden.
So ist z.B. auch ein Auslesen von Spalten gleichen Namens in 2 oder mehr verschiedenen Tabellen in einer Anweisung möglich.
SELECT artikeltabelle1.artikel, artikeltabelle2.artikel
FROM artikeltabelle1, artikeltabelle2
...
< OLE-Objekt: Bild (Metafile) >>
Für die Spalten im Ergebnis können auch Aliasnamen vergeben werden. nach diesen Aliasnamen kann auch in der SELECT-Anweisung gearbeitet werden. Hier erfolgt z.B. eine Sortierung.
SELECT artikeltabelle1.artikel AS artikel1, artikeltabelle2.artikel AS artikel2
FROM artikeltabelle1, artikeltabelle2
ORDER BY artikel2
< OLE-Objekt: Bild (Metafile) >>
Auch für die Tabellen selbst können in der SELECT-Anweisung Aliase verwendet werden.
SELECT tab1.artikel, tab2.artikel
FROM artikeltabelle1 tab1, artikeltabelle2 tab2
Klauseln
DISTINCT Es werden gleiche Zeilen in der Ergebnistabelle verhindert.
FROM Es folgt der Tabellenname, aus dem gelesen werden soll. Es können auch mehrere Tabellen angegeben werden.
z.B. FROM artikel, kunden
WHERE Mit WHERE wird eine Auswahl der Ergebnisdatensätze getroffen. Dazu werden Operatoren verwendet, die auf der nächsten Seite beschrieben werden.
z.B. SELECT * FROM kunden WHERE name = 'Meier'
gibt alle Sätze aus, in denen Name Meier ist
GROUP BY Hiermit können Werte zusammengefasst (gruppiert) werden. Ob auf- oder absteigend wird durch ASC|DESC festgelegt.
HAVING Hier können Gruppen ausgewählt werden, die zuvor mit GROUP BY gebildet wurden. WHERE bezieht sicht auf einelne Datensätze, HAVING auf Gruppen.
SELECT * FROM kunden GROUP BY name HAVING COUNT(name) >= 3
gibt z.B. alle Namen aus, die mindestens dreimal auftreten.
ORDER BY Sortiert die Ergebnistabelle. Ob auf- oder absteigend wird durch ASC|DESC festgelegt. Es kann auch nach mehreren Spalten sortiert werden.
z.B. ORDER BY name DESC, datum ASC
LIMIT(m,n) Wird verwendet, um die Anzahl der Zeilen im Ergebnis zu begrenzen.
Bei 2 angegebenen Argumenten ist das erste die 1. Zeile, das zweite die
Anzahl der Zeilen, die zurückgegeben werden. Bei einem Argument ist die
1. Zeile immer 0 und das Argument die Anzahl der Zeilen.
z.B. LIMIT(30,10)
die 1. Zeilen die gelesen wird ist 30, insgesammt 10 Zeilen
ASC|DESC Legt die Sortierreihenfolge
der Ergebniszeilen fest. ASC und DESC können bei ORDER BY und GROUP BY
angegeben werden. DESC = absteigend, ASC = aufsteigend. ASC ist
Standard.
z.B. ORDER BY name DESC
bewirkt eine absteigende Sortierung der Ergebnisse nach der Spalte name
Operatoren
Und hier die Operatoren, die man z.B. bei WHERE verwenden kann:
= Gleichheit, Identität
z.B. SELECT * FROM artikel WHERE artikelnummer = '12345'
< kleiner als
z.B. SELECT * FROM artikel WHERE artikelnummer < '12345'
> grösser als
z.B. SELECT * FROM artikel WHERE preis > '50.00'
<= kleiner oder gleich
z.B. SELECT * FROM artikel WHERE preis <= '50.00'
>= grösser oder gleich
z.B. SELECT * FROM artikel WHERE artikelnummer >= '12345'
!= ungleich
z.B. SELECT * FROM artikel WHERE steuer != '0'
BETWEEN Prüft, ob eine Wert zwischen zwei Werten liegt.
z.B. SELECT * FROM artikel WHERE preis BETWEEN '10.00' AND '80.00'
IN Prüft, ob ein Wert in einer Liste von Werten enthalten ist.
z.B. SELECT * FROM artikel WHERE preis IN(20.00,50.00)
LIKE Prüft, ob eine Übereinstimmung mit einem Muster besteht.
z.B.SELECT * FROM kunden WHERE name LIKE 'm%'
Gibt alle Sätze zurück, in denen name mit "m" beginnt
NOT LIKE Prüft, ob keine Übereinstimmung mit einem Muster besteht.
z.B.SELECT * FROM kunden WHERE name NOT LIKE 'm%'
gibt alle Sätze zurück, in denen name nicht mit "m" beginnt
% Ersetzt beliebig viele Zeichen.
_ (Unterstrich) Ersetzt genau ein Zeichen.
z.B. SELECT * FROM kunden WHERE name LIKE 'm_ier'
würde Meier und auch Maier zurückgeben
AND && Liefert den Wahrheitswert true, wenn beide Teilbedingungen logisch wahr sind. Es kann "AND" und auch "&&" geschrieben werden.
z.B. SELECT * FROM kunden WHERE name LIKE 'm%' AND eintrag LIKE 'm%'
gibt alle Sätze zurück in denen name mit "m" beginnt und eintrag mit "m" gebinnt
OR || Liefert den Wahrheitswert true, wenn mindestens eine Teilbedingung logisch wahr ist. Es kann "OR" und auch "||" geschrieben werden.
z.B. SELECT * FROM kunden WHERE name LIKE 'm%' || name LIKE '%d'
gibt alle Sätze zurück in denen name mit "m" beginnt oder mit "d" endet
NOT ! Kehrt den Wahrheitswert eines logischen Ausrucks um. Es kann "NOT" oder auch "!" geschrieben werden.
z.B. SELECT * FROM kunden WHERE name NOT LIKE 'm%'
gibt alle Sätze zurück in denen name nicht mit "m" beginnt
Funktionen
Es gibt "normale"
Funktionen und Aggregatfunktionen. Die "normalen" Funktionen
modifizieren Werte in der Ergebnistabelle. Der Umfang dieser Funktionen
ist recht gross, so das hier nur einige erwähnt werden können.
Stringfunktionen
LEFT Liefert einen Teilstring aus einem anderen String, beginnend beim ersten Zeichen.
LOWER/UPER Wandelt alle Buchstaben eines Strings in Klein- bzw. Grossbuchstaben um.
SUBSTRING Liefert einen Teilstring aus einem String.
TRIM Entfernt führende und folgende Leerzeichen.
SQL-Befehl:
SELECT artikelnummer,
LEFT(artikelbezeichnung,10) AS bezeichnung,
FROM artikel
Hier werden von der Spalte artikelbezeichnung nur die ersten 10 Zeichen verwendet:
Mathematische Funktionen
ABS Liefert den Absolutwert einer Zahl.
CEILING Liefert die kleinste Ganzzahl (Integer), die nicht kleiner ist als ein vorgegebener Wert.
FLOOR Liefert die grösste Ganzzahl (Integer), die nicht grösser ist als ein vorgegebener Wert.
LOG Ermittelt den natürlichen Logarithmus eines Wertes.
MOD Liefert den Rest einer Division.
ROUND Rundet einen Wert auf eine Ganzzahl oder eine Dezimalzahl auf oder ab.
SQL-Befehl:
SELECT artikelnummer, preis,
ROUND(preis*0,05) AS rabatt
FROM artikel
So kann z.B. ganz einfach ein Rabatt von 5% berechnet werden.
Datumsfunktionen
Diese Funktionen setzen ein gültiges Datum wie z.B. DATE und DATETIME voraus.
DAYOFMONTH Ermittelt den Tag des Monats.
MONTH Ermittelt den Monat als nummerischen Wert.
MONTHNAME Ermittelt den Monatsnamen.
QUARTER Ermittelt das Quartal.
YEAR Ermittelt das Jahr.
SQL-Befehl:
SELECT * FROM kunden WHERE DAYOFMONTH( datum ) = '24'
Hier werden z.B. alle Datensätze ausgegeben, die an einem 24. des Monats eingetragen wurden.
Aggregatfunktionen
Diese Funktionen werden bei GROUP BY verwendet.
COUNT Ermittelt für eine Spalte die Anzahl der Datensätze.
MAX Ermittelt den höchsten Wert einer Spalte.
MIN Ermittelt den niedrigsten Wert einer Spalte.
AVG Ermittelt den Durchschnittswert aller Einträge einer Spalte.
SUM Ermittelt die Summe der Werte einer Spalte.
SQL-Befehl:
SELECT AVG(preis), SUM(preis), MIN(preis), MAX(preis) FROM artikel
Durchschnitt, Summe, Minimum und Maximum aller Werte in der Spalte "preis" werden ermittelt.
SELECT über mehrere Tabellen
Oft müssen Werte aus
mehren Tabellen ausgelesen werden. Meistens sind Tabellen miteinander
durch die Schlüssel (KEY, PRIMARY_KEY) logisch miteinander verknüpft.
Die Werte könnten mit einzelnen SELECT-Anweisungen nacheinander
ausgelesen werden, was aber ein unnötiger Aufwand ist. Für das Auslesen
von Werten aus mehreren Tabellen wird WHERE und JOIN verwendet.
WHERE ist dabei wohl die einfachere Variante:
SELECT * FROM artikel,steuer WHERE artikel.steuersatz=steuer.id
Liest alle Spalten der Tabellen "artikel" und "steuer" aus, wenn in der
Tabelle "artikel" in der Spalte "steuersatz" ein Wert eingetragen ist,
der in der Spalte "id" in der Tabelle "steuer" enthalten ist.
Man könnte dasselbe auch wie folgt erreichen:
SELECT * FROM artikel INNER JOIN steuer ON artikel.steuersatz=steuer.id
Nach dem JOIN können auch noch weitere WHERE-Klauseln stehen. Z.B. WHERE name = 'meier'
Bei JOIN gibt es in verschiedene Formen, die sich bei den einzelnen Datenbanksystemen unterscheiden.
Diese sind unter MySQL vorhanden:
INNER JOIN
Es werden grundsätzlich nur Datensätze
angezeigt, für die in den Verknüpfungsfeldern beider Tabellen gleiche Enträge enthalten sind.
LEFT [OUTER] JOIN Liest alle Datensätze der linken Tabelle aus und alle Datensätze der rechten, für die ein passender Eintrag in der linken Tabelle enthalten ist. "OUTER" kann dabei auch weggelassen werden.
RIGHT [OUTER] JOIN Analog dem LEFT [OUTER] JOIN, werden alle Datensätze der rechten Tabelle und alle Datensätze der linken Tabelle, für die passende Einträge in der rechten enthalten sind, zurückgegeben.
NATURAL JOIN Ist mit INNER JOIN identisch.
Daten ändern
Mit UPDATE werden Werte in einer Tabelle verändert.
UPDATE tabelle
SET spalten_name1=ausdruck1, [spalten_name2=ausdruck2, ...]
[WHERE where_definition]
Nach SET werden paarweise
die Spalten und der Wert, der in diese Spalte eingetragen werden soll,
angegeben. Nicht angegebene Spalten werden nicht verändert.
WHERE legt die Bedingung
fest, welche Datensätze geändert werden sollen. WHERE muss nicht
angegeben werden. In dem Fall werden alle Datensätze in der Tabelle
geändert.
Der Rückgabewert von UPDATE ist die Anzahl der Zeilen, bei denen eine Änderung durchgeführt wurde.
SQL-Befehl:
UPDATE artikel SET steuersatz='2', preis='10.00'
WHERE artikelnummer < '10000'
Setzt bei allen Datensätzen der Tabelle "artikel" den "steuersatz" auf
2 und "preis" auf 10.00, deren "artikelnummer" kleiner als 10000 ist.
Daten löschen
Mit DELETE werden Daten in einer Tabelle gelöscht. Mit WHERE kann man die Datensätze auswählen,
die gelöscht werden sollen. Um sicher zu sein, das man die richtigen
Sätze löscht, kann man zum Testen das DELETE mit SELECT ersetzen. Die
Sätze, die dann angezeigt werden, werden beim DELETE gelöscht.
DELETE FROM tabelle
[WHERE where_definition]
SQL-Befehl:
DELETE FROM artikel WHERE steuer != '0'
Löscht alle Datensätze mit steuer ungleich 0 in der Tabelle "artikel".
SQL-Befehl:
DELETE FROM artikel
Löscht alle Datensätze der Tabelle "artikel".
|