SQL unterscheidet nicht Groß- und Kleinschreibung. Ist damit case insensitive.
Eine Datenbank ist ein Container für Tabellen (und weitere Datenbankobjekte)
CREATE DATABASE
- Erzeugen einer neuen Datenbank
ALTER DATABASE
- Modifizieren einer Datenbank
CREATE TABLE
- Erzeugen einer neuen Tabelle
CREATE TABLE professoren(
pers_nr INTEGER NOT NULL,
name VARCHAR(20) NOT NULL,
rang CHARACTER(2),
raum INTEGER,
PRIMARY KEY (pers_nr)
);
ALTER TABLE
- Modifizieren einer Tabelle
DROP TABLE
- Löschen einer Tabelle
ÌNSERT INTO
- Einfügen neuer Daten
INSERT INTO professoren(pers_nr, name, rang, raum)
VALUES(2125, 'Sokrates', 'C4', 226);
UPDATE
- Ändern bestehender Daten
DELETE
- Löschen bestehender Daten
Zwei formale Sprachen als Grundlage für die Anfrageformulierung in relationalen Datenbanken:
- Relationale Algebra
- Relationenkalkül (rein deklarativ)
Mittels solcher Theorien (bzw. formaler Grundlagen) wird es möglich, exakte und nachweisbare Ausssagen über Datenbanken zu formulieren.
Formale Sprache für die Formulierung von Abfragen innerhalb eines relationalen Schemas
- ermöglicht Relationen miteinander zu verknüpfen oder zu reduzieren und daraus komplexere Informationen herzuleiten
- Definiert Operationen, die sich auf einer Menge von Relationen anwenden lassen
- Ergebnisse aller Operationen sind ebenfalls Relationen
- Relationale Algebra ist die Bases für die Datenbanksprache SQL
Bei der Projektion werden die Attribute/Spalten einer (Argument-)Relation
$R$ extrahiert. D.h. es sind nur die Attribute vorhanden, die ausgewählt wurden.
Projektions-Symbol:
Menge der Attributnamen im Subskript: $\sqcap {Attributnamem}(Relationenname)$
Eventuell auftretende Duplikate werden entfernt
Beispiel: $\sqcap{Rang}(Professoren)$
SELECT rang FROM professoren;
Bei der Selektion werden die Tupel einer Relation
$R$ mittels eines$Selektionsprädikat$ gefiltert, d.h. das Ergebnis einer Selektion sind die Tupel der Relation$R$ , die das Selektionsprädikat erfüllen.
Projektions-Symbol:
Selektionsprädikat als Subskript:
Beispiel:
SELECT * FROM studenten
WHERE semester > 10;
Mathematische Relationen kennen keine Duplikate. In SQL Tabellen sind Duplikate aber erlaubt bzw. werden aus Effizienzgründen nicht automatisch beseitigt. Müssen explizit beseitigt werden.
DISTINCT
dient zur Beseitigung von Duplikaten
SELECT DISTINCT name from studenten;
Das kartesische Produkt zwischen zwei Relationen
$R$ und$S$ enthält alle$|R|*|S|$ möglichen Paare von Tupeln aus$R$ und$S$ . Das Schema der Ergebnisrelation$sch(R \times S)$ ist die Vereinigung der Attribute aus$sch(R)$ und$sch(S)$ .
Symbol:
Verbindet zwei Relationen
Beispiel:
SELECT * FROM professoren, hoeren;
--Expliziter:
SELECT * FROM professoren
CROSS JOIN hoeren;
Zwei Relationen mit dem gleichen Attributnamen und Attributtypen (Domänen) können durch Vereinigung zusammengefasst werden. In der Ergebnissrelation sind alle Tupel beider Mengen vorhanden.
Vereinigungssysmbol:
Verbindet zwei Relationen
Duplikatelemination
Beispiel:
(SELECT name FROM professoren)
UNION
(SELECT name FROM studenten);
Zwischen zwei Relationen mit den gleichen Attributnamen und Attributtypen (Domänen) kann eine Mengen-Differenz gebildet werden. Dann sind in der Ergebnisrelation
$D=A-B$ alle Tupel aus$A$ enthalten, die nicht in$B$ enthalten sind.
Symbol:
Verbindet zwei Relationen
Beispiel:
(SELECT matr_nr FROM studenten)
EXPECT
(SELECT matr_nr FROM pruefen);
BEi der Umbenennung einer Relation
$R1$ zu den neuen Namen$R2$ wird eine "logische" Kopie der Relation erstellt. Auf die ursprüngliche Relation kann mit dem alten Namen$R1$ zugegriffen werden.
Symbol:
Vergibt für
Beispiel:
SELECT matr_nr FROM studenten
AS Matrikelnummer;