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)