SQL-Befehle und -Funktionen
SELECT
- Abfrage von Tabellen, Spalten und Werten -
Einfaches Select-Statement
SELECT charname -- hole Spalte charname FROM CHARACTER; -- aus der Tabelle character
Erklärung
"SELECT column charname FROM table characer and show as table"
"Hole aus der Tabelle character die Spalte charname heraus und zeige sie mir als Tabelle."
Gefiltertes Select-Statement
SELECT * FROM numbers WHERE (NUMBER = 2);
Erklärung
Liefert Werte, die durch "WHERE" gefiltert werden.
Analytische Zusätze zum Select-Befehl
EXPLAIN SELECT charname FROM CHARACTER;
Erklärung
EXPLAIN ANALYZE SELECT charname FROM CHARACTER;
Erklärung
SELECT * FROM WORK WHERE YEAR <= SELECT MIN(YEAR) + 1 FROM WORK );
Erklärung
Abfrage 1: Suche den kleinsten Wert aus year und erhöhe ihn um 1.
Abfrage 2: Suche alle Werte, deren Wert year kleinergleich dem zuvor ermittelten Wert ist.
CREATE
- Tabellen erzeugen -
CREATE TABLE numbers ( NUMBER INTEGER UNIQUE, name VARCHAR(32), plz CHAR(5) );
CREATE TABLE mastertable AS SELECT * FROM masterbase.mastertable;
Erklärung
Kopiert eine Tabelle aus einer anderen Datenbank/Tabelle
DROP
- Tabellen löschen -
DROP TABLE numbers;
ACHTUNG: Es erfolgt keinerlei Bestätigungsabfrage; es gibt KEINEN Papierkorb
INSERT INTO
- Werte einfügen -
INSERT INTO numbers VALUES (1, 'eins');
Erklärung
Fügt den Wert "1" in Spalte number und "eins" in Spalte name ein.
Wenn keine weiteren Angaben gemacht werden, wird immer in die "nächste" Zeile eingefügt.
INSERT INTO numbers VALUES (2, 'zwei'), VALUES (3, 'drei');
Erklärung
Mehrere Werte können über mehrere Zeilen eingefügt werden.
Dies kann auch abgekürzt werden
INSERT INTO numbers VALUES (2, 'zwei'), (3, 'drei');
INSERT INTO numbers (NUMBER) VALUES (2), (3), (4);
Erklärung
INSERT INTO numbers SELECT NUMBER + 10, name FROM numbers;
Erklärung
ORDER BY
- Werte sortieren -
SELECT YEAR, title FROM WORK ORDER BY YEAR DESC, title;
Erklärung
Sortiert die Ausgabe.
Es kann nach einer oder mehreren Spalten sortiert werden.
ASC (aufsteigend) ist der Standard.
UPDATE
- Werte aktualisieren -
UPDATE chars SET description = NULL WHERE description = '';
CROSS JOIN
SELECT * FROM CHARACTER CROSS JOIN chars WHERE (charname = 'Hans'); -- dies entspricht SELECT * FROM CHARACTER, chars WHERE (charname = 'Hans');
Erklärung
CROSS JOIN liefert alle möglichen Kombinationen beider Tabellen
Diese Kombinationen können durch WHERE eingeschränkt werden.
Anstelle des CROSS JOIN sollte lieber das INNER JOIN verwendet weden.
INNER JOIN
SELECT * FROM CHARACTER INNER JOIN chars ON (CHARACTER.charname = chars.charname); -- dies entspricht SELECT * FROM CHARACTER CROSS JOIN chars WHERE (CHARACTER.charname = chars.charname); -- ABER: enthalten die Tabellen Spalten, die einen identischen Namen haben, so müssen die Spalten über %TABELLE%.%SPALTE% angesprochen werden; besser SELECT * FROM CHARACTER INNER JOIN chars USING (charname);
OUTER JOIN
SELECT * FROM numbers LEFT OUTER JOIN names ON (names.id = numbers.id); -- Um id nutzbar zu machen, wird USING benutzt; danach existieren names.id, numbers.id und id SELECT * FROM numbers LEFT OUTER JOIN names USING id; -- OUTER kann weggelassen werden, jedoch sollte es zugunsten der Lesbarkeit beibehalten werden
SELECT * FROM numbers RIGHT OUTER JOIN names ON (names.id = numbers.id);
SELECT * FROM numbers FULL OUTER JOIN names ON (names.id = numbers.id);
COUNT()
SELECT COUNT(*) FROM CHARACTER;
Erklärung COUNT(*) liefert alle Zeilen
SELECT COUNT(description) FROM character;
COUNT(description) liefert alle Zeilen, bei denen description NOT NULL sind.