Grundlegendes zu SQL
Die Abkürzung SQL kommt von Structured Query Language.
SQL ist eine deskriptive Sprache (auch WAS-Sprache genannt, da sie
für das WAS ist als Ergebnis gewünscht verwendet wird). Die deskriptiven
Sprachen stehen ganz im Gegensatz zu den normalerweise bekannten konventionellen
Sprachen, welche das WIE wird ein Ergebnis erreicht behandeln.
SQL weist auch noch die Eigenschaft einer non-prozeduralen und
einer mengenverabeitenden Sprache auf.
SQL ist jedoch nur ein Industriestandard. Dies hat den Nachteil, daß
jedes Produkt seinen eigenen SQL-Dialekt verwendet. Somit also spezielle
Befehle nur bei speziellen Produkten anwendbar sind.
SELECT felder FROM tabellen WHERE bedingungen ORDER
BY sortierungen
-
Die Sortierung von ORDER BY kann sowohl aufwärts wie auch abwärts
erfolgen. Um eine spezielle Sortierung festzulegen, muss nach der
Sortierung entweder asc (aufsteigend) oder dsc (absteigend) angegeben werden
(z.B. SELECT * FROM tabelle ORDER BY name asc).
-
Es ist möglich Tupelvariable zu vergeben. Dazu muss nach dem
Tabellennamen einfach der Variablenname angegeben werden (z.B. SELECT
test.* FROM tabelle test). Diesen Tupelvariablen kann man sehr gut
für Zwischenergebnisse verwenden (z.B. SELECT ergebnis.wert FROM
(tabelle1 JOIN tabelle2) AS ergebnis).
-
Es lassen sich auch die Felder umbenennen. Mit dem Befehl AS nach
dem Feldnamen und dem nachfolgenden neuen Namen erhält das Feld einen
neuen Namen (z.B.SELECT feld1 AS test FROM tabelle)
-
Mit dem Befehl DISTINCT werden Wertepaare nicht doppelt angezeigt
(z.B. SELECT DISTINCT ... ).
-
Mit dem Befehl HEAVING wird es ermöglicht, daß ein auszugebender
Wert eingeschränkt wird. So wird z.B. durch SELECT name FROM tabelle
HAVING name="Klaus" nur der Name Klaus ausgegeben (in diesem Beispiel
wäre das selbe Ergebnis auch mit SELECT name FROM tabelle WHERE name="Klaus"
zu erreichen).
-
Der Befehl GROUP BY ermöglicht es, Gruppierungen zu erstellen.
Dies ist z.B. beim Zählen sehr wichtig, dann damit kann eingegrenzt
werden über welche Werte die Zählung erfolgen soll und welchen
Werte diese Ergebnis zuzuordnen ist. So wird z.B. mit SELECT name, COUNT
(*) FROM namenstabelle, adresstabelle WHERE namenstabelle.nameID=adresstabelle.nameID
GROUP BY name ermöglicht,
Vergleichsoperatoren
Es können die Operatoren "=", "<", ">", "<=",
">=" "<>" und BETWEEN (attribut BETWEEN konst1
AND konst2) verwendung finden.
SELECT felder FROM tabelle WHERE name <'G'
SELECT felder FROM tabelle WHERE name BETWEEN 'F' AND 'H'
Es können auch sogenannte Ungewißheitsselektionen erfolgen.
Dies ist mit dem Operator LIKE möglich. Dabei spielt ein Zeichen einen
Wildcard (normalerweise ist dieses Zeichen das "%", bei MS-ACCESS ist es
das Zeichen "*"). Damit lassen sich z.B. alle Namen welche den Teil "ber"
enthalten folgendermaßen erfassen:
SELECT name FROM tabelle WHERE name LIKE '%ber%'.
Mögliche Verbindungen zwischen mehreren Tabellen
Karthesisches Produkt
SELECT felder FROM tabelle, tabelle2
SELECT felder FROM tabelle1 CROSS JOIN tabelle2
Verbund über Verbindungen
SELECT felder FROM tabelle1, tabelle2 WHERE
verbindung
Verbundoperator
-
SELECT felder FROM tabelle1 JOIN tabelle2 ON
verbindung
SELECT felder FROM tabelle1 JOIN tabelle2 USING
verbindung
Gleichverbund
-
SELECT felder FROM tabelle1 NATURAL JOIN tabelle2
Natürlicher Verbund
-
SELECT felder FROM tabelle1 INNER JOIN tabelle2
ON verbindung
-
SELECT felder FROM tabelle1 OUTER JOIN tabelle2
ON verbindung
Falls Zeilen in einer Tabelle aber nicht in der anderen vorhanden sind,
so werden trozdem alle möglichen Zeilen angezeigt. Bei den fehlenden
Teilen wird ein Nullwert angezeigt.
-
SELECT felder FROM tabelle1 FULL OUTER JOIN tabelle2
ON verbindung
Falls Zeilen in einer Tabelle aber nicht in der anderen vorhanden sind,
so werden trozdem alle möglichen Zeilen angezeigt. Bei den fehlenden
Teilen wird ein Nullwert angezeigt.
-
SELECT felder FROM tabelle1 LEFT OUTER JOIN tabelle2
ON verbindung
Es werden alle Wert aus tabelle1 und bei fehlenden in tabelle2 anstelle
des zugehörigen Wertes der tabelle2 Nullwerte angezeigt.
-
SELECT felder FROM tabelle1 RIGHT OUTER JOIN tabelle2
ON verbindung
Es werden alle Wert aus tabelle2 und bei fehlenden in tabelle1 anstelle
des zugehörigen Wertes der tabelle1 Nullwerte angezeigt.
Verschachtelungen
-
Das Prädikat IN prüft also ob ein Wert in einer inneren
Abfrage enthalten ist.
SELET werte1 FROM tabelle1 WHERE wert1 IN (SELECT wert2 FROM
tabellen2 WHERE bedingung)
Dieser Ausdruck ermöglicht das verschachteln zweier Abfragen ineinander.
Sie hat den Erfolg, daß wert1 nur noch jene Werte enthält, welche
auch in wert2 enthalten sind. Es ist anstelle von IN auch NOT IN möglich.
Dis hätte genau den umgekehrten Effekt, was bedeuten würde, daß
wert1 nur jene Werte enthält welche nicht in wert2 sind.
-
Mit dem Prädikat EXISTS ist es möglich, abzufragen ob
eine innere Abfrage leer oder nicht leer ist.
Vereinigung
UNION
Durchschnitt
INTERSECT
Differenz
EXCEPT
Tabellenmanipulation
Tabellen erstellen
CREATE TABLE tabellenname
( attribut1 attributtyp1 [NOT NULL
[, attribut2 attributtyp2, ...]
[, PRIMARY KEY (primarykey1[, primarykey2]), ...]
[, FOREIGN KEY (foreignkey1[, foreignkey2, ...])
REFERENCES tabelle (attribut1[, attribut2, ...])]
)
Ein Primary Key ist automatisch mit NOT NULL belegt.
Zus�tzliche Parameter:
DEFAULT defaultwert
CHECK (VALUE IN (wert1[, wert2, ...]))
CHECK (wert1 < wert2)
CHECK (wert1 = wert2)
CHECK (wert1 > wert2)
Erstellen eines benutzerdefinierten Wertebereichs:
CREATE DOMAIN domain attributtyp
Tabellen verändern
attribute zu Tabellen hinzuf�gen
ALTER TABLE tabelle ADD attribut attributtyp
Es sind natürlich auch CHECK-Klauseln erlaubt.
attribute aus Tabellen entfernen
ALTER TABLE tabelle DROP attribut [RESTRICT / CASCADE]
Tabellen löschen
DROP TABLE tabelle [RESTRICT / CASCADE]
Indizes
CREATE [UNIQUE][NOT IS NULL]
INDEX indexname
ON tabelle (attribut1 [ASC / DESC][, attribut2 ...])
UNIQUE: Schlüssel ist eindeutig
NOT IS NULL: Schlüssel kann keinen Nullwert annehmen
Vereinigung
Falls Sie die Daten zweier Tabellen vereinigen (aneinander hängen) wollen so gibt es nur die eine (folgende) Möglichkeit:
SELECT werte1
FROM tabellen1
UNION SELECT werte2
FROM tabellen2
Rechenoperationen
COUNT ([DISTINCT / ALL] attribut)
COUNT (*)
Summe
SUM ([DISTINCT / ALL] attribut)
Maximum
MAX ([DISTINCT / ALL] attribut)
Minimum
MIN ([DISTINCT / ALL] attribut)
arithmetisches Mittel
AVG ([DISTINCT / ALL] attribut)
|