Relationale Datenbanken - SQL



- Datenbanken
- SQL
- ERD
- Access


RELATIONALE DATENBANKEN
RELATIONAL DATABASE


bedeutet eine Beziehung zwischen Tabellen.





Attributswert

Relation:
= Beziehung/Zusammenhang zwischen Objekten

Funktion:
= eindeutige Relation

Entität (Entity):
= wenn eine Zeile (=Datensatz) eindeutig identifizierbar ist. z.B.: Buch von Philipp

Entity Type:
= ein Ãœberbegriff z.B.: Buch Rembold

HIERARCHISCHE DATENBANK





keine Verknüpfungen möglich (Information, Struktur streng hierarchisch)

NETZWERKMODELL





Verknüpfung der einzelnen Objekte möglich, Ziel kann jedoch über verschiedene Verknüpfungen erreicht werden.




SQL

Structured (strukturierte
Query Abfrage
Language Sprache)

SQL = normierte Abfragesprache

ISQL (Interactiv SQL):
Abfrage wird eingegeben, Computer gibt das Ergebnis aus.
Nächste Abfrage wird eingegeben, ... usw.

ESQL (Embedded SQL):
hier wird programmiert embedded ... eingebettet
z.B.: im C - Programm wird eine SQL - Anweisung ausgeführt


SQL - Anweisungen unterteilt in 3 Gruppen:

•) DML - data manipulating language (für Datensätze)

select selektieren
update ändern
delete löschen
insert einfügen

•) DDL - data definition language (für Tabellen)

create erstellen
drop löschen (löscht Tabelle samt Inhalt)
alter ändern

•) DCL - data control language (Benutzerrechte)

grant erteilen
revoke entziehen



select was (=Attribut, Attribut, ...)
from woher (=Tabellenname, Tab.name, ...)
where Bedingung


Bsp:

select * (* gibt den ganzen Datensatz aus)
from Schüler ( Tabelle Schüler)
where Alter>15 (es sollen nur die Schüler ausgegeben werden, die älter als 15 sind)








OPERATOREN


<> = <> (!=) <=>=

and or not in between

like is

Negationen: z.B.: not in, not between, is not, ...

Wichtig:
0 ... Ziffer
NULL ... nix

% ... beliebig viele Zeichen
_ ... genau ein Zeichen


Bsp: Name derjenigen, deren Gehalt zwischen 1000 und 2000 liegt.

select ename, sal
from emp
where sal between 1000 and 2000


Bsp: Welche Personen haben den Job CLERK, SALESMAN oder ANALYST.

select ename, job
from emp
where job in ('CLERK', 'SALESMAN', 'ANALYST')


Bsp: Alle Namen, die mit A anfangen.

select ename
from emp
where ename like 'A%'


Bsp: Namen derjenigen, die keine Provision bekommen.

select ename
from emp
where comm is NULL













ORDER BY

Bsp: Ausgabe der Angestelltennummer in der Abteilung 10, sortiert nach Namen.

1 2
select empno, ename
from emp
where deptno=10
order by ename (oder order by 2)


Nach order by können mehrere Kriterien angegeben werden, z.B.: order by No, Gericht

No Gericht
1411 Spaghetti
1411 Spinat

ASC ... ascending (aufsteigend)
DESC ... descending (absteigend)


ÄNDERN VON "ÜBERSCHRIFTEN"

select empno Mitarbeiternr, ename Name
from emp

MITARBEITERNR NAME
7396 SMITH
7499 ALLEN


Mitarbeiternr → MITARBEITERNR
"Mitarbeiternr" → Mitarbeiternr


AUSDRÃœCKE UND FUNKTIONEN


+ - * / Grundrechnungsarten

|| Zusammenhängen von Zeichenfolgen

ABS () Absolutbetrag

SIGN () Vorzeichen

LENGTH () Länge

SUBSTR (, von, Länge) Teilstring von einer Zeichenkette

NVL (, Ersatz) Konvertierung von NULL - Werten NVL ... NULL - value






Bsp: Alle Namen, die an der 3. Stelle ein A haben.

select ename ENAME
from emp BLAKE
where substr (ename, 3, 1)='A' CLARK
ADAMS


Bsp: Ausgabe vom Namen und Gehalt+Provision.

select ename, sal+nvl (comm, 0) ENAME SAL+NVL (COMM, 0) SAL+COMM
from emp SMITH 800
ALLEN 1900 1900
WARD 1750 1750
JONES 2975
MARTIN 2650 2650
.. .
.. .
.. .
NULL wird für diese Berechnung zu 0 konvertiert, um sie dann mit sal zu addieren.


Bsp: Zusammenhängen von Name und Beruf aus der Abteilung 30.

select ename || ' - ' || job "NAME - BERUF" NAME - BERUF
from emp ALLEN - SALESMAN
where deptno=30 WARD - SALESMAN
.
.
.


GRUPPENFUNKTIONEN

I) SUM
Jahresgehalt pro Person?

select sal*12 SAL*12
from emp 9600
.

Jahresgehalt aller.

select sum (sal*12) SUM (SAL*12)
from emp 348300

II) MAX
max ()

III) MIN
min ()

IV) AVG
avg ()

Bei SUM, MAX, MIN und AVG werden NULL - Werte ignoriert.




V) COUNT
a) COUNT (*)
Zählt alle vorhandenen Datensätze.

select count (*) COUNT (*)
from emp 14

b) COUNT ()
Abzählen von Datensätzen ungleich NULL.

select count (mgr) COUNT (MGR)
from emp 13

c) COUNT (distinct )

select count (distinct job) COUNT (DISTINCT JOB)
from emp 5


GROUP BY

Bsp: Durchschnittsgehalt pro Filiale.

select distinct deptno DISTINCT DEPTNO
from emp 10
20
30
select avg (sal) AVG (SAL)
from emp 2916,67
where deptno=10

select avg (sal)
from emp
where deptno=20
.
.
.

einfacher:

select deptno, avg (sal) DEPTNO AVG (SAL)
from emp 10 2916,67
group by deptno 20 2175
30 1566,67


HAVING

Nach der group by - Klausel kann kein where benutzt werden. SQL bietet dafür den Filter having an.

Having definiert eine Bedingung, welche sich auf das Ergebnis der Gruppierung bezieht. Es ist somit möglich, je Gruppe die Entscheidung zu treffen, ob diese in die Ausgabe mit aufgenommen werden soll oder nicht.

In having können Gruppenfunktionen (min, max, ...) benutzt werden, die in where nicht zulässig sind.




JOINS

= Abfrage mehrerer Tabellen

EMP DEPT

empno, ename, deptno, ... ename, deptno, ...


select ...
from emp, dept → KARTESISCHES PRODUKT wird gebildet (= 14*4 Datensätze)

select emp.deptno
from ...
Tabellenname (von der das Attribut angegeben wird)


INNER JOIN

= zur Vermeidung des kartesischen Produkts

select ...
from emp, dept
where emp.deptno = dept.deptno → in diesem Beispiel wären es nur noch 14 Datensätze


OUTER JOIN

hier werden Datensätze miteinbezogen, die in einer anderen Tabelle nicht vorkommen (wird selten benutzt).

select ...
from emp, dept
where emp.deptno (+) = dept.deptno → Filiale 40 hat in der Tabelle EMP keinen entsprechenden Datensatz.
Durch das Anführen von (+), werden bei dieser Tabelle
Datensätze mit dem Wert NULL generiert.

Die Benennung des Joins erfolgt dadurch, ob links (LEFT OUTER JOIN) oder rechts (RIGHT OUTER JOIN)
NULL - Werte angefügt werden (emp.deptno (+) = dept.deptno → LOJ / dept.deptno = emp.deptno (+) → ROJ)


EQUI JOIN

= die Verknüpfung innerhalb einer Tabelle

select ...
from emp E1, emp E2 → E1 und E2 = Synonyme
where E1.deptno = E2.deptno → Verknüpfung mit sich selbst (um z.B. ein Liste aller Mitarbeiter
und deren Vorgesetzten auszugeben)







SUBSELECTS

man darf selects miteinander verschachteln

select ename, job, deptno
from emp
where job = (select job
from emp
where ename = 'JONES')

Ein SUBSELECT kann auch nach group by verwendet werden ( having avg (sal)> (select ...) )

Operatoren die nur ein Ergebnis zurückliefern:

=> <>= <= <> (!=)

Operatoren, bei denen ein subselect mehrere Ergebniszeilen zurückliefert:

any all in = any != all>any < any> all
( in ) ( not in ) (> min ) ( < max ) (> max )


VIEW

= Ansicht, Lupe od. Fenster einer oder mehrerer Tabellen, für vollständige bzw. Teil - Ansichten

In der VIEW sind keine Datensätze; sie besteht nur aus einem select - Statement. Werden in der/den zugehörigen
Tabelle(n) Daten verändert, so ändert sich auch die VIEW. Soll die Originaltabelle geschützt werden oder
soll verhindert werden Daten zu Manipulieren und zu Ändern, so wird eine VIEW angelegt.
Vorteil einer View ist, dass man wichtige Daten die öfters benötigt werden zusmmenfassen kann. Sollen einige Daten für andere Benutzer gesperrt bleiben (z.B.: Gehaltsdaten), so kann dies mittels eines selects erfolgen.

Tabelle A Tabelle B View Z

A1
A2
A3
A4




B1
B2
B3
B4
B5



A1
B2
B4





















create view Z as
select A1, B2, B4
from A, B
where A4=B5

order by darf nicht bei der Erstellung einer View vorkommen.
Wird im select - Statement ein Berechnungsausdruck verwendet, so muss als Attribut ein Name gewählt werden
[ create view X (maxsal, ...) as select max(sal), ... from ... ].

Ansonst wird mit einer View wie mit einer Tabelle gearbeitet: select *
from Z

löschen einer View: drop view Z





TABLE

= Tabelle, in der die Daten gespeichert sind

erstellen einer Tabelle: create table name

löschen einer Tabelle: drop table name


Bsp: Erstellen einer Tabelle mit verschiedenen Attributen

create table allgemein
(MITNR number (4) not null, NAME char (12), DATUM date, GEHALT number (7,2))

Als Attribute gelten:
char (n) Zeichenfolge mit max. Länge n
number (n,d) num. Wert mit gesamt n Stellen und d Nachkommastellen
date Datum

not null bedeutet, dass in dem Feld immer ein Wert stehen muss der ungleich null ist.

Soll eine vorhandene Tabelle erweitert werden, so muss alter verwendet werden:

alter table allgemein
add (PROZENT number (6,2))


Unsere Tabelle sieht jetzt so aus:

ALLGEMEIN

MITNR
NAME
DATUM
GEHALT
PROZENT








Es gibt verschiedene Möglichkeiten, um Datensätze in einer Tabelle anzulegen:


I) insert ... into

insert into allgemein
values (12, 'JAMES', '24 - APR - 93', 1234.76, 3.25)

Eintragen in bestimmte Felder: insert into allgemein (MITNR, NAME, GEHALT) ...

ALLGEMEIN

MITNR
NAME
DATUM
GEHALT
PROZENT
12
JAMES
24.04.93
1234.76
3.25

Bei insert into werden einzelne Datensätze angelegt.




II) insert ... select

insert into allgemein (MITNR, NAME, DATUM, GEHALT)
select empno, ename, hiredate, sal
from emp

Bei insert select werden Datensätze von vorhandenen Tabellen übernommen.
Zu beachten ist die richtige Reihenfolge der Attribute und die Ãœbereinstimmung des Datentyps.

Es können nicht nur neue Datensätze angelegt werden, sondern auch vorhandene nachträglich verändert werden:

update allgemein
set gehalt = 5000
where prozent = 3.25

Wie bei insert select kann auch bei update subselects verwendet werden.
Hier besteht die Möglichkeit, dass nach set ein subselect folgt, um einen variablen Wert einzufügen.


SYNONYME

Synonyme werden verwendet, um eigene Tabellen mit gekürztem Tabellennamen darzustellen, oder
um sie anderen Benutzern zugänglich zu machen (inklusive Berechtigung).

erstellen eines Synonyms: create (public) synonym name public .. allgemein zugänglich
for username.tabellenname

löschen eines Synonyms: drop synonym name


INDEX

In einer SQL - Datenbank werden die einzelnen Datensätze in undefinierter Reihenfolge gespeichert.
Wird ein Datensatz gesucht, so muss die Tabelle sequentiell durchsucht werden. Bei größeren u/o miteinander
verknüpften Tabellen können dadurch längere Wartezeiten entstehen.
Ein Nachteil des Verfahrens ist der Mehraufwand, da neben der Tabelle auch die Indexdatei gewartet werden muss.

erstellen eines Indexes: create (unique) index name on tablename
(columnname, ... asc/desc )

löschen eines Indexes: drop index name


TRANSAKTIONEN

In (ORACLE - ) SQL werden Änderungen temporär ausgeführt. Dies hat den Vorteil, dass z.B. bei einem Stromausfall die Hauptdatenbank nicht verändert wird. Will man nach einer Transaktion auf die Hauptdatenbank
schreiben, so muss COMMIT eingegeben werden. Ist man mit den Änderungen nicht zufrieden, so muss
ROLLBACK eingegeben werden. Dieser Befehl erlaubt es, alle Änderungen bis zum letzten COMMIT zurückzunehmen.


Bis zu dieser Seite ist der Lernstoff im Skript Einführung in SQL v3.0 nachzulesen.



ENTITY RELATIONSHIP DIAGRAMM
ERD

= die graphische Darstellung der Beziehungen zwischen den Tabellen

Die Beziehungen werden im Uhrzeigersinn betrachtet.


Bsp:




I) Lehrer unterrichtet min. 1 und max. mehrere Schüler
II) Schüler wird unterrichtet von min. 1 und max. mehreren Lehrern

Bezeichnung immer singular: der Lehrer, der Schüler, ...


ENTITIES

Beziehungen zwischen Entities:

1 : 1 Schule - Direktor
Ehemann - Ehefrau

1 : m Direktor - Lehrer
Mutter - Kind

m : n Lehrer - Schüler





I) FUNDAMENTALE ENTITÄT

Die Entität hat für sich betrachtet eine Bedeutung, ohne Abhängigkeit von einer anderen Entität.




II) ATTRIBUTIVE ENTITÄT

Sie ergänzt eine fundamentale Entität.




III) ASSOZIATIVE ENTITÄT

Sie beschreibt die Beziehung zwischen den Entitäten (m : n Beziehungen auflösen).




Bsp:



___ ... Primary Key
m : n Beziehungen will man im ERD nicht haben → assoziative Entität

Regel:
- ) m : n Beziehungen müssen im ERD aufgelöst werden



- ) Relationen haben immer einen Namen



SCHLÃœSSEL (key)

I) PRIMÄR SCHLÜSSEL (primary key)

ist ein Schlüssel (Attribut), der den Datensatz eindeutig identifiziert
"not null" ist nicht erlaubt/möglich


II) SEKUNDÄR SCHLÜSSEL (secondary key)

muss den Datensatz nicht mehr eindeutig identifizieren, hilft ihn aber schneller zu finden


III) SCHLÃœSSELKANDITAT (kanditatkey)

wenn mehrere Attribute als Primärschlüssel benutzt werden können


Mitarbeiter Projekt Projektbeteiligung

MNr
MName
MAdr


PNr
PName
...


MNr
PNr
Dauer
4711
4712
...
SCRO
PIFF
...
Ungarg. 69
Ungarg. 69
...


3749
3867
...
Internet
ISDN
...
...


4711
4711
4712
3749
3867
3867
300
20
90

Regel:
- ) primary keys müssen gesucht werden (und werden im ERD immer unterstrichen)




NORMALISIERUNG

= wie ERD, jedoch ohne graphische Darstellung

Die Aufgabe der Normalisierung ist es, Denundanzen (Datenüberfluß) und die damit verbundenen Probleme
aus der Datenbank fernzuhalten.


MNr
MName
MAdr
Ort
PBez

4712
PIFF
...
WIEN
Internet
→ Redundanz, wenn sich z.B. die Madr ändert
4712
PIFF
...
WIEN
ISDN



1. Aussage: Ein Mitarbeiter hat einen Namen
2. Ein Mitarbeiter hat einen Wohnort
3. Ein Mitarbeiter ist in einer Abteilung tätig
4. Ein Mitarbeiter arbeitet an mehreren Produkten
. Ein Mitarbeiter arbeitet eine bestimmte Zeit am Produkt
. Jede Abteilung trägt eine eigene Bezeichnung
. Jedes Produkt trägt eine eigene Bezeichnung
In einer Abteilung sind mehrere Mitarbeiter tätig
An einem Produkt arbeiten mehrere Mitarbeiter
Jeder Mitarbeiter hat eine Mitarbeiternummer
Jede Abteilung hat eine Abteilungsnummer
12. Aussage: Jedes Produkt hat eine Produktnummer

→ Tabelle:

MName
Wohnort
Abt.
Prodt.
Zeit
MNr
PNr
Abtnr
Motti
Zürich
Physik
A, B
60, 40
101
11, 12
1









Regel:
1. Normalform (1. NF)

Kreuzungspunkt zwischen Spalten und Zeile darf max. 1 Wert aufweisen.
Eine Relation ist in 1. NF, wenn jedes Attribut der Relation vom Schlüssel funktional abhängig ist.
D.h. jedes Attribut hat zu jeden Schlüsselwert nur einen bestimmten Attributswert, man sagt auch:
jedes Attribut ist auch atomar (= elementar).
Es kann zu jedem Schlüsselwert genau ein Attributswert genannt werden (kann auch leer sein).

Attribute
Relation R (A1, A2, A3, ...) = Zuordnung

1. NF R (S1, S2, A1, A2, A3, ...)


Maßnahmen für die 1. NF

Schlüsselkanditat finden; bei Kreuzungspunkt nur einen Eintrag


2174 Worte in "deutsch"  als "hilfreich"  bewertet