SQL: Unterschied zwischen den Versionen

Aus KGS-Wiki
Keine Bearbeitungszusammenfassung
(queries and creates)
Zeile 1: Zeile 1:
'''SQL''' (ausgesprochen "Eskuel" von normalen Menschen, "sikwel" von anstrengenden Menschen und "squirrel" von verstörenden Menschen) ist eine Datenbanksprache, mit der Datenbanken aufgebaut und bearbeitet werden können.
'''SQL (Structured Query Language)''' ist eine Datenbanksprache, mit der [[Datenbank|Datenbanken]] aufgebaut und bearbeitet werden können.


Eine SQL-Datenbank besteht aus zwei Komponenten:
Eine SQL-Datenbank besteht aus zwei Komponenten:
Zeile 5: Zeile 5:
# dem SQL-[[Server]], auf dem die Daten in [[Relation|Relationen]] gespeichert sind, und
# dem SQL-[[Server]], auf dem die Daten in [[Relation|Relationen]] gespeichert sind, und
# dem SQL-[[Client]], der an den Server Anfragen schickt, um die Daten abzufragen oder zu bearbeiten.
# dem SQL-[[Client]], der an den Server Anfragen schickt, um die Daten abzufragen oder zu bearbeiten.
Die Anfragen, die der Client schickt, sind in der Sprache '''SQL''' geschrieben, die im Folgenden beschrieben wird. Der Klarheit halber werden in diesem Artikel die SQL-Schlüsselwörter groß geschrieben und Platzhalter für Attribut- und Relationennamen o.ä. klein. Tatsächlich ist SQL [[Case Sensitivity|''case insensitive'']], ignoriert also Groß- und Kleinschreibung. Um die Lesbarkeit zu erhöhen, sind in die Beispiele Zeilenumbrüche und Leerzeichen eingefügt, auch diese werden von SQL ignoriert. Die Zeichenfolge <code>--</code> kennzeichnet einen Kommentar; der Rest der Zeile wird von SQL ignoriert.


Die Anfragen, die der Client schicken kann, lassen sich in drei Kategorien unterteilen:
Die Anfragen, die der Client schicken kann, lassen sich in drei Kategorien unterteilen:
Zeile 16: Zeile 17:
=== Projektion ===
=== Projektion ===


SQL-Abfragen beginnen mit dem Schlüsselwort <code>[[Projektion (Relationenalgebra)|SELECT]]</code>:<syntaxhighlight lang="sql" line="1">
 
SELECT spalten
SQL-Abfragen beginnen mit dem Schlüsselwort <code>[[Projektion (Relationenalgebra)|SELECT]]</code>:
FROM relation;
 
</syntaxhighlight>Diese Anfrage liefert alle ausgewählten [[Attribut (Informatik)|Spalten]] aus der angegebenen Relation zurück. Um alle Spalten einer Relation zu erhalten, schreibt man<syntaxhighlight lang="sql" line="1">
Diese Anfrage liefert alle ausgewählten [[Attribut (Informatik)|Spalten]] aus der angegebenen Relation zurück. Es können mehrere, mit Kommata getrennte Spalten, selegiert werden. Um alle Spalten einer Relation zu erhalten, schreibt man ein <code>*</code>. Mit dem Schlüsselwort <code>DISTINCT</code> kann man doppelte Einträge herausfiltern.<syntaxhighlight lang="sql" line="1">
SELECT nachname
FROM lehrkraft;
-- ergibt die Nachnamen aller Lehrkräfte
 
SELECT vorname, nachname, kuerzel
FROM lehrkraft;
-- ergibt Vorname, Nachname und Kürzel alle Lehrkräfte
 
SELECT *
SELECT *
FROM relation;
FROM lehrkraft;
-- ergibt alle Attribute aller Lehrkräfte
 
SELECT DISTINCT nachname
FROM lehrkraft;
-- ergibt die Nachnamen aller Lehrkräfte, aber so, dass jeder Name nur einmal auftaucht.
</syntaxhighlight>
</syntaxhighlight>
=== Selektion ===
Mit dem Schlüsselwort <code>[[Selektion (Relationenalgebra)|WHERE]]</code> können Bedingungen gestellt werden, nach denen die Ergebnisse gefiltert werden. Mit <code>AND</code> und <code>OR</code> können mehrere Bedingungen verknüpft werden. Negiert werden Bedingungen mit <code>NOT</code>, Bedingungen können auch geklammert werden.
{| class="wikitable mw-collapsible"
|+Selektionsoperatoren
!Operator
!Beschreibung
!Erläuterungen
|-
|<code>=</code><code><></code>
|Gleichheit
Ungleichheit
|
|-
|<code><</code><code>></code><code><=</code><code>>=</code><code><></code>
|Kleiner
Größer
Kleiner oder gleich
Größer oder gleich
Ungleich
|Zahlen werden numerisch sortiert, Daten chronologisch (d.h. <code>'1990-10-06' < '2021-11-27'</code>) und Strings lexikalisch (d.h. <code>'Meier' > 'Mayer'</code>)
|-
|<code>LIKE</code>
|Ähnlichkeit
|Vergleicht [[String|Strings]] mit Mustern, die Platzhalter enthalten können.
Der Platzhalter <code>_</code> steht für ein beliebiges Zeichen,
<code>%</code> steht für beliebig viele beliebige Zeichen,
<code>[xyz]</code> steht für eins der Zeichen <code>x</code>, <code>y</code> oder <code>z</code>,
<code>[^xyz]</code> steht für ein beliebiges Zeichen, ''außer'' <code>x</code>, <code>y</code> und <code>z</code>.
|-
|<code>IN</code>
|Teil einer Liste?
|Prüft, ob der betrachtete Wert in einer gegebenen Liste von Vergleichswerten enthalten ist
|-
|<code>BETWEEN</code> ''x'' <code>AND</code> ''y''
|Zwischen zwei Grenzen
|Prüft, ob der betrachtete Wert zwischen ''x'' und ''y'' liegt.
|-
|<code>IS (NOT) NULL</code>
|Vorhandensein von Daten
|Prüft, ob das betrachtete Attribut vorhanden ist oder nicht.
|}
<syntaxhighlight lang="sql" line="1">
SELECT nachname
FROM lehrkraft
WHERE vorname = 'Sven';
-- ergibt alle Lehrkräfte namens Sven


=== Selektion ===
SELECT vorname, nachname
Mit
FROM lehrkraft
WHERE titel = 'Dr.'
  AND geburtsdatum < '1980-01-01';
-- ergibt Lehrkräfte mit Doktortitel, die vor 1980 geboren sind
 
SELECT *
FROM lehrkraft
WHERE NOT nachname LIKE 'M_ller';
-- ergibt Lehrkräfte, die nicht Möller, Müller, Miller o.ä. heißen
 
 
SELECT *
FROM lehrkraft
WHERE NOT nachname LIKE 'M%ller';
-- ergibt Lehrkräfte, die nicht Möller, Miller, Moosmüller, Meynerts-Stiller o.ä. heißen
 
SELECT *
FROM lehrkraft
WHERE geburtsdatum BETWEEN '1970-01-01' AND '1979-31-12';
-- ergibt Lehrkräfte, die in den 70ern geboren sind


=== Selektion ===
SELECT *
Mit dem Schlüsselwort <code>WHERE</code> können Bedingungen gestellt werden, nach denen die Ergebnisse gefiltert werden:<syntaxhighlight lang="sql" line="1">
FROM lehrkraft
SELECT spalten
WHERE vorname IN ['Jan', 'Hein', 'Klaas', 'Pit'];
FROM relation
-- ergibt Lehrkräfte, die Jan, Hein, Klaas oder Pit heißen
WHERE bedingung;
</syntaxhighlight>
</syntaxhighlight>Mit <code>AND</code> und <code>OR</code> können mehrere Bedingungen verknüpft werden. Negiert werden Bedingungen mit <code>NOT</code>.
{{Hinweisbaustein|INHALT=Anders als in den meisten Programmiersprachen wird in SQL nicht <code>==</code> zum Abfragen der Gleichheit verwendet, sondern <code>=</code>!|ICON=[[File:Achtung.svg|32px]]}}
{{Hinweisbaustein|INHALT=Anders als in den meisten Programmiersprachen wird in SQL nicht <code>==</code> zum Abfragen der Gleichheit verwendet, sondern <code>=</code>!|ICON=[[File:Achtung.svg|32px]]}}


Zeile 57: Zeile 135:


=== Umbenennung ===
=== Umbenennung ===
{{Lückenhaft}}
Manchmal ist es hilfreich, Spalten oder ganze Relationen [[Umbenennung|umzubenennen]], etwa wenn man eine Relation mit sich selbst joint. Zur Umbenennung von Spalten nutzt man das Schlüsselwort <code>AS</code>, Relationen kann man einfach ohne Schlüsselwort umbenennen.<syntaxhighlight lang="sql" line="1">
SELECT attribut1 AS andererName,
      attribut2 AS ganzAndererName
FROM relation r,
    andereRelation ar
WHERE bedingung;
</syntaxhighlight>
 
=== Aggregierende Funktionen ===
Zu einem Datensatz lassen sich einfache Statistiken berechnen, z.B. die Anzahl aller Einträge in einer bestimmten Spalte, deren Summe, Minimum, Maximum oder Durchschnitt. Die Schlüsselwörter dafür sind <code>COUNT</code>, <code>SUM</code>, <code>MIN</code>, <code>MAX</code> und <code>AVG</code>. Diese werden auch als ''aggregierende Funktionen'' bezeichnet.<syntaxhighlight lang="sql" line="1">
SELECT COUNT(nachname)
FROM lehrkraft;
-- gibt die Anzahl aller Lehrkräfte zurück
 
SELECT MIN(geburtsdatum)
FROM lehrkraft;
-- gibt das Geburtsdatum der jüngsten Lehrkraft zurück
 
SELECT AVG(alter)
FROM lehrkraft;
-- gibt das Durchschnittsalter der Lehrkräfte zurück.
</syntaxhighlight>
 
=== Ergebnisse gruppieren ===
Die Ergebnisse von aggregierenden Funktionen können nach anderen Spalten gruppiert werden. Das Schlüsselwort hierfür heißt <code>GROUP BY</code>.<syntaxhighlight lang="sql" line="1">
SELECT nachname, COUNT(vorname)
FROM lehrkraft
GROUP BY nachname;
-- liefert die Nachnamen aller Lehrer und dazu, wie oft welcher Nachname vertreten ist, d.h. wie viele Vornamen es dazu gibt.
</syntaxhighlight>Möchte man an diese aggregierende Funktion Bedingungen stellen, muss man nach dem <code>GROUP BY</code> das Schlüsselwort <code>HAVING</code> verwenden, das genau wie <code>WHERE</code> funktioniert.
 
=== Ergebnisse sortieren ===
Mit dem Schlüsselwort <code>ORDER BY</code> können die Ergebnisse einer Anfrage in Abhängigkeit von einem Attribut aufsteigend (<code>ASC</code>) oder absteigend (<code>DESC</code>) sortiert werden.<syntaxhighlight lang="sql" line="1">
SELECT *
FROM lehrkräfte
ORDER BY vorname DESC;
-- liefert alle Daten von allen Lehrkräften, absteigend nach Vornamen sortiert.
</syntaxhighlight>
 
=== Ergebnisse einschränken ===
Mit dem Schlüsselwort <code>LIMIT</code> kann die Größe des Ergebnisdatensatzes beschränkt werden, etwa wenn man nur die Top Ten der aktuellen Charts sehen möchte<syntaxhighlight lang="sql" line="1">
SELECT *
FROM lehrkräfte
ORDER BY nachname ASC
LIMIT 5;
-- liefert die Daten der alphabetisch ersten fünf Lehrkräfte
</syntaxhighlight>


== Datenbestand bearbeiten ==
== Datenbestand bearbeiten ==
{{Lückenhaft}}


== Datenbank aufbauen ==
== Datenbank aufbauen ==
=== Tabellen erzeugen ===
Eine neue Tabelle erzeugt man mit dem Schlüsselwort <code>CREATE TABLE</code>. Die Syntax ist folgende:<syntaxhighlight lang="sql" line="1">
CREATE TABLE nameDerTabelle
  (attribut1 datentypVonAttribut1 bedingungenFürAttribut1,
  attribut2 datentypVonAttribut2 bedingungenFürAttribut2,
  ...
  attributX datentypVonAttributX bedingungenFürAttributX)
-- Hinweis: Bedingungen sind immer optional aber oft vernünftig.
</syntaxhighlight>Für jeden Spaltennamen muss ein Datentyp angegeben werden. Die wichtigsten [[Datentyp|Datentypen]] in SQL sind folgende:
{| class="wikitable mw-collapsible"
|+SQL-Datentypen
!
!Typ
!Beschreibung
|-
| rowspan="3" |Numerische Datentypen
|<code>INT</code>
|Ganzzahlen zwischen <math>-2^{31}</math>und <math>2^{31}-1</math>
|-
|<code>BIGINT</code>
|Ganzzahlen zwischen <math>-2^{63}</math> und <math>2^{63}-1</math>
|-
|<code>REAL</code>
|Reelle Zahlen zwischen <math>-3,4 \cdot 10^{38}</math> und <math>3,4 \cdot 10^{38}</math>
|-
| rowspan="3" |[[String|Strings]]
|<code>CHAR(länge)</code>
|Strings mit der vorgegebenen Länge (max. 8000 Zeichen)
|-
|<code>VARCHAR(länge)</code>
|Strings mit variabler, aber höchstens mit der vorgegebenen Länge (max. 8000 Zeichen)
|-
|<code>TEXT</code>
|Strings mit beliebiger Länge, höchstens 2 GB Text.
|-
| rowspan="3" |Datum und Zeit
|<code>DATE</code>
|Daten zwischen <code>0001-01-01</code> und <code>9999-12-31</code>
|-
|<code>TIME</code>
|Zeitangaben mit einer Genauigkeit von 100 Nanosekunden
|-
|<code>DATETIME</code>
|Datum und Zeitangaben kombiniert
|}
=== Attribute an Bedingungen knüpfen ===
Attribute können, müssen aber nicht mit Bedingungen verknüpft werden. Zum Beispiel kann man für Studierende verlangen, dass ihre Matrikelnummern eindeutig sind und diese dann gleich als [[Schlüssel (Datenbank)|Schlüssel]] deklarieren. Leer sollte die Matrikelnummer ebenfalls nicht sein, am besten wird diese beim Anlegen eines Eintrages gleich automatisch erzeugt. Die wichtigsten Bedingungen sind folgende:
{| class="wikitable mw-collapsible"
|+SQL-Bedingungen
!Bedingung
!Erläuterung
|-
|<code>NOT NULL</code>
|In dieser Spalte darf kein [[Null]]<nowiki/>wert stehen, d.h. beim Einfügen von Daten darf diese nicht ausgelassen werden.
|-
|<code>UNIQUE</code>
|Diese Spalte muss für alle [[Tupel]] in der Relation eindeutig sein
|-
|<code>PRIMARY KEY</code>
|Diese Spalte wird als Primärschlüssel genutzt, um die Tupel eindeutg zu identifizieren.
|-
|<code>FOREIGN KEY REFERENCES relation(attribut)</code>
|Diese Spalte ist ein Fremdschlüssel und ''muss'' Werte aus dem angegebenen Attribut der angegebenen Relation enthalten. Dieses andere Attribut ''muss'' der <code>PRIMARY KEY</code> der anderen Relation sein.
|-
|<code>CHECK (bedingungen)</code>
|Die Daten in dieser Spalte müssen bestimmten Bedingungen entsprechen. Die Syntax für die Bedingungen ist dabei dieselbe wie im <code>[[SQL#Selektion|WHERE]]</code>-Teil von Anfragen
|-
|<code>DEFAULT standardwert</code>
|Wenn beim <code>INSERT</code> für dieses Attribut kein Wert angegeben wird, wird der angegebene Standardwert gesetzt.
|-
|<code>AUTO_INCREMENT</code>
|Für die automatische Generierung von IDs: in dieser Spalte werden, falls beim <code>INSERT</code> nicht explizit Werte angegeben werden, automatisch Werte generiert, beginnend bei 1.
|}
=== Tabellen verändern ===
{{Lückenhaft}}
=== Tabellen löschen ===
Mit dem Schlüsselwor <code>DROP TABLE</code> kann man eine Tabelle löschen.{{Hinweisbaustein|INHALT=Vorsichtig mit dem Schlüsslelwort <code>DROP</code>! SQL bittet dich im Zweifel nicht um eine Bestätigung, sondern löscht die Tabelle und alle Daten kommentarlos!|ICON=[[File:Achtung.svg|32px]]}}
[[Kategorie:Datenbanken]]
[[Kategorie:Datenbanken]]
[[Kategorie:Sprache]]
[[Kategorie:Sprache]]

Version vom 7. Februar 2023, 23:04 Uhr

SQL (Structured Query Language) ist eine Datenbanksprache, mit der Datenbanken aufgebaut und bearbeitet werden können.

Eine SQL-Datenbank besteht aus zwei Komponenten:

  1. dem SQL-Server, auf dem die Daten in Relationen gespeichert sind, und
  2. dem SQL-Client, der an den Server Anfragen schickt, um die Daten abzufragen oder zu bearbeiten.

Die Anfragen, die der Client schickt, sind in der Sprache SQL geschrieben, die im Folgenden beschrieben wird. Der Klarheit halber werden in diesem Artikel die SQL-Schlüsselwörter groß geschrieben und Platzhalter für Attribut- und Relationennamen o.ä. klein. Tatsächlich ist SQL case insensitive, ignoriert also Groß- und Kleinschreibung. Um die Lesbarkeit zu erhöhen, sind in die Beispiele Zeilenumbrüche und Leerzeichen eingefügt, auch diese werden von SQL ignoriert. Die Zeichenfolge -- kennzeichnet einen Kommentar; der Rest der Zeile wird von SQL ignoriert.

Die Anfragen, die der Client schicken kann, lassen sich in drei Kategorien unterteilen:

  1. Abfragen an den Datenbestand.
  2. Bearbeitungen am Datenbestand, d.h. Operationen zum Einfügen, Ändern und Löschen von Daten
  3. Bearbeitungen an der Datenbankstruktur, d.h. Operationen zum Erstellen, Ändern und Löschen der Tabellen

Abfragen

Projektion

SQL-Abfragen beginnen mit dem Schlüsselwort SELECT:

Diese Anfrage liefert alle ausgewählten Spalten aus der angegebenen Relation zurück. Es können mehrere, mit Kommata getrennte Spalten, selegiert werden. Um alle Spalten einer Relation zu erhalten, schreibt man ein *. Mit dem Schlüsselwort DISTINCT kann man doppelte Einträge herausfiltern.

SELECT nachname
FROM lehrkraft;
-- ergibt die Nachnamen aller Lehrkräfte

SELECT vorname, nachname, kuerzel
FROM lehrkraft;
-- ergibt Vorname, Nachname und Kürzel alle Lehrkräfte

SELECT *
FROM lehrkraft;
-- ergibt alle Attribute aller Lehrkräfte

SELECT DISTINCT nachname
FROM lehrkraft;
-- ergibt die Nachnamen aller Lehrkräfte, aber so, dass jeder Name nur einmal auftaucht.

Selektion

Mit dem Schlüsselwort WHERE können Bedingungen gestellt werden, nach denen die Ergebnisse gefiltert werden. Mit AND und OR können mehrere Bedingungen verknüpft werden. Negiert werden Bedingungen mit NOT, Bedingungen können auch geklammert werden.

Selektionsoperatoren
Operator Beschreibung Erläuterungen
=<> Gleichheit

Ungleichheit

<><=>=<> Kleiner

Größer Kleiner oder gleich Größer oder gleich Ungleich

Zahlen werden numerisch sortiert, Daten chronologisch (d.h. '1990-10-06' < '2021-11-27') und Strings lexikalisch (d.h. 'Meier' > 'Mayer')
LIKE Ähnlichkeit Vergleicht Strings mit Mustern, die Platzhalter enthalten können.

Der Platzhalter _ steht für ein beliebiges Zeichen, % steht für beliebig viele beliebige Zeichen, [xyz] steht für eins der Zeichen x, y oder z, [^xyz] steht für ein beliebiges Zeichen, außer x, y und z.

IN Teil einer Liste? Prüft, ob der betrachtete Wert in einer gegebenen Liste von Vergleichswerten enthalten ist
BETWEEN x AND y Zwischen zwei Grenzen Prüft, ob der betrachtete Wert zwischen x und y liegt.
IS (NOT) NULL Vorhandensein von Daten Prüft, ob das betrachtete Attribut vorhanden ist oder nicht.
SELECT nachname
FROM lehrkraft
WHERE vorname = 'Sven';
-- ergibt alle Lehrkräfte namens Sven

SELECT vorname, nachname
FROM lehrkraft
WHERE titel = 'Dr.'
  AND geburtsdatum < '1980-01-01';
-- ergibt Lehrkräfte mit Doktortitel, die vor 1980 geboren sind

SELECT *
FROM lehrkraft
WHERE NOT nachname LIKE 'M_ller';
-- ergibt Lehrkräfte, die nicht Möller, Müller, Miller o.ä. heißen


SELECT *
FROM lehrkraft
WHERE NOT nachname LIKE 'M%ller';
-- ergibt Lehrkräfte, die nicht Möller, Miller, Moosmüller, Meynerts-Stiller o.ä. heißen

SELECT *
FROM lehrkraft
WHERE geburtsdatum BETWEEN '1970-01-01' AND '1979-31-12';
-- ergibt Lehrkräfte, die in den 70ern geboren sind

SELECT *
FROM lehrkraft
WHERE vorname IN ['Jan', 'Hein', 'Klaas', 'Pit'];
-- ergibt Lehrkräfte, die Jan, Hein, Klaas oder Pit heißen

Kreuzprodukt

Es können mehrere Relationen mit Kommata getrennt angegeben werden. In diesem Fall wird ein Kreuzprodukt gebildet und alle Tupel aus allen Relationen miteinander verknüpft. Darum sollte in diesem Fall unbedingt mit WHERE sichergestellt werden, dass die Tupel sinnvoll verknüpft werden und die Ergebnismenge nicht unhandlich wird.

Bei gleichnamigen Spalten muss zusätzlich die Relation angegeben werden, deren Spalte betrachtet werden soll. Die Schreibweise ist relation.spalte. In allen anderen Fällen kann die Relation ebenfalls angegeben werden, muss aber nicht.

SELECT spalten
FROM relation1, relation2
WHERE relation1.spalteX = relation2.spalteY
AND weitereBedingungen;

Join

Relationen können auch mit dem Schlüsselwort JOIN verknüpft werden, wobei eine Bedingung angegeben werden muss, unter der gejoint wird. Dieser Bedingung wird nicht WHERE, sondern ON vorangestellt.

SELECT spalten
FROM relation1
JOIN relation2
ON relation1.spalteX = relation2.spalteY
JOIN relation3
ON relation1.spalteQ = relation3.spalteR
WHERE bedingungen;

Umbenennung

Manchmal ist es hilfreich, Spalten oder ganze Relationen umzubenennen, etwa wenn man eine Relation mit sich selbst joint. Zur Umbenennung von Spalten nutzt man das Schlüsselwort AS, Relationen kann man einfach ohne Schlüsselwort umbenennen.

SELECT attribut1 AS andererName,
       attribut2 AS ganzAndererName
FROM relation r,
     andereRelation ar
WHERE bedingung;

Aggregierende Funktionen

Zu einem Datensatz lassen sich einfache Statistiken berechnen, z.B. die Anzahl aller Einträge in einer bestimmten Spalte, deren Summe, Minimum, Maximum oder Durchschnitt. Die Schlüsselwörter dafür sind COUNT, SUM, MIN, MAX und AVG. Diese werden auch als aggregierende Funktionen bezeichnet.

SELECT COUNT(nachname)
FROM lehrkraft;
-- gibt die Anzahl aller Lehrkräfte zurück

SELECT MIN(geburtsdatum)
FROM lehrkraft;
-- gibt das Geburtsdatum der jüngsten Lehrkraft zurück

SELECT AVG(alter)
FROM lehrkraft;
-- gibt das Durchschnittsalter der Lehrkräfte zurück.

Ergebnisse gruppieren

Die Ergebnisse von aggregierenden Funktionen können nach anderen Spalten gruppiert werden. Das Schlüsselwort hierfür heißt GROUP BY.

SELECT nachname, COUNT(vorname)
FROM lehrkraft
GROUP BY nachname;
-- liefert die Nachnamen aller Lehrer und dazu, wie oft welcher Nachname vertreten ist, d.h. wie viele Vornamen es dazu gibt.

Möchte man an diese aggregierende Funktion Bedingungen stellen, muss man nach dem GROUP BY das Schlüsselwort HAVING verwenden, das genau wie WHERE funktioniert.

Ergebnisse sortieren

Mit dem Schlüsselwort ORDER BY können die Ergebnisse einer Anfrage in Abhängigkeit von einem Attribut aufsteigend (ASC) oder absteigend (DESC) sortiert werden.

SELECT *
FROM lehrkräfte
ORDER BY vorname DESC;
-- liefert alle Daten von allen Lehrkräften, absteigend nach Vornamen sortiert.

Ergebnisse einschränken

Mit dem Schlüsselwort LIMIT kann die Größe des Ergebnisdatensatzes beschränkt werden, etwa wenn man nur die Top Ten der aktuellen Charts sehen möchte

SELECT *
FROM lehrkräfte
ORDER BY nachname ASC
LIMIT 5;
-- liefert die Daten der alphabetisch ersten fünf Lehrkräfte

Datenbestand bearbeiten

🕳
Lückenhaft

In diesem Artikel oder Abschnitt fehlen noch wichtige Informationen.

Hilf dem KGS-Wiki, indem du sie recherchierst und einfügst.

Datenbank aufbauen

Tabellen erzeugen

Eine neue Tabelle erzeugt man mit dem Schlüsselwort CREATE TABLE. Die Syntax ist folgende:

CREATE TABLE nameDerTabelle
  (attribut1 datentypVonAttribut1 bedingungenFürAttribut1,
   attribut2 datentypVonAttribut2 bedingungenFürAttribut2,
   ...
   attributX datentypVonAttributX bedingungenFürAttributX)

-- Hinweis: Bedingungen sind immer optional aber oft vernünftig.

Für jeden Spaltennamen muss ein Datentyp angegeben werden. Die wichtigsten Datentypen in SQL sind folgende:

SQL-Datentypen
Typ Beschreibung
Numerische Datentypen INT Ganzzahlen zwischen und
BIGINT Ganzzahlen zwischen und
REAL Reelle Zahlen zwischen und
Strings CHAR(länge) Strings mit der vorgegebenen Länge (max. 8000 Zeichen)
VARCHAR(länge) Strings mit variabler, aber höchstens mit der vorgegebenen Länge (max. 8000 Zeichen)
TEXT Strings mit beliebiger Länge, höchstens 2 GB Text.
Datum und Zeit DATE Daten zwischen 0001-01-01 und 9999-12-31
TIME Zeitangaben mit einer Genauigkeit von 100 Nanosekunden
DATETIME Datum und Zeitangaben kombiniert

Attribute an Bedingungen knüpfen

Attribute können, müssen aber nicht mit Bedingungen verknüpft werden. Zum Beispiel kann man für Studierende verlangen, dass ihre Matrikelnummern eindeutig sind und diese dann gleich als Schlüssel deklarieren. Leer sollte die Matrikelnummer ebenfalls nicht sein, am besten wird diese beim Anlegen eines Eintrages gleich automatisch erzeugt. Die wichtigsten Bedingungen sind folgende:

SQL-Bedingungen
Bedingung Erläuterung
NOT NULL In dieser Spalte darf kein Nullwert stehen, d.h. beim Einfügen von Daten darf diese nicht ausgelassen werden.
UNIQUE Diese Spalte muss für alle Tupel in der Relation eindeutig sein
PRIMARY KEY Diese Spalte wird als Primärschlüssel genutzt, um die Tupel eindeutg zu identifizieren.
FOREIGN KEY REFERENCES relation(attribut) Diese Spalte ist ein Fremdschlüssel und muss Werte aus dem angegebenen Attribut der angegebenen Relation enthalten. Dieses andere Attribut muss der PRIMARY KEY der anderen Relation sein.
CHECK (bedingungen) Die Daten in dieser Spalte müssen bestimmten Bedingungen entsprechen. Die Syntax für die Bedingungen ist dabei dieselbe wie im WHERE-Teil von Anfragen
DEFAULT standardwert Wenn beim INSERT für dieses Attribut kein Wert angegeben wird, wird der angegebene Standardwert gesetzt.
AUTO_INCREMENT Für die automatische Generierung von IDs: in dieser Spalte werden, falls beim INSERT nicht explizit Werte angegeben werden, automatisch Werte generiert, beginnend bei 1.

Tabellen verändern

🕳
Lückenhaft

In diesem Artikel oder Abschnitt fehlen noch wichtige Informationen.

Hilf dem KGS-Wiki, indem du sie recherchierst und einfügst.

Tabellen löschen

Mit dem Schlüsselwor DROP TABLE kann man eine Tabelle löschen.