See also http://www.w3schools.com/sql
Source: http://sql.1keydata.com/de

================================================================================
=======  SQL > SQL Befehle ======================================================
================================================================================
================================================================================
SQL > SQL Befehle > Select
Example:
SELECT store_name FROM Store_Information
================================================================================
SQL > SQL Befehle > Distinct

Example:
SELECT DISTINCT store_name FROM Store_Information
================================================================================
SQL > SQL Befehle > Where

Example:
SELECT store_name
FROM Store_Information
WHERE Sales > 1000
================================================================================
SQL > SQL Befehle > And Or

Example:
SELECT store_name
FROM Store_Information
WHERE Sales > 1000
OR (Sales < 500 AND Sales > 275)
================================================================================
SQL > SQL Befehle > In

Example:
SELECT *
FROM Store_Information
WHERE store_name IN ('Los Angeles', 'San Diego')
================================================================================
SQL > SQL Befehle > Between

Example: !! Achtung Datum !!
SELECT *
FROM Store_Information
WHERE Date BETWEEN '06.Jan.1999' AND '10.Jan.1999'
================================================================================
SQL > SQL Befehle > Like

Example:
SELECT *
FROM Store_Information
WHERE store_name LIKE '%AN%'
================================================================================
SQL > SQL Befehle > Order By

Example:
SELECT "Spalten_Name"
FROM "Tabellen_Name"
[WHERE "Bedingung"]
ORDER BY "Spalten_Name" [ASC, DESC]

SELECT store_name, Sales, Date
FROM Store_Information
ORDER BY Sales DESC
================================================================================
SQL > SQL Befehle > Aggregatfunktionen

Example:
SELECT SUM(Sales) FROM Store_Information
================================================================================
SQL > SQL Befehle > Count

Example:
SELECT COUNT(store_name)
FROM Store_Information

SELECT COUNT(DISTINCT store_name)
FROM Store_Information
================================================================================
SQL > SQL Befehle > Group By

Example:
SELECT store_name, SUM(Sales)
FROM Store_Information
GROUP BY store_name
================================================================================
SQL > SQL Befehle > Having
http://sql.1keydata.com/de/sql-having.php

Example:
SELECT "Spalten_Name1", SUM("Spalten_Name2")
FROM "Tabellen_Name"
GROUP BY "Spalten_Name1"
HAVING (arithmetische Funktionsbedingung)

SELECT store_name, SUM(sales)
FROM Store_Information
GROUP BY store_name
HAVING SUM(sales) > 1500
================================================================================
SQL > SQL Befehle > Alias

Example:
SELECT "Tabellen_Alias"."Spalten_Name1" "Spalten_Alias"
FROM "Tabellen_Name" "Tabellen_Alias"

SELECT A1.store_name Store, SUM(A1.Sales) "Total Sales"
FROM Store_Information A1
GROUP BY A1.store_name
================================================================================
SQL > SQL Befehle > Join

Example:
Tabelle Store_Information
store_name  Sales Date
Los Angeles 1500€ 05.Jan.1999
San Diego    250€ 07.Jan.1999
Los Angeles  300€ 08.Jan.1999
Boston       700€ 08.Jan.1999

Tabelle Geography
region_name store_name
East        Boston
East        New York
West        Los Angeles
West        San Diego

SELECT A1.region_name REGION, SUM(A2.Sales) SALES
FROM Geography A1, Store_Information A2
WHERE A1.store_name = A2.store_name
GROUP BY A1.region_name

Result:
REGION    SALES
East    700€
West    2050€

================================================================================
SQL > SQL Befehle > Outer Join

Example:
Tabelle Store_Information
store_name  Sales Date
Los Angeles 1500€ 05.Jan.1999
San Diego    250€ 07.Jan.1999
Los Angeles  300€ 08.Jan.1999
Boston       700€ 08.Jan.1999

Tabelle Geography
region_name store_name
East        Boston
East        New York
West        Los Angeles
West        San Diego

SELECT A1.store_name, SUM(A2.Sales) SALES
FROM Geography A1, Store_Information A2
WHERE A1.store_name = A2.store_name (+)
GROUP BY A1.store_name

Result:
store_name  SALES
Boston       700€
New York     null
Los Angeles 1800€
San Diego    250€

================================================================================
SQL > SQL Befehle > Unterabfrage

Example:
Tabelle Store_Information
store_name  Sales Date
Los Angeles 1500€ 05.Jan.1999
San Diego    250€ 07.Jan.1999
Los Angeles  300€ 08.Jan.1999
Boston       700€ 08.Jan.1999

Tabelle Geography
region_name store_name
East        Boston
East        New York
West        Los Angeles
West        San Diego


SELECT SUM(Sales) FROM Store_Information
WHERE Store_name IN
(SELECT store_name FROM Geography
WHERE region_name = 'West')

SUM(Sales)
2050
================================================================================
SQL > SQL Befehle > Union

Example:

Tabelle Store_Information
store_name  Sales Date
Los Angeles 1500€ 05.Jan.1999
San Diego    250€ 07.Jan.1999
Los Angeles  300€ 08.Jan.1999
Boston       700€ 08.Jan.1999

Tabelle Internet_Sales Date Sales
07.Jan.1999 250€
10.Jan.1999 535€
11.Jan.1999 320€
12.Jan.1999 750€

und wir möchten alle Tage herausfinden, an denen ein Verkaufsvorgang stattgefunden hat.
Dazu verwenden wir folgende SQL-Anweisung:
SELECT Date FROM Store_Information
UNION
SELECT Date FROM Internet_Sales

Result:
Date
05.Jan.1999
07.Jan.1999
08.Jan.1999
10.Jan.1999
11.Jan.1999
12.Jan.1999
================================================================================
SQL > SQL Befehle > Union All

Example:

Tabelle Store_Information
store_name  Sales Date
Los Angeles 1500€ 05.Jan.1999
San Diego    250€ 07.Jan.1999
Los Angeles  300€ 08.Jan.1999
Boston       700€ 08.Jan.1999

Tabelle Internet_Sales Date Sales
07.Jan.1999 250€
10.Jan.1999 535€
11.Jan.1999 320€
12.Jan.1999 750€

und wir möchten alle Tage herausfinden, an denen ein Verkaufsvorgang
stattgefunden hat und ebenso alle Tage, an denen etwas über das Internet verkauft
wurde. Dazu verwenden wir folgende SQL-Anweisung:

SELECT Date FROM Store_Information
UNION ALL
SELECT Date FROM Internet_Sales

Ergebnis:

Date
05.Jan.1999
07.Jan.1999
08.Jan.1999
08.Jan.1999
07.Jan.1999
10.Jan.1999
11.Jan.1999
12.Jan.1999

================================================================================
SQL > SQL Befehle > Intersect

Example:
Example:

Tabelle Store_Information
store_name  Sales Date
Los Angeles 1500€ 05.Jan.1999
San Diego    250€ 07.Jan.1999
Los Angeles  300€ 08.Jan.1999
Boston       700€ 08.Jan.1999

Tabelle Internet_Sales Date Sales
07.Jan.1999 250€
10.Jan.1999 535€
11.Jan.1999 320€
12.Jan.1999 750€

und wir möchten alle Tage herausfinden, an denen sowohl Verkäufe im Warenhaus
als auch über Internet stattgefunden haben.
Dazu verwenden wir folgende SQL-Anweisung:

SELECT Date FROM Store_Information
INTERSECT
SELECT Date FROM Internet_Sales

Ergebnis:

Date
07.Jan.1999


================================================================================
SQL > SQL Befehle > Minus

Example:

Tabelle Store_Information
store_name  Sales Date
Los Angeles 1500€ 05.Jan.1999
San Diego    250€ 07.Jan.1999
Los Angeles  300€ 08.Jan.1999
Boston       700€ 08.Jan.1999

Tabelle Internet_Sales Date Sales
07.Jan.1999 250€
10.Jan.1999 535€
11.Jan.1999 320€
12.Jan.1999 750€

und möchten diesmal alle Tage ermitteln, an denen Verkäufe im Warenhaus,
jedoch keine Internet-Verkäufe stattgefunden haben.
Dazu verwenden wir folgende SQL-Anweisung:

SELECT Date FROM Store_Information
MINUS
SELECT Date FROM Internet_Sales

Ergebnis:

Date
05.Jan.1999
08.Jan.1999

"05.Jan.1999", "07.Jan.1999", und "08.Jan.1999" sind die unterschiedlichen Werte,
die der Befehl "SELECT Date FROM Store_Information" ausgibt.
"07.Jan.1999" wird auch von der zweiten SQL-Anweisung
"SELECT Date FROM Internet_Sales,"
ausgegeben und somit aus dem endgültigen Ergebnissatz ausgeschlossen.

================================================================================
SQL > SQL Befehle > Kaskadieren (http://sql.1keydata.com/de/sql-kaskadieren.php)

Manchmal ist es erforderlich, die Ergebnisse mehrerer verschiedener Felder zu
kombinieren (kaskadieren).

Example:
SQL Server:
SELECT region_name + ' ' + store_name FROM Geography
WHERE store_name = 'Boston';

Ergebnis:
'East Boston'
================================================================================
SQL > SQL Befehle > Substring

Die Teilstring-Funktion in SQL dient dazu, nur einen Teil der gespeicherten
Daten zu erfassen. Diese Funktion wird in den verschiedenen Datenbänken
unterschiedlich aufgerufen:


Example:
Tabelle Geography
region_name store_name
East        Boston
East        New York
West        Los Angeles
West        San Diego

Beispiel 1:

SELECT SUBSTR(store_name, 3)
FROM Geography
WHERE store_name = 'Los Angeles';

Ergebnis:
's Angeles'

Beispiel 2:

SELECT SUBSTR(store_name,2,4)
FROM Geography
WHERE store_name = 'San Diego';

Ergebnis:
'an D'
================================================================================
SQL > SQL Befehle > Trim

Die TRIM-Funktion in SQL dient dazu, ein definiertes Präfix oder Suffix von einer
Zeichenkette abzuschneiden. Am häufigsten werden Leerzeichen entfernt.
Diese Funktion hat in den verschiedenen Datenbänken unterschiedliche Bezeichnungen:

Oracle:     RTRIM(), LTRIM()
SQL Server: RTRIM(), LTRIM()

Example:
SELECT LTRIM('   Sample   ');

Ergebnis:
'Sample   '

Beispiel 3:
SELECT RTRIM('   Sample   ');

Ergebnis:
'   Sample'
================================================================================
SQL > SQL Befehle >...

Example:
SELECT ...
================================================================================
=======  SQL > SQL Syntax ======================================================
================================================================================

SQL > SQL Syntax

Auf dieser Seite ist die SQL-Syntax für alle in diesem Tutorial behandelten SQL-Befehle aufgelistet. Ausführliche Erläuterungen finden Sie in den einzelnen Abschnitten, die Sie durch Klicken des Schlüsselworts aufrufen können.

Diese Seite dient als SQL-Syntaxübersicht. Wir empfehlen Ihnen, diese Seite mit Control-D in Ihre Bookmarks aufzunehmen, damit Sie jederzeit darauf zurückgreifen können.


Select
SELECT "Spalten_Name" FROM "Tabellen_Name"

Distinct
SELECT DISTINCT "Spalten_Name"
FROM "Tabellen_Name"

Where
SELECT "Spalten_Name"
FROM "Tabellen_Name"
WHERE "Bedingung"

And/Or
SELECT "Spalten_Name"
FROM "Tabellen_Name"
WHERE "einfache Bedingung"
{[AND|OR] "einfache Bedingung"}+

In
SELECT "Spalten_Name"
FROM "Tabellen_Name"
WHERE "Spalten_Name" IN ('Wert1', 'Wert2', ...)

Between
SELECT "Spalten_Name"
FROM "Tabellen_Name"
WHERE "Spalten_Name" BETWEEN 'Wert1' AND 'Wert2'

Like
SELECT "Spalten_Name"
FROM "Tabellen_Name"
WHERE "Spalten_Name" LIKE {MUSTER}

Order By
SELECT "Spalten_Name"
FROM "Tabellen_Name"
[WHERE "Bedingung"]
ORDER BY "Spalten_Name" [ASC, DESC]

Count
SELECT COUNT("Spalten_Name")
FROM "Tabellen_Name"

Group By
SELECT "Spalten_Name1", SUM("Spalten_Name2")
FROM "Tabellen_Name"
GROUP BY "Spalten_Name1"

Having
SELECT "Spalten_Name1", SUM("Spalten_Name2")
FROM "Tabellen_Name"
GROUP BY "Spalten_Name1"
HAVING (arithmetische Funktionsbedingung)

Create Table
CREATE TABLE "Tabellen_Name"
("Spalte1" "Datentyp_für_Spalte1",
"Spalte2" "Datentyp_für_Spalte2",
... )

Drop Table
DROP TABLE "Tabellen_Name"

Truncate Table
TRUNCATE TABLE "Tabellen_Name"

Insert Into
INSERT INTO "Tabellen_Name" ("Spalte1", "Spalte2", ...)
WertS ("Wert1", "Wert2", ...)

Update
UPDATE "Tabellen_Name"
SET "Spalte1" = [Wert]
WHERE {Bedingung}

Delete From
DELETE FROM "Tabellen_Name"
WHERE {Bedingung}




================================================================================
================================================================================
SQL > Tabellenbearbeitung > Create Table

Tabellen stellen die Grundstruktur für die Speicherung von Daten in der Datenbank dar.
Da der Datenbankanbieter in den meisten Fällen nicht im Voraus wissen kann,
wie Ihre Anforderungen an die Datenspeicherung genau aussehen, ist davon auszugehen,
dass Sie die Tabellen in der Datenbank selbst erzeugen müssen.
Viele Datenbank-Tools erlauben die Erstellung von Tabellen ohne Rückgriff auf SQL,
aber da alle Daten in Tabellen enthalten sind, ist es wichtig,
dass die Syntax für den Befehl CREATE TABLE in diesem Tutorial Berücksichtigung findet.

Bevor wir näher auf die SQL-Syntax für CREATE TABLE eingehen,
sollten wir zunächst verstehen, wie eine Tabelle aufgebaut ist.
Tabellen sind in Zeilen und Spalten aufgeteilt.
Jede Zeile entspricht einem Datenbestandteil und jede Spalte lässt sich als
Entsprechung einer Komponente dieses Datenbestandteils vorstellen.
Bei einer Tabelle für Kundendaten könnten die Spalten beispielsweise Informationen
wie Vorname, Nachname, Straße, Wohnort, Land, Geburtsdatum usw. enthalten.
Bei der Definition einer Tabelle, geben wir dementsprechend die
Spaltenkopfzeilen und die Datentypen für die jeweilige Spalte an.

Was sind nun Datentypen? Im Allgemeinen liegen Daten in verschiedenen Formen und
Formaten vor. Dies kann eine Ganzzahl (wie 1), eine reelle Zahl (wie 0,55),
eine Zeichenkette (wie 'sql'), ein Datums-/Zeitausdruck (wie '2000-JAN-25 03:22:22')
oder sogar ein binäres Format sein. Wenn wir eine Tabelle definieren,
müssen wir für jede Spalte den zugehörigen Datentyp angeben
(z.B. für 'Vorname' den Typ char(50), also einen aus 50 Zeichen bestehenden String).
Dabei ist zu beachten, dass verschiedene relationale Datenbänke unterschiedliche
Datentypen erlauben, weshalb zunächst eine datenbankspezifische Referenz in Anspruch
genommen werden sollte.

Die SQL-Syntax für den Befehl CREATE TABLE sieht folgendermaßen aus:

CREATE TABLE "Tabellen_Name"
("Spalte 1" "Datentyp_für_Spalte_1",
"Spalte 2" "Datentyp_für_Spalte_2",
... )

Zur Erstellung der oben beschriebenen Kundentabelle würden wir also eingeben:

CREATE TABLE customer
(First_Name char(50),
Last_Name char(50),
Address char(50),
City char(50),
Country char(25),
Birth_Date date) ?
================================================================================
SQL > Tabellenbearbeitung > Create View

Ansichten können als virtuelle Tabellen angesehen werden. Allgemein ließe sich
sagen, dass eine Tabelle über einen Satz von Definitionen verfügt und Daten
physikalisch abspeichert. Eine Ansicht verfügt ebenfalls über einen Satz von
Definitionen, die auf einer oder mehreren Tabellen oder anderen Ansichten
aufbauen, speichert die Daten aber nicht physikalisch ab.

Die Syntax für die Erzeugung einer Ansicht sieht folgendermaßen aus:

CREATE VIEW "SICHT_NAME" AS "SQL-Anweisung"

"SQL-Anweisung" kann irgendeine der in diesem Tutorial besprochenen
Anweisungen sein.

Nehmen wir zur Verdeutlichung ein einfaches Beispiel. Dabei gehen wir von
folgender Tabelle aus:

Tabelle Customer
(First_Name char(50),
Last_Name char(50),
Address char(50),
City char(50),
Country char(25),
Birth_Date date)



Wir möchten nun eine Ansicht mit der Bezeichnung V_Customer erzeugen, die nur
die Spalten Vorname, Nachname und Land dieser Tabelle enthält. Dazu geben wir
ein:

CREATE VIEW V_Customer
AS SELECT First_Name, Last_Name, Country
FROM Customer

Wir haben nun eine Ansicht V_Customer mit folgender Struktur:

Ansicht V_Customer
(First_Name char(50),
Last_Name char(50),
Country char(25))


Es ist auch möglich, mit einer Ansicht zwei Tabellen zu kombinieren. In diesem
Fall haben die Anwender statt zwei Tabellen nur eine Ansicht vor sich, was die
SQL-Anweisung deutlich einfacher macht. Nehmen wir an, es liegen die folgenden
zwei Tabellen vor,

Tabelle Store_Information
store_name Sales Date
Los Angeles 1500€ 05.Jan.1999
San Diego 250€ 07.Jan.1999
Los Angeles 300€ 08.Jan.1999
Boston 700€ 08.Jan.1999


Tabelle Geography region_name store_name
East Boston
East New York
West Los Angeles
West San Diego

und wir möchten eine Ansicht erstellen, die den Umsatz nach Regionen zeigt.
Dazu würden wir folgende SQL-Anweisung verwenden:

CREATE VIEW V_REGION_SALES
AS SELECT A1.region_name REGION, SUM(A2.Sales) SALES
FROM Geography A1, Store_Information A2
WHERE A1.store_name = A2.store_name
GROUP BY A1.region_name

Damit definieren wir eine Ansicht V_REGION_SALES, die Umsätze anhand von
Regionsdatensätzen abspeichert. Um den Inhalt dieser Ansicht herauszufinden,
geben wir ein:

SELECT * FROM V_REGION_SALES

Ergebnis:

REGION SALES
East 700€
West 2050€
================================================================================
SQL > Tabellenbearbeitung > Create Index

Mit Indizes lassen sich Daten aus Tabellen schneller aufrufen. Nehmen wir zur
Verdeutlichung ein einfaches Beispiel: Wir möchten uns in einem Buch über
Gartenbau über den Anbau von Paprika informieren. Anstatt das Buch von Anfang
an zu lesen, bis wir auf einen Abschnitt über Paprika stoßen, empfiehlt es
sich, im Index am Ende des Buchs nachzuschauen, auf welchen Seiten
Informationen über Paprika zu finden sind und dann diese Seiten aufzuschlagen.
Dies spart viel Zeit und ist die bei weitem effektivste Methode zum Auffinden
der benötigten Informationen.

Das gleiche Prinzip lässt sich auch auf Datenbanktabellen anwenden. Ohne Index
liest das Datenbanksystem die gesamte Tabelle aus (dieser Vorgang wird als
„Tabellenscan“ bezeichnet), um die gewünschten Informationen aufzufinden. Mit
dem richtigen Index kann das Datenbanksystem zunächst den Index nach dem
Speicherort der Daten durchsuchen und die benötigten Daten dann direkt an
diesem Ort aufrufen. Dies spart viel Zeit.

Es ist daher in vielen Fällen empfehlenswert, Indizes für Tabellen anzulegen.
Ein Index kann eine oder mehrere Spalten umfassen. Die allgemeine Syntax zur
Erstellung eines Index sieht folgendermaßen aus:

CREATE INDEX "INDEX_NAME" ON "TABELLEN_NAME" (SPALTEN_NAME)

Gehen wir von folgender Tabelle aus:


Tabelle Customer
(First_Name char(50),
Last_Name char(50),
Address char(50),
City char(50),
Country char(25),
Birth_Date date)

Um einen Index für die Spalte Nachname zu erzeugen, würden wir eingeben:

CREATE INDEX IDX_CUSTOMER_LAST_NAME
on CUSTOMER (Last_Name)

Um einen Index für die beiden Spalten Wohnort und Land zu erstellen, würden
wir eingeben:

CREATE INDEX IDX_CUSTOMER_LOCATION
on CUSTOMER (City, Country)

Es gibt keine strikten Regeln für die Index-Benennung. Im Allgemeinen wird ein
Präfix wie "IDX_" vor den Indexnamen gesetzt, um eine Verwechslung mit anderen
Datenbankobjekten zu vermeiden. Außerdem empfiehlt es sich, anzugeben, für
welche Tabelle und welche Spalte(n) der Index verwendet wird.

Beachten Sie bitte, dass sich die genaue Syntax für den Befehl CREATE INDEX je
nach Datenbank unterscheiden kann. Präzise Angaben finden Sie im
Referenzhandbuch Ihrer Datenbank. ?
================================================================================
SQL > Tabellenbearbeitung > Alter Table

Nach der Erstellung einer Tabelle in der Datenbank gibt es viele Anlässe für die Änderung der Struktur dieser Tabelle. Typische Vorgänge sind dabei:

Spalten hinzufügen
Spalten löschen
Spaltennamen ändern
Datentyp einer Spalte ändern
Beachten Sie bitte, dass es sich hierbei nicht um eine vollständige Liste handelt. Der Befehl ALTER TABLE wird auch bei anderer Gelegenheit verwendet, beispielsweise zum Ändern der Primärschlüsseldefinition.

Die SQL-Syntax für den Befehl ALTER TABLE sieht folgendermaßen aus:

ALTER TABLE "Tabellen_Name"
[Alter Spezifikation]

[Alter Spezifikation] hängt von der Art der gewünschten Änderung ab. Für die oben aufgeführten Anwendungszwecke lauten die entsprechenden Anweisungen:

Spalte hinzufügen: ADD "Spalte 1" "Datentyp für Spalte 1"
Spalte löschen: DROP "Spalte 1"
Spaltenname ändern: CHANGE "alter Spaltenname" "neuer Spaltenname" "Datentyp
für neuen Spaltennamen" Datentyp einer Spalte ändern: MODIFY "Spalte 1" "neuer
Datentyp"

Es folgen nun Beispiele für die einzelnen Vorgänge, unter Verwendung der im
Abschnitt CREATE TABLE erzeugten "Kunden"-Tabelle.

Tabelle customer
Spalten Name Datentyp
First_Name char(50)
Last_Name char(50)
Address char(50)
City char(50)
Country char(25)
Birth_Date date


Zunächst fügen wir eine Spalte "Geschlecht" zu dieser Tabelle hinzu. Dazu geben wir ein:

ALTER table customer add Gender char(1)

Resultierende Tabellenstruktur:

Tabelle customer
Spalten Name Datentyp
First_Name char(50)
Last_Name char(50)
Address char(50)
City char(50)
Country char(25)
Birth_Date date
Gender char(1)


Als nächstes benennen wir die Spalte "Address" in "Addr" um. Dazu geben wir ein:

ALTER table customer change Address Addr char(50)

Resultierende Tabellenstruktur:

Tabelle customer
Spalten Name Datentyp
First_Name char(50)
Last_Name char(50)
Addr char(50)
City char(50)
Country char(25)
Birth_Date date
Gender char(1)


Dann ändern wir den Datentyp der Spalte "Addr" zu char(30). Dazu geben wir ein:

ALTER table customer modify Addr char(30)

Resultierende Tabellenstruktur:

Tabelle customer
Spalten Name Datentyp
First_Name char(50)
Last_Name char(50)
Addr char(30)
City char(50)
Country char(25)
Birth_Date date
Gender char(1)


Schließlich löschen wir die Spalte "Gender" wieder. Dazu geben wir ein:

ALTER table customer drop Gender

Resultierende Tabellenstruktur:

Tabelle customer
Spalten Name Datentyp
First_Name char(50)
Last_Name char(50)
Addr char(30)
City char(50)
Country char(25)
Birth_Date date
================================================================================
SQL > Tabellenbearbeitung > Primärschlüssels

Ein Primärschlüssel dient der eindeutigen Identifizierung der einzelnen Zeilen
in einer Tabelle. Er kann entweder Teil des eigentlichen Datensatzes oder ein
künstliches Feld sein (das mit dem Datensatz nichts zu tun hat). Ein
Primärschlüssel kann aus einem oder mehreren Feldern einer Tabelle bestehen.
Primärschlüssel, die aus mehreren Attributen bestehen, werden als
zusammengesetzte Schlüssel bezeichnet.

Primärschlüssel können entweder bei der Erstellung der Tabelle (mit CREATE
TABLE) oder bei der Änderung der vorhandenen Tabellenstruktur (mit ALTER TABLE)
 definiert werden.

Es folgen Beispiele für die Definition eines Primärschlüssels während der
Erzeugung einer Tabelle:

MySQL:
CREATE TABLE Customer
(SID integer,
Last_Name varchar(30),
First_Name varchar(30),
PRIMARY KEY (SID));

Oracle:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));

SQL Server:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));

Es folgen Beispiele für die Definition eines Primärschlüssels während der
Änderung einer Tabelle:

MySQL:
ALTER TABLE Customer ADD PRIMARY KEY (SID);

Oracle:
ALTER TABLE Customer ADD PRIMARY KEY (SID);

SQL Server:
ALTER TABLE Customer ADD PRIMARY KEY (SID);

Hinweis: Vor Verwendung des Befehls ALTER TABLE zur Hinzufügung eines
Primärschlüssels müssen Sie sicherstellen, dass das entsprechende Feld als
'NOT NULL' definiert ist, d.h. NULL ist kein akzeptabler Wert für das Feld. ?
================================================================================
SQL > Tabellenbearbeitung > Fremdschlüssels


Ein Fremdschlüssel ist ein Feld (oder mehrere Felder), das auf den
Primärschlüssel einer anderen Tabelle verweist. Zweck des Fremdschlüssels ist
es, die referentielle Integrität der Daten sicherzustellen. Mit anderen Worten,
 es sind nur Werte zulässig, die auch für die Datenbank vorgesehen sind.

Nehmen wir zum Beispiel an, es liegen zwei Tabellen vor, eine CUSTOMER-Tabelle
mit allen CUSTOMERdaten und eine ORDERS-Tabelle mit allen CUSTOMERaufträgen.
Die Bedingung lautet nun, dass alle Aufträge einem bereits in der
CUSTOMER-Tabelle verzeichneten CUSTOMER zugewiesen sein müssen. In diesem Fall
platzieren wir einen Fremdschlüssel in die ORDERS-Tabelle und setzen ihn in
Bezug zum Primärschlüssel der CUSTOMER-Tabelle. Auf diese Weise ist
sichergestellt, dass alle Bestellungen in der ORDERS-Tabelle einem CUSTOMER in
der CUSTOMER-Tabelle zugeordnet sind. Mit anderen Worten, die ORDERS-Tabelle
kann keine Daten zu einem CUSTOMER enthalten, der nicht in der
CUSTOMER-Tabelle aufgeführt ist.

Die beiden Tabellen sind wie folgt strukturiert:

Tabelle CUSTOMER Spalten Name Merkmal
SID Primärschlüssels
Last_Name
First_Name


Tabelle ORDERS Spalten Name Merkmal
Order_ID Primärschlüssels
Order_Date
Customer_SID Fremdschlüssels
Amount


Im oben stehenden Beispiel ist die Spalte Customer_SID in der ORDERS-Tabelle
ein Fremdschlüssel, der auf die SID-Spalte der CUSTOMER-Tabelle verweist.

Es folgen Beispiele für die Definition des Fremdschlüssels während der
Erzeugung der ORDERS-Tabelle:

MySQL:
CREATE TABLE ORDERS
(Order_ID integer,
Order_Date date,
Customer_SID integer,
Amount double,
Primary Key (Order_ID),
Foreign Key (Customer_SID) references CUSTOMER(SID));

Oracle:
CREATE TABLE ORDERS
(Order_ID integer primary key,
Order_Date date,
Customer_SID integer references CUSTOMER(SID),
Amount double);

SQL Server:
CREATE TABLE ORDERS
(Order_ID integer primary key,
Order_Date datetime,
Customer_SID integer references CUSTOMER(SID),
Amount double);

Es folgen Beispiele für die Definition eines Fremdschlüssels durch Ändern
einer Tabelle: Dies setzt voraus, dass die ORDERS-Tabelle bereits erzeugt ist
und der Fremdschlüssel noch nicht eingefügt wurde:

MySQL:
ALTER TABLE ORDERS
ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(SID);

Oracle:
ALTER TABLE ORDERS
ADD (CONSTRAINT fk_orders1) FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(SID);

SQL Server:
ALTER TABLE ORDERS
ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(SID); ?
================================================================================
SQL > Tabellenbearbeitung > Drop Table

Manchmal ist es wünschenswert, eine Tabelle aus welchem Grund auch immer aus
der Datenbank zu löschen. Wäre dies nicht möglich, würde die Verwaltung der
Datenbank für die Administratoren nach einiger Zeit unnötig verkompliziert.
Zum Glück gibt es mit DROP TABLE einen entsprechenden SQl-Befehl. Die Syntax
für DROP TABLE lautet:

DROP TABLE "Tabellen_Name"

Um die im Abschnitt CREATE TABLE erzeugte Kundentabelle zu entfernen, würden
wir also einfach eingeben:

DROP TABLE customer.
================================================================================
SQL > Tabellenbearbeitung > Truncate Table

Manchmal ist es wünschenswert, alle Daten in einer Tabelle zu entfernen. Dies
können wir mit dem Befehl DROP TABLE erreichen, der im letzten Abschnitt
erläutert wurde. Es ist jedoch auch möglich, nur die Daten zu löschen, nicht
jedoch die Tabelle selbst. Diese Funktion erfüllt der Befehl TRUNCATE TABLE.
Die Syntax für TRUNCATE TABLE lautet:

TRUNCATE TABLE "Tabellen_Name"

Um die in SQL CREATE TABLE erzeugte Kundentabelle zu leeren, würden wir also
einfach eingeben:

TRUNCATE TABLE customer.
================================================================================
SQL > Tabellenbearbeitung > Insert Into

In den vorhergehenden Abschnitten haben wir uns mit dem Aufrufen von Daten aus
Tabellen beschäftigt. Wie gelangen diese Datenzeilen aber ursprünglich in die
Tabellen? Um diese Frage geht es in den nächsten Abschnitten, die die
Anweisungen INSERT und UPDATE behandeln.

In SQL gibt es im Wesentlichen zwei Methoden zum Einfügen (INSERT) von Daten
in eine Tabelle: Bei der einen wird jeweils eine Zeile eingefügt und bei der
anderen mehrere gleichzeitig. Sehen wir uns zunächst den Befehl zum Einfügen
(INSERT) einzelner Datenzeilen an.

Die Syntax für die entsprechende Funktion sieht folgendermaßen aus:


INSERT INTO "Tabellen_Name" ("Spalte1", "Spalte2", ...)
VALUES ("Wert1", "Wert2", ...)

Nehmen wir an, uns liegt eine Tabelle mit der folgenden Struktur vor,

Tabelle Store_Information
Spalte Name Datentyp
store_name char(50)
Sales float
Date datetime

und wir möchten nun eine weitere Zeile mit den Umsatzdaten für Los Angeles am
10. Januar 1999 in die Tabelle einfügen. An diesem Tag erzielte das
entsprechende Warenhaus einen Umsatz von € 900. Wir verwenden dazu das
folgende SQL-Skript:

INSERT INTO Store_Information (store_name, Sales, Date)
VALUES ('Los Angeles', 900, '10.Jan.1999')

Mit dem zweiten Typ von INSERT INTO können wir mehrere Zeilen in eine Tabelle
einfügen. Im Gegensatz zum vorhergehenden Beispiel, bei dem wir eine einzelne
Zeile durch Angabe der Werte für alle Spalten eingefügt haben, verwenden wir
nunmehr eine SELECT-Anweisung, um die einzufügenden Daten festzulegen. Mit der
Vermutung, dass dies die Verwendung von Daten aus einer anderen Tabelle
impliziert, liegen Sie richtig. Die Syntax sieht folgendermaßen aus:

INSERT INTO "Tabellen_Name" ("Spalte1", "Spalte2", ...)
SELECT "Spalte3", "Spalte4", ...
FROM "Tabellen_Name2"

Beachten Sie, dass es sich hierbei um die einfachste Form handelt. Die
komplette Anweisung kann durchaus WHERE-, GROUP BY-, und HAVING-Klauseln sowie
Tabellen-Joins und Aliasse enthalten.

Wenn wir zum Beispiel eine Tabelle Store_Information wünschen, in der die
Umsatzdaten für das Jahr 1998 gesammelt werden und bereits bekannt ist, dass
sich die Quelldaten in der Tabelle Sales_Information befinden, geben wir
Folgendes ein:

INSERT INTO Store_Information (store_name, Sales, Date)
SELECT store_name, Sales, Date
FROM Sales_Information
WHERE Year(Date) = 1998

Zum Abrufen der Jahresdaten aus einem Datum wurde hier die SQL Server-Syntax
verwendet. Andere relationale Datenbanken haben eine andere Syntax. In Oracle
würden wir beispielsweise to_char(date,'yyyy')=1998 eingeben.
================================================================================
SQL > Tabellenbearbeitung > Update


In bestimmten Fällen kann es erforderlich sein, bereits vorhandene Daten zu
aktualisieren. Dies können wir mit dem Befehl UPDATE tun. Die entsprechende
Syntax lautet:

UPDATE "Tabellen_Name"
SET "Spalte1" = [Wert]
WHERE {Bedingung}

Nehmen wir zum Beispiel an, dass folgende Tabelle vorliegt,

Tabelle Store_Information
store_name Sales Date
Los Angeles 1500€ 05.Jan.1999
San Diego 250€ 07.Jan.1999
Los Angeles 300€ 08.Jan.1999
Boston 700€ 08.Jan.1999


und wir stellen nun fest, dass sich der Umsatz für Los Angeles am 08.01.1999
anstatt auf 300 € auf 500 € belaufen hat, so dass der entsprechende Eintrag
aktualisiert werden muss. Dazu verwenden wir folgende SQL-Anweisung:

UPDATE Store_Information
SET Sales = 500
WHERE store_name = "Los Angeles"
AND Date = "08.Jan.1999"

Damit ergibt sich folgende Tabelle:

Tabelle Store_Information
store_name Sales Date
Los Angeles 1500€ 05.Jan.1999
San Diego 250€ 07.Jan.1999
Los Angeles 500€ 08.Jan.1999
Boston 700€ 08.Jan.1999


In diesem Fall erfüllt nur eine Zeile die Bedingung in der WHERE-Klausel. Wenn
mehrere Zeilen diese Bedingung erfüllen, werden alle diese Zeilen aktualisiert.

Es ist auch möglich, mit dem Befehl UPDATE mehrere Spalten gleichzeitig zu
aktualisieren. In diesem Fall würde die Syntax folgendermaßen aussehen:

UPDATE "Tabellen_Name"
SET Spalte1 = [Wert1], Spalte2 = [Wert2]
WHERE {Bedingung} ?
================================================================================
SQL > Tabellenbearbeitung > Delete From

Manchmal ist es wünschenswert, Datensätze aus einer Tabelle zu entfernen. Dies
können wir mit dem Befehl DELETE FROM erreichen. Die entsprechende Syntax
lautet:

DELETE FROM "Tabellen_Name"
WHERE {Bedingung}

Am einfachsten lässt sich dies mit einem Beispiel verdeutlichen.
Nehmen wir an, dass folgende Tabelle vorliegt,

Tabelle Store_Information
store_name Sales Date
Los Angeles 1500€ 05.Jan.1999
San Diego 250€ 07.Jan.1999
Los Angeles 300€ 08.Jan.1999
Boston 700€ 08.Jan.1999


und wir möchten alle Daten zu Los Angeles aus dieser Tabelle entfernen. Dazu
verwenden wir folgende SQL-Anweisung:

DELETE FROM Store_Information
WHERE store_name = "Los Angeles"

Der Tabelleninhalt sieht dann wie folgt aus:

Tabelle Store_Information
store_name Sales Date
San Diego €250 Jan-07-1999
Boston €700 Jan-08-1999
================================================================================
#New 12.12.2014 13:15
SELECT P.*
FROM Projekte P
WHERE EXISTS (SELECT 1
               FROM ProjektStatus
               WHERE StatusNummer = 5 AND
                     ProjektId = P.Id)

================================================================================
#New 03.05.2019 / J.Fes Example convert Datetime
set @para_plast_mod_date_min = Convert(datetime,'2019-05-02 06:56:00',120)
set @para_plast_rel_date_min = Convert(datetime,'2019-05-02 06:56:00',120)
