SQL-Komponenten

Inhaltsübersicht

 

SQL-Komponenten........................................................................................................................... 1

2     SQL-Komponenten..................................................................................................................... 1

2.1     Grundelemente der SQL-Sprache......................................................................................... 2

2.1.1     Literale........................................................................................................................... 2

2.1.2     Begrenzer....................................................................................................................... 3

2.1.3     Namen........................................................................................................................... 4

2.1.4     Schlüsselwörter.............................................................................................................. 4

2.2     Datentypen........................................................................................................................... 4

2.2.1     Numerische  Datentypen................................................................................................. 5

2.2.2     Alphanumerischer Datentyp............................................................................................ 6

2.2.3     Abstrakte Datentypen..................................................................................................... 7

2.3     Prädikate.............................................................................................................................. 9

2.4     Aggregatfunktionen............................................................................................................... 9

2.5     Skalare Funktionen............................................................................................................. 10

2.5.1     Datumsfunktionen......................................................................................................... 11

2.5.2     Zeichenkettenfunktionen............................................................................................... 11

2.5.3     Spezielle Konstanten und die DBMSINFO-Systemfunktion.......................................... 13

2.6     Arithmetische und Boolesche Operatoren............................................................................ 14

2.7     NULL-Werte..................................................................................................................... 15

2.8     Klassifizierung der SQL-Anweisungen................................................................................. 16

Aufgaben...................................................................................................................................... 17

 

 

 

 

2      SQL-Komponenten

 

 

         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.

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.1        Grundelemente der SQL-Sprache

 

 

         SQL  ist eine  nichtprozedurale Sprache,  die wie jede andere

         Programmiersprache folgende Grundelemente hat:

 

                         - Literale,

                         - Begrenzer,

                         - Namen    und 

                         - Schlüsselworte.

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.1.1     Literale

 

 

         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.

 

         Beispiel 2.1

 

         Es folgen  Beispiele  für  alphanumerische  und  hexadezimale

         Konstanten:

 

         'Stuttgart'

         '1000 Berlin 30'

         '9876'

         'Apostroph wird mit '' dargestellt'

 

         X'53514C0D'

 

         Beispiel 2.2

 

         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.

 

         Beispiel 2.3

 

         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.

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.1.2     Begrenzer

 

 

         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.

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.1.3     Namen

 

 

         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.

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.1.4     Schlüsselwörter

 

 

         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.

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.2        Datentypen

 

 

         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.

 

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.2.1     Numerische  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.

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.2.2     Alphanumerischer Datentyp

 

 

         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.)

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.2.3     Abstrakte Datentypen

 

 

         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.

 

         Beispiel 2.4

 

                       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

 

         Beispiel 2.5

 

         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.

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.3        Prädikate

 

 

         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.

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.4        Aggregatfunktionen

 

 

         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.

COUNT

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.

 

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.5        Skalare Funktionen

 

 

         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.

SIN(n)

berechnet den Sinus von n. Der Ausgabewert ist vom Typ FLOAT.

SQRT(n)

berechnet die Quadratwurzel von n.

 

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.5.1     Datumsfunktionen

 

 

         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

INTERVAL (einheit,datum)

wandelt ein Zeitinterval in eine Gleitkommakonstante, in die von dem Benutzer durch einheit vorgegebene Form um.

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.5.2     Zeichenkettenfunktionen

 

 

         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.

TRIM(z1)

liefert als Ergebnis eine Zeichenkette vom Typ VARCHAR bzw. TEXT  (ohne   anschließende Leerzeichen).

UPPERCASE(z1)

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.

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.5.3     Spezielle Konstanten und die DBMSINFO-Systemfunktion

 

 

         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.

USER

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.

_CPU_MS

gibt die CPU-Zeit der INGRES-Sitzung aus.

_ET_SEC

gibt die verbrauchte Zeit aus.

TRANSACTION_STATE

'1'   bedeutet,  daß  eine  Transaktion  gestartet wurde, während '0'  den  Zustand außerhalb einer Transaktion anzeigt.

AUTOCOMMIT_STATE

'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.

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.6        Arithmetische und Boolesche Operatoren

 

 

         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

 

                        +                 .

 

         Beispiel 2.6

 

         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.

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.7        NULL-Werte

 

 

         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.

 

Zurück zum Inhaltsverzeichnis

 

 

 

2.8        Klassifizierung der SQL-Anweisungen

 

 

         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.

 

Zurück zum Inhaltsverzeichnis

 

 

 

Aufgaben.

 

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.

 

Zurück zum Inhaltsverzeichnis