Die wichtigsten SQL-Befehle
Samstag, 29. März 2003 17:27
Rechte erteilen:
GRANT (Rechte) ON (Datenbank) TO (Benutzer)
z.B. GRANT SELECT,UPDATE,INSERT ON shop1 TO user;
Rechte entziehen:
REVOKE (Rechte) ON (Datenbank) TO (Benutzer)
z.B. REVOKE UPDATE,INSERT ON shop1 TO user;
Datensätze aus einer Tabelle holen:
SELECT (Felder) FROM (Tabelle) WHERE (Bedingung) ORDER BY (Feld) LIMIT (Limit)
z.B. SELECT id.name,nachname FROM user WHERE name='Heinz' ORDER BY nachname LIMIT 10;
Bedingungen kombinieren:
... WHERE (Bedingung1) AND (Bedingung2) ...
z.B. SELECT * FROM user WHERE ort='Aachen' AND name='Heinz'
... WHERE (Bedingung1) OR (Bedingung2) ...
z.B. SELECT * FROM user WHERE ort='Aachen' OR name='Heinz'
Datensätze in eine Tabelle einfügen:
INSERT INTO (Tabelle) ((Felder)) VALUES ((Werte))
z.B. INSERT INTO user (name,nachname,plz,ort) VALUES ('Heinz','Mueller','52525','Heinsberg');
oder
INSERT INTO (Tabelle) VALUES ((Werte))
z.B. INSERT INTO user VALUES ('Heinz','Mueller','52525','Heinsberg','Hauptstr.123','','');
//hierbei müssen jedoch alle in der Tabelle enthaltenen Felder angegeben werden !!
Datensätze in einer Tabelle verändern:
UPDATE (Tabelle) SET (Feld1)=(Wert), ... WHERE (Bedingung)
z.B. UPDATE user SET plz='41849', ort='Wassenberg' WHERE id=12;
Datensätze löschen:
DELETE FROM (Tabelle) WHERE (Bedingung)
z.B. DELETE FROM user WHERE id=12;
Tabelle oder Datenbank löschen:
DROP TABLE (Tabelle)
DROP DATABASE (Datenbank)
Mustervergleich mit LIKE:
SELECT (Felder) FROM (Tabelle) WHERE (Feld) LIKE (Muster)
z.B. SELECT id,name,nachname FROM user WHERE nachname LIKE 'Muel%';
SELECT id,name,nachname FROM user WHERE plz LIKE '5____';
SELECT * FROM news WHERE titel LIKE '%auto%';
% steht für eine beliebige Anzahl von Zeichen
_ steht für genau ein Zeichen
Aggregatfunktionen in SQL:
Anzahl: COUNT((Feld))
z.B. SELECT COUNT(nachname) AS anzahl FROM user WHERE nachname = 'Mueller';
Durchschnitt: AVG((Feld))
z.B. SELECT COUNT(endpreis) AS durchschnitt FROM lieferung ...;
Minimum: MIN((Feld))
z.B. SELECT MIN(endpreis) AS min FROM lieferung ...;
Maximum: MAX((Feld))
z.B. SELECT MAX(endpreis) AS max FROM lieferung ...;
Summe: SUM((Feld))
z.B. SELECT SUM(endpreis) AS summe FROM lieferung ...;
TIP: wenn man eine Statistik mit mehreren Aggregatfunktionen erstellen will,
z.B. Minimum, Maximum, Durchschnitt, Mittelwert ... - dann ist es bei einer hohen Anzahl von Datensätzen besser (schneller), wenn man anstatt der einzelnen SQL-Befehle (MIN,MAX,...) alle Werte einmal aus der Datenbank holt und dann mit einem Script die gewünschten Werte errechnet / ermittelt.
Abfragen über mehrere Tabellen:
SELECT (Felder) FROM (Tabelle1),(Tabelle2), ...
oder:
SELECT (Felder) FROM (Tabelle1) INNER JOIN (Tabelle2) ON (Suchbedingung) ...
z.B. SELECT * FROM user INNER JOIN lieferung ON user.id = lieferung.kunden_nummer WHERE ...;
INNER JOIN - gibt nur Übereinstimmungen (user.id = lieferung.kunden_nummer)
OUTER JOIN - liefert alle Zeilen, nicht nur Übereinstimmungen
RIGHT JOIN - liefert alle Zeilen der ersten Tabelle und Übereinstimmungen aus der zweiten Tabelle
LEFT JOIN - liefert alle Zeilen der zweiten Tabelle und Übereinstimmungen aus der ersten Tabelle
Mengenbegriffe:
SELECT (Felder) FROM (Tabelle1) WHERE (Feld) IN ((Feld1, Feld2, Feld3))
z.B. SELECT * FROM user WHERE ort IN ('Aachen','Heinsberg','Köln');
SELECT (Felder) FROM (Tabelle1) WHERE (Feld) IN (SELECT (Felder) FROM (Tabelle2))
z.B. SELECT * FROM kunden WHERE artikel IN (SELECT artikel FROM lieferant WHERE preis > 100);
weitere Befehle:
BETWEEN - Wertebereich festlegen
z.B. SELECT * FROM user WHERE plz BETWEEN '50000' AND '59999';
GROUP BY - reduziert pro Wert auf eine Reihe
z.B. SELECT ort FROM user WHERE ort='Aachen' GROUP BY nachname;
//liefert alle unterschiedlichen Orte (je 1x) mit Anzahl
DISTINCT - Zusammenfassung gleicher Zeilen zu einer
z.B. SELECT DISTINCT nachname FROM user;
//liefert alle unterschiedlichen Nachnamen (je 1x)
TIP: unter MySQL funktioniert es nur wenn man nur ein Feld abfragt
SUBSTR(String, Start, Länge) - einen Teilstring extrahieren
z.B. SELECT SUBSTR(bezeichnung, 0, 25) FROM artikel;
//liefert die Bezeichnungen als String mit 25 Zeichen (0 bis 25)
NOT - Zeilen ausschliessen
z.B. ...NOT BETWEEN ...
...NOT IN (...
...NOT LIKE ...
Vergleichsoperatoren:
= gleich
< kleiner
<= kleiner-gleich
> grösser
>= grösser-gleich
<> ungleich
Sotierreihenfolge:
DESC - absteigend
ASC - aufsteigend
GRANT (Rechte) ON (Datenbank) TO (Benutzer)
z.B. GRANT SELECT,UPDATE,INSERT ON shop1 TO user;
Rechte entziehen:
REVOKE (Rechte) ON (Datenbank) TO (Benutzer)
z.B. REVOKE UPDATE,INSERT ON shop1 TO user;
Datensätze aus einer Tabelle holen:
SELECT (Felder) FROM (Tabelle) WHERE (Bedingung) ORDER BY (Feld) LIMIT (Limit)
z.B. SELECT id.name,nachname FROM user WHERE name='Heinz' ORDER BY nachname LIMIT 10;
Bedingungen kombinieren:
... WHERE (Bedingung1) AND (Bedingung2) ...
z.B. SELECT * FROM user WHERE ort='Aachen' AND name='Heinz'
... WHERE (Bedingung1) OR (Bedingung2) ...
z.B. SELECT * FROM user WHERE ort='Aachen' OR name='Heinz'
Datensätze in eine Tabelle einfügen:
INSERT INTO (Tabelle) ((Felder)) VALUES ((Werte))
z.B. INSERT INTO user (name,nachname,plz,ort) VALUES ('Heinz','Mueller','52525','Heinsberg');
oder
INSERT INTO (Tabelle) VALUES ((Werte))
z.B. INSERT INTO user VALUES ('Heinz','Mueller','52525','Heinsberg','Hauptstr.123','','');
//hierbei müssen jedoch alle in der Tabelle enthaltenen Felder angegeben werden !!
Datensätze in einer Tabelle verändern:
UPDATE (Tabelle) SET (Feld1)=(Wert), ... WHERE (Bedingung)
z.B. UPDATE user SET plz='41849', ort='Wassenberg' WHERE id=12;
Datensätze löschen:
DELETE FROM (Tabelle) WHERE (Bedingung)
z.B. DELETE FROM user WHERE id=12;
Tabelle oder Datenbank löschen:
DROP TABLE (Tabelle)
DROP DATABASE (Datenbank)
Mustervergleich mit LIKE:
SELECT (Felder) FROM (Tabelle) WHERE (Feld) LIKE (Muster)
z.B. SELECT id,name,nachname FROM user WHERE nachname LIKE 'Muel%';
SELECT id,name,nachname FROM user WHERE plz LIKE '5____';
SELECT * FROM news WHERE titel LIKE '%auto%';
% steht für eine beliebige Anzahl von Zeichen
_ steht für genau ein Zeichen
Aggregatfunktionen in SQL:
Anzahl: COUNT((Feld))
z.B. SELECT COUNT(nachname) AS anzahl FROM user WHERE nachname = 'Mueller';
Durchschnitt: AVG((Feld))
z.B. SELECT COUNT(endpreis) AS durchschnitt FROM lieferung ...;
Minimum: MIN((Feld))
z.B. SELECT MIN(endpreis) AS min FROM lieferung ...;
Maximum: MAX((Feld))
z.B. SELECT MAX(endpreis) AS max FROM lieferung ...;
Summe: SUM((Feld))
z.B. SELECT SUM(endpreis) AS summe FROM lieferung ...;
TIP: wenn man eine Statistik mit mehreren Aggregatfunktionen erstellen will,
z.B. Minimum, Maximum, Durchschnitt, Mittelwert ... - dann ist es bei einer hohen Anzahl von Datensätzen besser (schneller), wenn man anstatt der einzelnen SQL-Befehle (MIN,MAX,...) alle Werte einmal aus der Datenbank holt und dann mit einem Script die gewünschten Werte errechnet / ermittelt.
Abfragen über mehrere Tabellen:
SELECT (Felder) FROM (Tabelle1),(Tabelle2), ...
oder:
SELECT (Felder) FROM (Tabelle1) INNER JOIN (Tabelle2) ON (Suchbedingung) ...
z.B. SELECT * FROM user INNER JOIN lieferung ON user.id = lieferung.kunden_nummer WHERE ...;
INNER JOIN - gibt nur Übereinstimmungen (user.id = lieferung.kunden_nummer)
OUTER JOIN - liefert alle Zeilen, nicht nur Übereinstimmungen
RIGHT JOIN - liefert alle Zeilen der ersten Tabelle und Übereinstimmungen aus der zweiten Tabelle
LEFT JOIN - liefert alle Zeilen der zweiten Tabelle und Übereinstimmungen aus der ersten Tabelle
Mengenbegriffe:
SELECT (Felder) FROM (Tabelle1) WHERE (Feld) IN ((Feld1, Feld2, Feld3))
z.B. SELECT * FROM user WHERE ort IN ('Aachen','Heinsberg','Köln');
SELECT (Felder) FROM (Tabelle1) WHERE (Feld) IN (SELECT (Felder) FROM (Tabelle2))
z.B. SELECT * FROM kunden WHERE artikel IN (SELECT artikel FROM lieferant WHERE preis > 100);
weitere Befehle:
BETWEEN - Wertebereich festlegen
z.B. SELECT * FROM user WHERE plz BETWEEN '50000' AND '59999';
GROUP BY - reduziert pro Wert auf eine Reihe
z.B. SELECT ort FROM user WHERE ort='Aachen' GROUP BY nachname;
//liefert alle unterschiedlichen Orte (je 1x) mit Anzahl
DISTINCT - Zusammenfassung gleicher Zeilen zu einer
z.B. SELECT DISTINCT nachname FROM user;
//liefert alle unterschiedlichen Nachnamen (je 1x)
TIP: unter MySQL funktioniert es nur wenn man nur ein Feld abfragt
SUBSTR(String, Start, Länge) - einen Teilstring extrahieren
z.B. SELECT SUBSTR(bezeichnung, 0, 25) FROM artikel;
//liefert die Bezeichnungen als String mit 25 Zeichen (0 bis 25)
NOT - Zeilen ausschliessen
z.B. ...NOT BETWEEN ...
...NOT IN (...
...NOT LIKE ...
Vergleichsoperatoren:
= gleich
< kleiner
<= kleiner-gleich
> grösser
>= grösser-gleich
<> ungleich
Sotierreihenfolge:
DESC - absteigend
ASC - aufsteigend