SQL

Datenbank für die Beispiele:

Item
key1
key2
name

box
key1
key2 
myname

shelf
key1
key2
name

Grundlagen

Groß-/ Kleinschreibung

SQL unterscheidet nicht zwischen Groß und Kleinschreibung. Die Schreibweise  des Befehls SELECT ist für den Interpreter das Selbe wie select. Gleiches gilt für die Bezeichnung von Tabellen- und Spalten Namen.

Primär- und Fremd- Schlüssel

Schlüssel dienen dazu Tabellenzeilen eindeutig identifizierbar zu machen. Der Primäre Schlüssel bezieht sich dabei auf die Zeile selbst. Der Fremdschlüssel stellt die Verbindung einer Tabellenzeile zum Primärschlüssel einer anderen Tabellenzeile in einer anderen Tabelle her.

Beispiel: Tabelle ‚box‘ und Tabelle ‚item‘. Jedes ‚item‘ wird über seinen Fremdschlüssel eindeutig mit der ‚box‘ in die es gehört verknüpft.

Eindeutige Schlüssel 

Eindeutige Schlüssel lassen sich mit Hilfe des Datentypen identity in eine Tabelle einfügen. Das kann man beim anlegen der Tabelle machen, oder später nachholen. Wenn man die letzte Option wählt erhält man eine Fehlermeldung, wenn die gewählte Schlüssel- Spalte Zeilen  mit doppelten Werten enthält:

alter table item alter key1 identity

Wenn man in die Tabelle nun neue Inhalte einfügt:

insert into item (key2,name) values (2,'Hallo')

Dann wird braucht man für ‚key1‘ keinen Wert übergeben, der wird automatisch generiert und zwar so, dass er in der Tabelle nur einmal vorkommt.

Für denn Fall dass man den Schlüssel wieder löschen möchte:

alter table item drop primary key

 

Tabellen- /Spaltenaliase

Tabellennamen müssen sich unterscheiden. Spaltennamen müssen das nicht. Wenn es in einer Abfrage zu Mehrdeudigeiten wegen der Übereinstimmung von Spaltennamen kommen sollen (z.B. beim Verbinden von zwei Tabellen mit join), dann lässt sich diese Mehrdeutigkeit durch die Verwendung des Punkt- Operators beseitigen. In meiner Beispieldatenbank ist ’name‘ in der Tabelle ’shelf‘ und ‚item‘ vergeben:

select i.name,byname,s.name from item .....

Externe Links

Ein gut gemachtes Tutorial findet sich hier: 1keydata.com (letzter Aufruf: 5.5.2016).

Beispiel- Code
Alle Zellen oder bestimmte Zellen einer Tabelle ausgeben:

select * from box

oder :

select key1,key2,bmyname from box

Eine neue Tabelle anlegen

create table newtablename (id int, name char(100), ....)

Erzeugt die neue Tabelle ’newtablename‘. Die Tabellenspaten werden nach dem Tabellennamen, geklammert benannt und typisiert.

Werte in eine bestehende Tabelle schreiben

insert into box (key1,key2,myname) values (1,2,'Verschiedenes')

Setzt in die Tabelle ‚box‘ in die in der ersten Klammer angegebenen Spalten die in der zweiten Klammer angegeben Werte ein.

Die Spaltennamen (erste Klammerung) können auch weggelassen werden, dann aber muss die Anzahl der übergebenen Werte (zweite Klammerung) exakt mit der Anzahl der Tabellenspalten übereinstimmen. Wenn das nicht  so ist, gibt es eine Fehlermeldung.

Wenn man die Spaltennamen angibt, dann kann man, wer hätte es gedacht, die Eingabe eingrenzen. Selbstverständlich muss die Anzahl der übergeben Werte genau mit der Anzahl der Angegebenen Spalten übereinstimmen.

Tabellen ändern

Datentypen von Spalten ändern:

alter table item alter key1 identity

Ändert den Datentypen der Spalte ‚key1‘ in den Typen ‚identity‘ (Die Spalte wird zu Primärschlüssel erklärt).

Tabellen verknüpfen

Zwei Tabellen

Erzeugt wird eine Tabelle mit den Spalten ‚myname‘ und ’name‘ aus den beiden Tabelle ‚box‘ und ‚item‘. Bedingung: ‚key1‘ aus ‚Item‘ muss mit ‚key2‘ aus ‚box‘ übereinstimmen. Die Tabelle wird nach ‚myname‘ aus der Tabelle ‚box‘ sortiert.

select myname,name from box b join item i where i.key2=b.key1 
order by myname

Mehr als zwei Tabellen

Die Beispieldatenbank enthält eine Liste von Gegenständen und die Information in welcher Box, in welchen Regal, in welchem Raum und an welcher Adresse die gelagert sind. Die Verknüpfung vom Gegenstand ‚item‘ bis zur Adresse ‚adress‘ wird über die Schlüsselpaare ‚key1‘ und ‚key2‘ hergestellt. ‚key1‘ zeigt immer auf den eigenen Datensatz. ‚key2‘ zeigt auf den Elternteil mit dem er verknüpft ist:

select zip,city,street,number,r.name,s.name,b.myname,i.name 
from item i
 
 inner join box b on (b.key1=i.key2)
 inner join shelf s on (s.key1=b.key2)
 inner join room r on (r.key1=b.key2)
 inner join adress a on (a.key1=r.key2)
 
order by b.myname

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s