2 SQL-Komponenten..................................................................................................................... 1
2.1.4 Schlüsselwörter.............................................................................................................. 4
2.2.2 Alphanumerischer Datentyp............................................................................................ 6
2.2.3 Abstrakte Datentypen..................................................................................................... 7
2.5.2 Zeichenkettenfunktionen............................................................................................... 11
2.7 NULL-Werte..................................................................................................................... 15
In diesem Kapitel werden gemeinsame Elemente aller
SQL-Anweisungen beschrieben. Zuerst werden die Grundelemente
von SQL erörtert, im Anschluß daran die SQL-Datentypen
definiert. Zusätzlich dazu werden Aggregat- und skalare
Funktionen, arithmetische und Boolesche Operatoren sowie
Prädikate kurz dargestellt. Am Ende des Kapitels wird die
Klassifizierung aller SQL-Anweisungen vorgenommen.
SQL ist eine nichtprozedurale Sprache, die wie jede andere
Programmiersprache folgende Grundelemente hat:
- Literale,
- Begrenzer,
- Namen und
- Schlüsselworte.
Ein Literal ist eine alphanumerische, hexadezimale oder
numerische Konstante. Eine alphanumerische Konstante (auch
Zeichenkette genannt) beinhaltet ein oder mehrere Zeichen des
SQL-Zeichensatzes, die zwischen zwei Apostrophen stehen.
Die hexadezimalen Konstanten dienen der Darstellung der nicht
abdruckbaren Zeichen. Jede hexadezimale Konstante fängt mit
dem Buchstaben "X" an, gefolgt von einer geraden Anzahl von
Buchstaben oder Ziffern, die innerhalb von zwei Apostrophen
stehen.
Es folgen Beispiele für alphanumerische und hexadezimale
Konstanten:
'Stuttgart'
'1000 Berlin 30'
'9876'
'Apostroph wird mit '' dargestellt'
X'53514C0D'
Bei folgenden Beispielen handelt es sich nicht um
alphanumerische Konstanten:
'AB'C' (ungerade Anzahl von Apostrophen)
'Muenchen (Apostrophe sind nicht paarweise vorhanden)
Zu numerischen Konstanten gehören alle Ganz-, Festpunkt- und
Gleitpunktzahlen mit oder ohne Vorzeichen.
Es folgen Beispiele für numerische Konstanten:
130
-130.00
-0.357E5
22.3E-3
Ein Literal besitzt immer einen Datentyp und eine Länge,
die beide vom Format des Literals abhängig sind. Zusätzlich
besitzt jede numerische Konstante eine Genauigkeits- und
Skalierungsangabe.
Mit Hilfe der Begrenzer werden die lexikalischen Einheiten
(token) einer Programmiersprache voneinander getrennt.
INGRES-SQL kennt folgende Begrenzer:
, ( ) < > . : = + - * / <> <= >=
Kommentare und alphanumerische Konstanten stellen auch
Begrenzer dar.
Ein Kommentar kann auf verschiedene Weise in einer
INGRES-SQL-Anweisung dargestellt werden. Die Zeichenpaare
"/*" und "*/" definieren den dazwischen befindlichen Text,
der sich auch auf mehrere Zeilen erstrecken kann, als
Kommentar. Ab INGRES Version 6 wird auch das Zeichenpaar "--"
als Kommentarzeichen erkannt. Dabei wird dieses Zeichenpaar,
zusammen mit dem Rest der Zeile, als Kommentar betrachtet.
Namen in SQL sind durch Zeichenketten dargestellt, die bis
zu 24 alphanumerische Zeichen enthalten können. Jeder Name
muß mit einem Buchstaben oder dem Zeichen "_" beginnen. Die
SQL-Namen bei INGRES dürfen nicht mit dem Zeichenpaar "ii"
anfangen, weil solche Namen vom System reserviert sind.
Jede Programmiersprache hat eine Menge von Wörtern, die eine
gewisse vorgegebene Bedeutung haben, und die in der jeweils
vorgegebenen Form geschrieben werden müssen. Solche Wörter
heißen Schlüsselwörter. In der SQL-Sprache gibt es eine
Vielzahl solcher Wörter, die zusätzlich, wie in den meisten
anderen Programmiersprachen, reserviert sind. Das bedeutet,
daß solche Wörter als Objektnamen nicht benutzt werden
dürfen.
Verschiedene INGRES-Produkte enthalten unterschiedliche
Schlüsselwörter. Aus diesem Grund werden wir auf die
Auflistung der Schlüsselwörter verzichten. Die Liste aller
Schlüsselwörter einzelner INGRES-Produkte kann in den
entsprechenden Manualen gefunden werden.
Alle Datenwerte einer Spalte müssen denselben Datentyp haben.
INGRES-SQL kennt mehrere Datentypen, die in folgende
Klassen unterteilt werden können:
- numerische Datentypen;
- alphanumerische Datentypen und
- abstrakte Datentypen.
Numerische Datentypen ermöglichen die Darstellung von Zahlen.
INGRES-SQL enthält folgende numerische Datentypen:
- INTEGER1;
- SMALLINT;
- INTEGER;
- FLOAT4 und
- FLOAT.
Der Datentyp INTEGER1 beschreibt ganzzahlige numerische
Werte, die in einem Byte gespeichert werden können. SMALLINT
beschreibt ebenfalls ganzzahlige numerische Werte, die in
zwei Byte gespeichert werden können und deswegen zwischen
-32768 und 32767 liegen. INTEGER2 ist die alternative
Schreibweise für SMALLINT.
Mit dem Datentyp INTEGER können die ganzzahligen numerischen
Werte dargestellt werden, die in vier Byte gespeichert
werden können und deswegen zwischen -2147483648 und
2147482647 liegen. Die ganzzahligen Werte, die außerhalb
dieses Intervals liegen, werden intern in Gleitkommazahlen
umgewandelt. INTEGER4 ist das Synonym für INTEGER.
Der Datentyp FLOAT4 beschreibt Gleitkommazahlen, die in vier
Byte gespeichert werden können. Diese Zahlen werden als
positive oder negative Dezimalzahlen geschrieben, gefolgt von
dem Buchstaben E (oder e) und einer ganzzahligen Konstante
(zum Beispiel: -3.2E-08). Mit der in Kapitel 15 beschriebenen
Umgebungsvariablen II_DECIMAL kann der Dezimalpunkt (in
Komma, zum Beispiel) geändert werden.
Der Datentyp FLOAT beschreibt die Gleitkommazahlen, die
in acht Byte gespeichert werden können. Die alternative
Schreibweise für diesen Datentyp ist FLOAT8. Sowohl
mit dem Datentyp FLOAT4 als auch mit FLOAT können die
Gleitkommazahlen dargestellt werden, die zwischen -10**38 und
+10**38 liegen.
Der alphanumerische Datentyp ermöglicht die Darstellung von
Zeichenketten. INGRES unterstützt Zeichenketten fester und
variabler Länge. Die alphanumerischen Datentypen fester Länge
sind
- CHAR und
- C
während
- VARCHAR und
- TEXT
alphanumerische Datentypen variabler Länge darstellen.
Die Zeichenketten des Datentyps CHAR können alle
darstellbaren und nicht darstellbaren Zeichen enthalten.
Der Datentyp C wird nur noch aus Kompatibilitätsgründen zu
den früheren INGRES-Versionen unterstützt. Die Zeichenketten
dieses Datentyps können nur darstellbare Zeichen enthalten.
Die nicht darstellbaren Zeichen werden beim Datentyp C in
Leerzeichen umgewandelt.
VARCHAR kennzeichnet eine Zeichenkette variabler Länge, die
sowohl darstellbare als auch nicht darstellbare Zeichen sowie
NULL-Zeichen enthalten kann. Der Datentyp TEXT wird nur noch
aus Kompatibilitätsgründen zu den früheren INGRES-Versionen
unterstützt. Die Zeichenketten dieses Datentyps können nur
darstellbare und NULL-Zeichen enthalten.
Der Datentyp VARCHAR unterscheidet sich aus Benutzersicht
nicht vom Typ CHAR. Der einzige Unterschied besteht in der
physikalischen Darstellung. Falls der Inhalt einer CHAR(n)
Zeichenkette kürzer als n Zeichen ist, wird der Rest der
Zeichenkette mit Leerzeichen aufgefüllt. Die Zeichenkette vom
Typ VARCHAR wird hingegen genau in ihrer tatsächlichen Länge
gespeichert. (Das gilt nur für die Tabellen, die komprimierte
Datenwerte enthalten.)
INGRES unterstützt vier abstrakte Datentypen
- MONEY,
- DATE,
- OBJECT_KEY und
- TABLE_KEY.
Der Datentyp MONEY wird für die Darstellung von Geldbeträgen
verwendet. Deswegen werden die Werte vom Typ MONEY
standardmäßig als Dezimalzahlen mit genau zwei Stellen hinter
dem Komma dargestellt. INGRES gibt die Werte vom Typ MONEY
als eine Zeichenkette der Länge 20 aus.
Mit der Umgebungsvariablen II_MONEY_FORMAT kann das
Währungszeichen (standardmäßig "$") und mit II_DECIMAL das
Symbol für den Dezimalpunkt (standardmäßig ".") geändert
werden. Die Ausgabegenauigkeit eines Geldbetrages kann mit
der Umgebungsvariablen II_MONEY_PREC modifiziert werden.
(Alle Umgebungsvariablen sind in Kapitel 15 beschrieben.)
DATE stellt in numerischem Format entweder eine Datums- und
eine Zeitangabe oder ein Zeitinterval dar. Ein Datenwert vom
Typ DATE wird intern als numerischer Wert, der die Anzahl der
Sekunden ab einem im voraus festgelegten Zeitpunkt darstellt,
gespeichert.
INGRES unterstützt u.a. folgende Ausgabeformate für die Werte
vom Typ DATE:
dd-mmm-yyyy und
dd-mmm-yyyy hh:mm:ss
wobei dd für Tag, mmm für Monat, yyyy für Jahr, hh für
Stunde, mm für Minute und ss für Sekunde steht.
28-may-1961 (das erste Format)
28-may-1961 07:58:00 (das zweite Format).
Genauso ist es bei INGRES möglich, ein Zeitinterval
anzugeben. Dabei wird, falls notwendig, der signifikante Teil
des Intervals in der Länge von 25 Zeichen ausgegeben. Das
ganze Format eines Zeitintervals sieht folgendermaßen aus:
yy yrs mm mon dd days
hh hrs mm mins ss secs
Für das Zeitinterval von zehn Jahren, neun Monaten, acht
Tagen, sieben Stunden, sechs Minuten und 55 Sekunden, das
folgendermaßen bei INGRES dargestellt wird
10 yrs 9
mon 8 days 7 hrs 6 min 55 secs
wird
10 yrs 9 mon 8 days 7
hrs
ausgegeben.
Die Eingabe der Werte vom Typ DATE hängt von der
Umgebungsvariablen II_DATE_FORMAT ab. Diese Umgebungsvariable
ist in Kapitel 15 beschrieben.
OBJECT_KEY und TABLE_KEY sind zwei spezifische Datentypen des
INGRES-Systems, die jeweils eine zusätzliche Spalte in einer
INGRES-Tabelle bilden. Die Werte der TABLE_KEY-Spalte sind
als CHAR(8), die Werte der OBJECT_KEY-Spalte als CHAR(16)
definiert.
Sowohl die Spalte vom Datentyp OBJECT_KEY als auch die Spalte
vom Typ TABLE_KEY können entweder vom INGRES-System (durch
die Angabe SYSTEM_MAINTAINED) oder vom Benutzer (durch die
Angabe NOT SYSTEM_MAINTAINED) verwaltet werden. Falls beide
Spalten vom System verwaltet werden, werden sie als interne
Spalten des INGRES-Systems betrachtet, die vom Benutzer
nicht verändert werden können und die garantieren, daß jede
Reihe einer Tabelle intern eindeutig gekennzeichnet ist. Der
Unterschied zwischen diesen beiden Datentypen liegt darin,
daß die Werte der TABLE_KEY-Spalte alle Reihen innerhalb der
Tabelle, der sie angehören eindeutig kennzeichnen, während
die Werte der OBJECT_KEY-Spalte alle Reihen innerhalb des
ganzen INGRES-Systems eindeutig identifizieren.
Falls der Benutzer sich entscheidet, durch die Angabe NOT
SYSTEM_MAINTAINED die Spalten mit den Datentypen OBJECT_KEY
bzw. TABLE_KEY selbst zu verwalten, muß er jeder Reihe
die entsprechenden Datenwerte zuweisen. Die Quelle dieser
Zuweisung können Werte der beiden Spalten einer anderen
Tabelle oder Zeichenketten sein.
Ein Prädikat kennzeichnet eine logische Bedingung, die auf
Reihen einer Tabelle angewendet wird. Die herkömmlichen
logischen Bedingungen mit zwei Werten ("richtig", "falsch")
sind bei SQL um einen dritten Wert ("unbekannt") erweitert
worden. SQL unterstützt folgende Prädikate:
- alle Vergleichsoperatoren;
- BETWEEN-Operator;
- IN-Operator;
- LIKE-Operator;
- NULL-Operator;
- ALL- und
ANY-Operator und
- EXISTS-Operator.
All diese Prädikate werden ausführlich in Kapitel 7
beschrieben.
Die Aggregatfunktionen werden auf eine Gruppe von
Datenwerten aus einer Spalte angewendet. Das Ergebnis jeder
Aggregatfunktion ist immer ein einziger Wert. Es gibt fünf
Aggregatfunktionen, die von INGRES-SQL unterstützt werden:
- AVG;
- MAX;
- MIN;
- SUM und
- COUNT.
Funktion |
Bedeutung |
AVG |
(Kürzung für "average") berechnet das arithmetische Mittel der Datenwerte in einer Spalte. Die Spalte muß numerische Werte beinhalten. |
MAX |
berechnet den größten und MIN den kleinsten Datenwert einer Spalte. Die Spalte kann numerische oder alphanumerische Werte beinhalten. |
SUM |
berechnet die Summe aller Datenwerte in einer Spalte. Die Spalte muß numerische Werte beinhalten. |
berechnet die Anzahl der Datenwerte innerhalb einer Spalte. Die einzige Aggregatfunktion, die nicht auf Spalten angewendet wird, ist COUNT(*). Diese Funktion berechnet die Anzahl der Reihen. |
Zusätzlich zu den Aggregatfunktionen existieren skalare
Funktionen, mit denen auch Ausdrücke gebildet werden können.
Alle skalaren Funktionen können in vier Gruppen unterteilt
werden.
- numerische Funktionen;
- Datumsfunktionen;
- Zeichenkettenfunktionen und
- Systemfunktionen.
Numerische Funktionen bei INGRES sind diverse mathematische
Funktionen, die der Manipulation numerischer Werte dienen. Zu
den numerischen Funktionen gehören:
- ABS;
- ATAN;
- COS;
- LOG;
- MOD;
- SIN und
- SQRT.
Funktion |
Bedeutung |
ABS(n) |
berechnet den absoluten Wert von n. |
ATAN(n) |
berechnet den Arkustangens von n. Der Ausgabewert ist vom Datentyp FLOAT. |
COS(n) |
berechnet den Kosinus von n. Der Ausgabewert ist vom Typ FLOAT. |
LOG(n) |
berechnet den natürlichen Logarithmus von n. |
MOD(n,b) |
berechnet den Wert n Modulo b. n und b müssen vom Typ INTEGER sein. |
berechnet den Sinus von n. Der Ausgabewert ist vom Typ FLOAT. |
|
berechnet die Quadratwurzel von n. |
Datumsfunktionen berechnen entweder aus einem Ausdruck die
entsprechende Datums- bzw. Zeitangabe oder sie liefern den
Wert aus einem Zeitinterval. Alle Datumsfunktionen verwenden
folgende Datums- bzw. Zeiteinheiten:
- second (seconds, sec oder secs) für die Sekunde;
- minute (minutes, min oder mins) für die Minute;
- day (days) für den Tag;
- week (weeks, wk oder wks) für die Woche;
- month (months, mo oder mos) für den Monat;
- quarter (quarters, qtr oder qtrs) für das Vierteljahr;
- year (years, yr oder yrs) für das Jahr;
INGRES unterstützt folgende drei Datumsfunktionen:
- DATE_TRUNC;
- DATE_PART und
- INTERVAL.
Funktion |
Ergebnis |
DATE_TRUNC (einheit,datum) |
liefert als
Ergebnis den bis auf die Angabe einheit abgerundeten Wert
von datum. Beispiel: DATE_TRUNC('month',date('13-may-1991')) liefert als Ergebnis '01-may-1991'. |
DATE_PART (einheit,datum) |
liefert als Ergebnis die Ganzzahl, die jenen Teil von datum darstellt, der durch einheit vorgegeben ist. Beispiel: DATE_PART('day',date('13-may-1991'))=13 |
wandelt ein Zeitinterval in eine Gleitkommakonstante, in die von dem Benutzer durch einheit vorgegebene Form um. |
Zeichenkettenfunktionen werden zur Manipulation der
Datenwerte einer Spalte vom Typ CHAR, VARCHAR, C
oder TEXT angewendet. INGRES unterstützt folgende
Zeichenkettenfunktionen:
- LEFT;
- LENGTH;
- LOCATE;
- LOWERCASE;
- PAD;
- RIGHT;
- SHIFT;
- SIZE;
- SQUEEZE;
- TRIM und
- UPPERCASE.
Funktion |
Ergebnis |
LEFT (z1,länge) |
liefert als Ergebnis die linke Teilzeichenkette der Zeichenkette z1 in der Länge länge. Beispiel: LEFT('format',4) = 'form' |
LENGTH (z1) |
liefert als Ergebnis die tatsächliche Länge der Zeichenkette z1 (ohne anschließende Leerzeichen). Beispiel: LENGTH('Tabelle') = 7 |
LOCATE(z1,z2) |
liefert als Ergebnis die Anfangsstelle der Teilzeichenkette z2 innerhalb der Zeichenkette z1. Falls z2 in z1 nicht enthalten ist, wird der Wert LENGTH(z1) + 1 geliefert. Beispiel: LOCATE('Panama','ana') = 2 |
LOWERCASE(z1) |
wandelt alle Großbuchstaben der Zeichenkette z1 in Kleinbuchstaben um. Die Kleinbuchstaben und Ziffern bleiben unverändert. Beispiel: LOWERCASE('ABC123abc') = 'abc123abc' |
PAD(z1) |
liefert als Ergebnis die Zeichenkette z1 mit allen anschließenden Leerzeichen. Diese Funktion kann nur mit Werten vom Typ VARCHAR bzw. TEXT sinnvoll verwendet werden. |
RIGHT(z,länge) |
liefert als Ergebnis die rechte Teilzeichenkette der Zeichenkette z in der Länge länge. Beispiel: RIGHT('format',3) = 'mat' |
SHIFT(z1,zahl) |
verschiebt die Zeichenkette z1 um zahl-Stellen nach rechts, falls zahl>0 bzw. nach links, falls zahl<0. Bei Zeichenketten fester Länge wird das Ergebnis mit Leerzeichen aufgefüllt. Falls z1 variabler Länge ist, findet das Auffüllen mit Leerzeichen nicht statt. Beispiel: SHIFT('Otto ',4)='Ott' |
SIZE(z1) |
liefert die deklarierte Größe der Ganzzahl z1, die vom Datentyp SMALLINT sein muß. |
SQUEEZE(z1) |
komprimiert jede Sequenz von Leer-, NULL-, NL("new line")- FF("form feed")-, RETURN- und Tabulatorzeichen. |
liefert als Ergebnis eine Zeichenkette vom Typ VARCHAR bzw. TEXT (ohne anschließende Leerzeichen). |
|
wandelt alle Kleinbuchstaben der Zeichenkette z1 in Großbuchstaben um. Die Großbuchstaben und Ziffern bleiben unverändert. Beispiel: UPPERCASE('ABC123abc') = 'ABC123ABC' |
Alle Zeichenkettenfunktionen können untereinander beliebig
geschachtelt werden.
INGRES unterstützt drei spezielle Konstanten
- TODAY,
- NOW und
- USER .
Der Wert jeder Konstante wird der entsprechenden Variablen
oder Tabellenspalte zugewiesen.
Konstante |
Ergebnis |
TODAY |
liefert das aktuelle Datum. |
NOW |
liefert das aktuelle Datum, zusammen mit der aktuellen Zeitangabe. |
liefert den Namen des aktuellen Benutzers. |
Die DBMSINFO-Funktion liefert die in Bezug auf den
angegebenen Parameter existierende Information aus einer
Datenbank. Die wichtigsten Werte des Parameters sind:
Parameter |
Ergebnis |
DATABASE |
gibt den Datenbanknamen aus. |
DBA |
gibt den Namen des Datenbankeigentümers (DBA) aus. |
_VERSION |
gibt die aktuelle INGRES-Versionsnummer aus. |
TERMINAL |
gibt die Bildschirmadresse aus. |
_BINTIM |
gibt die aktuelle Zeit und das aktuelle Datum als Anzahl von Sekunden seit 1.1.1970 aus. |
gibt die CPU-Zeit der INGRES-Sitzung aus. |
|
gibt die verbrauchte Zeit aus. |
|
'1' bedeutet, daß eine Transaktion gestartet wurde, während '0' den Zustand außerhalb einer Transaktion anzeigt. |
|
'1' bedeutet AUTOCOMMIT ON, während '0' AUTOCOMMIT OFF anzeigt. (Für die Beschreibung der AUTOCOMMIT-Anweisung siehe Kapitel 13.) |
Falls Ihr INGRES-System auch die optionale Knowledge
Management-Komponente enthält (siehe Kapitel 20), kann der
DBMSINFO-Parameter auch folgende Werte haben:
Parameter |
Ergebnis |
GROUP |
gibt den Namen der Benutzergruppe bzw. Leerzeichen aus. |
ROLE |
gibt den Namen der benutzerdefinierten Regel bzw. Leerzeichen aus. |
QUERY_IO_LIMIT |
gibt den Wert für die maximal erlaubte Anzahl von E/A-Operationen für eine Abfrage aus. |
QUERY_ROW_LIMIT |
gibt den Wert für die maximal erlaubte Anzahl von ausgewählten Reihen einer Abfrage aus. |
INGRES-SQL beinhaltet unäre und binäre arithmetische
Operatoren. Unäre Operatoren sind
+ (als Vorzeichen)
- (als Vorzeichen)
Binäre Operatoren sind
+ (Addition)
- (Subtraktion)
* (Multiplikation)
/ (Division)
INGRES unterstützt auch den Verkettungsoperator
+ .
Die Verkettung der Zeichen
'Daten' + 'bank' +
'anwendung'
liefert als Ergebnis
'Datenbankanwendung' .
INGRES-SQL ermöglicht auch die Benutzung folgender Boolescher
Operatoren
- NOT
- AND
- OR
Auf die arithmetischen Operatoren wird an vielen Stellen
des Buches Bezug genommen, während die Booleschen Operatoren
hauptsächlich in Kapitel 7 und 8 behandelt werden.
Ein NULL-Wert ist ein spezieller Wert, der für eine Spalte
zugelassen werden kann. Dieser Wert wird vorwiegend dann
verwendet, wenn die Information für einen Datenwert der
Spalte fehlt oder nicht bekannt ist. Er kann in einer Tabelle
mit Personaldaten vorkommen, z.B. wenn eine Person nicht
über einen Telefonanschluß verfügt. In diesem Fall ist es
sinnvoll, diese Spalte mit dem NULL-Wert zu besetzen.
In einem arithmetischen Ausdruck liefert ein NULL-Wert wieder
den Wert NULL. Also haben bei den unären, arithmetischen
Ausdrücken, falls A ein Ausdruck mit Wert NULL ist, auch
+A und -A
den Wert NULL. In den binären Ausdrücken haben, falls
wenigstens einer der Operanden A oder B den NULL-Wert hat,
auch
A + B A - B
A * B und A / B
den Wert NULL. (A und B müssen numerische Aussdrücke sein.)
Falls ein Ausdruck eine Vergleichsoperation beinhaltet und
einer der Operanden (oder beide) den Wert NULL hat, ist das
Ergebnis dieser Operation "unbekannt". Jeder der Ausdrücke
A = B A <> B A < B A > B
hat also als Ergebnis "unbekannt", falls A oder B (oder
beide) den NULL-Wert haben.
In den Booleschen Funktionen Konjunktion, Disjunktion und
Negation, die jeweils mit den Symbolen AND, OR und NOT
dargestellt sind, wird das Verhalten der NULL-Werte mit Hilfe
von Wahrheitstabellen dargestellt:
AND R ?
F OR R
? F NOT
R R ? F
R R R R R F
? ? ? F
? R ?
? ? ?
F F F F F R ? F F R
wobei R für richtige, F für falsche logische Aussage und ?
für "unbekannt" steht.
Bei den Aggregatfunktionen AVG, SUM, MAX und MIN werden
zunächst alle NULL-Werte aus der Spalte entfernt; erst
dann wird das Ergebnis der jeweiligen Funktion berechnet.
Beinhaltet die Spalte ausschließlich NULL-Werte, liefert die
Funktion den Wert NULL. Die Aggregatfunktion COUNT(*) zählt
alle Reihen, einschließlich derer mit den NULL-Werten. Bei
COUNT DISTINCT werden zunächst alle NULL-Werte aus der Spalte
entfernt; erst dann wird das Ergebnis berechnet. Falls die
Spalte nur NULL-Werte beinhaltet, ist das Ergebnis 0.
Für die Darstellung eines NULL-Wertes gilt, daß er sich von
allen anderen Werten unterscheiden muß. Für die numerischen
Datentypen unterscheidet das System also zwischen dem Wert 0
einerseits und den NULL-Wert andererseits. Dasselbe gilt für
die leere Zeichenkette und den NULL-Wert bei alphanumerischen
Datenwerten.
Wie jede andere Programmiersprache besteht SQL aus
einer Vielzahl von Anweisungen, mit welchen der Benutzer
unterschiedliche Operationen durchführen kann. Alle
SQL-Anweisungen lassen sich auf Grund ihrer Funktionen in
zwei verschiedene Gruppen unterteilen:
- Datendefinition (Data Definition Language - DDL)
- Datenmanipulation (Data Manipulation Language - DML)
Die Anweisungen für die Datendefinition bestimmen die
Struktur einer Datenbank. Mit diesen Anweisungen werden
alle Objekte (Tabellen, Indexe usw.) erzeugt, geändert und
gelöscht. In Kapitel 6 dieses Buches werden diese Anweisungen
beschrieben.
Sobald die Objekte einer Datenbank mittels
Datendefinitonsanweisungen definiert sind, kann die Datenbank
bearbeitet werden. Mit den Datenmanipulationsanweisungen
werden Datenwerte eingefügt, geändert, gelöscht und
abgefragt. Diese Gruppe von Anweisungen wird in mehreren
Kapiteln beschrieben. In den Kapiteln 7 und 8 wird die
Anweisung zur Abfrage der Datenwerte (SELECT) betrachtet.
In Kapitel 9 werden die Anweisungen zum Einfügen (INSERT),
Ändern (UPDATE) und Löschen (DELETE) von Datenwerten
behandelt.
Zusätzlich zu Datendefinitions- und
Datenmanipulationsanweisungen existieren in SQL noch die
Anweisungen für den Datenschutz und die Datensicherheit.
Die Anweisungen für den Datenschutz bestimmen den Schutz
der Datenwerte einer Datenbank durch die Gewährung bzw.
Einschränkung von Zugriffsrechten. Der Datenschutz wird
ausführlich in Kapitel 14 behandelt.
Die Anweisungen zur Datensicherheit dienen der Erhaltung
der Konsistenz einer Datenbank. Sie beziehen sich sowohl
auf Transaktionen, als auch auf das Sperren von Tabellen
oder Reihen. Die Transaktionen sowie alle Anweisungen zur
Datensicherheit werden in Kapitel 13 behandelt.
A.2.1 Welche Konstanten werden innerhalb von Apostrophen
geschrieben?
A.2.2 Was ist der wichtigste Unterschied zwischen den
Datentypen CHAR und VARCHAR?
A.2.3 Welches Ergebnis liefern folgende Ausdrücke:
a) A + NULL
b) NULL = NULL
c) B OR NULL
d) B AND NULL ,
wobei A einen numerischen, NULL einen NULL-Wert und B
einen logischen Ausdruck darstellt.