Tabellen verknüpfen: Joins

Ähnliche Dokumente
Abfragen (Queries, Subqueries)

SQL als Zugriffssprache

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

Es geht also im die SQL Data Manipulation Language.

Einführung in SQL. Sprachumfang: Indizes. Datensätzen. Zugriffsrechten

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort 13

Labor 3 - Datenbank mit MySQL

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Inhaltsverzeichnis. Vorwort Kapitel 1 Einleitung... 15

Einführung in SQL. 1. Grundlagen SQL. Structured Query Language. Viele Dialekte. Unterteilung: i. DDL (Data Definition Language)

Datenbanksysteme Kapitel 5: SQL Data Manipulation Language

Wiederholung VU Datenmodellierung

3 Query Language (QL) Einfachste Abfrage Ordnen Gruppieren... 7

Aufgabe 1: Integrität

SQL Tutorial. SQL - Tutorial SS 06. Hubert Baumgartner. INSO - Industrial Software

IV. Datenbankmanagement

SQL. SQL SELECT Anweisung SQL-SELECT SQL-SELECT

SQL. Komplexe Abfragen. SQL-Komplexe Abfragen. SQL-Komplexe Abfragen. Komplexe Abfragen verknüpfen mehrere Tabellen miteinander.

Lösungen der Übungsaufgaben von Kapitel 10

Inhaltsverzeichnis. jetzt lerne ich

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

ACCESS SQL ACCESS SQL

Datenbanken SQL. Insert, Update, Delete, Drop. Krebs

Bibliografische Informationen digitalisiert durch

Microsoft Access 2010 SQL nutzen

Gregor Kuhlmann Friedrich Müllmerstadt. MySQL. Der Schlüssel zu Datenbanken-Design und -Programmierung. c 3 E. i- O Rowohlt Taschenbuch Verlag

SQL structured query language

Daten-Definitionssprache (DDL) Bisher: Realwelt -> ERM -> Relationen-Modell -> normalisiertes Relationen-Modell. Jetzt: -> Formulierung in DDL

Introduction to Data and Knowledge Engineering. 6. Übung SQL

Datenbanksysteme Teil 6 MySQL DML Die SELECT-Anweisung. Stefan Maihack Dipl. Ing. (FH) Datum:

Sructred Query Language

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

SQL-Befehlsliste. Vereinbarung über die Schreibweise

SQL. Ziele. Grundlagen von SQL. Beziehung zur relationalen Algebra SELECT, FROM, WHERE. Joins ORDER BY. Aggregatfunktionen. dbis.

[1] DBS-exercice

Views in SQL. 2 Anlegen und Verwenden von Views 2

Marcus Throll, Oliver Bartosch. Einstieg in SQL. Verstehen, einsetzen, nachschlagen. Galileo Press

105.3 SQL-Datenverwaltung

Datenbanken. Zusammenfassung. Datenbanksysteme

Datumsangaben, enthält mindestens Jahr, Monat, Tag

Datenbank Grundlagen. Performanceuntersuchungen

SQL-Befehlsliste. Vereinbarung über die Schreibweise

Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

ARBEITSBLATT ZUR SQL-BEFEHLEN

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #4. SQL (Teil 2)

Details zu den Ausdrücken nach FROM, WHERE, GROUP BY und HAVING finden Sie in den Abschnitten über JOIN, WHERE und GROUP BY.

Unterabfragen (Subqueries)

SQL - Datenbankdesign - Aufbau

Datenbanksysteme I. Klausur zum Praktikum. Mehrere Professoren prüfen mit genau einem Beisitzer genau einen Studenten.

Die SQL-Syntax für den Befehl CREATE TABLE sieht folgendermassen aus:

1 Hartmann Anna Cäcilienstr Köln (0221) Behrens-Hoffmeister Heidi Lindenweg Köln (0221)

1. Einleitung. SQL-Abfragen. 3. Das ERM der Übungsdatenbank. 2. Grundstruktur von SQL-Abfragen

SQL: Weitere Funktionen

- Welche Beziehungstypen werden von ACCESS unterstützt? ACCESS unterstützt die Beziehungen + 1:1 + 1:n bzw. 1:cn + m:n

Datenbanksysteme Kapitel 5: SQL Data Manipulation Language

SQL. Fortgeschrittene Konzepte Auszug

2) Nennen Sie die Namen der 3 Ebenen des 3-Ebenen-Modells, und geben Sie an, was in jeder Ebene dargestellt wird.

Einführung in SQL Datenbanken bearbeiten

Datenbanksysteme Teil 7 MySQL DML Die SELECT-Anweisung Mengenoperationen & Joins. Stefan Maihack Dipl. Ing. (FH) Datum:

Aufbau des SELECT-Befehls. Im Folgenden werden zunächst Abfragen aus einer Tabelle vorgenommen.

SQL ist eine relational vollständige Datenbanksprache.

Structured Query Language (SQL) 1

SQL,Teil 2: SELECT. W. Spiegel. Übersicht SELECT. Mehrfache Werte vermeiden: SELECT DISTINCT. Ausgabe ordnen: ORDER BY. Projektion.

SQL. Abfragesprache Datenmanipulation - DML

SELECT dient dazu, aus einer vorhandenen Datenbank bestimmte Spalten und Zeilen auszugeben es handelt sich also um eine Auswahlabfrage.

1.1 Datenbanken Tabellen SQL und die Befehlseingabe Beispieldatenbank 36

Relationentheorie grundlegende Elemente

Übungsaufgaben mit Lösungen

Prof. Dr. Bernd Blümel Prof. Dr. Volker Klingspor. Datenbanken und SQL

10 SQL-Basics: Erweiterte Abfragen mit SELECT Im Mittelpunkt dieses Kapitels steht nicht nur die einfache Auswahl von Spalten, sondern auch die

Datenmanipulation in SQL. Select Anweisung

4. Objektrelationales Typsystem Kollektionstypen. Nested Table

select DISTINCT Name, ort From Verkauf; selektiert Name und Ort von Tabelle Verkauf - DISTINCT steht dass keine Zeile mehrfach vorkommt

Eine völlig andere Form Abfragen zu erstellen ist, sie mit Hilfe der Datenbankabfragesprache SQL zu gestalten.

Informatik Datenbanken SQL-Einführung

Kapitel 6. Datenmalipulation (DML) d. h. insert, update, delete, select im Relationenmodell (in Oracle)

Abfragen aus mehreren Tabellen (mit join)

Vielen Dank an Dennis Riehle für die Bereitstellung dieser Folien

5.3 Datenänderung/-zugriff mit SQL (DML)

5.8 Bibliotheken für PostgreSQL

6. Sichten, Integrität und Zugriffskontrolle. Vorlesung "Informa=onssysteme" Sommersemester 2015

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Datenbank- und Informationssysteme. Lösungsvorschläge zu Übungsblatt 2. Sommersemester CREATE DOMAIN KennzeichenDomain AS VARCHAR(9);

SQL. Datenmanipulation. Datenmanipulationssprache. Ein neues Tupel hinzufügen. Das INSERT Statement

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #5. SQL (Teil 3)

IBM Informix SQL. Seminarunterlage. Version vom

Web-Technologien. Prof. Dr. rer. nat. Nane Kratzke SQL. Praktische Informatik und betriebliche Informationssysteme

Access Grundkurs. M. Eng. Robert Maaßen

MySQL. MySQL ist ein Datenbanksystem. Es besteht aus einem zentralen Server und aus (mehreren) Clients. Es benutzt einen Dialekt der Sprache SQL.

SQL: Abfragen für einzelne Tabellen

Query Languages (QL) Relationale Abfragesprachen/Relational

SQL. strukturierte Datenbankabfragesprache eine Datenbanksprache zur. Structured Query Language:

Transkript:

SQL2-1 -

Tabellen verknüpfen: Joins Bisher haben wir Tabellen mittels Unterabfragen verknüpft d. h. eine Spalte einer anderen Tabelle kann ein Selektionskriterium liefern. Wie kann man aber eine "echte" Kombination von Datensätzen aus mehreren Tabellen erreichen? Antwort: Mittels Joins! Die Join- Operation liefert Zeilen aus zwei oder mehr Tabellen, die eine gemeinsame Menge von Merkmalen teilen. Es gibt verschiedene Typen von Join- Operationen. - 2 -

Der CROSS JOIN ein erstes Beispiel SELECT * FROM Kunden, Artikel WHERE Kundennr< 3 ; Was ist passiert? Jede Zeile der einen Tabelle wird mit jeder Zeile der anderen Tabelle verknüpft! - 3 -

CROSS JOIN: Regeln Ein CROSS JOIN wird durch die Angabe mehrerer Tabellennamen in der FROM-Klausel realisiert. Der CROSS JOIN verknüpft jede Zeile der ersten Tabelle mit jeder Zeile der zweiten Tabelle. Normalerweise hat ein CROSS JOIN keinen besonderen praktischen Nutzen... - 4 -

Einschränkung der Verknüpfungen Die Anzahl der Verknüpfungen wird sinnvollerweise durch die Angabe von Bedingungen in der WHERE-Klausel erreicht. Die allgemeine Syntax lautet: SELECT Spalte1 [, Spalte2 [,...] ] FROM Tabelle1, Tabelle2 [,...] WHERE Tabelle1. SpalteI = Tabelle2. SpalteJ [ AND... ] [ sonstige_ Bedingungen ] Die erste Tabelle im JOIN wird zuerst ausgewertet. Dies sollte die Basistabelle sein (die die wenigsten Ergebnisse zurückliefert). - 5 -

Beispiel Erstellung einer kleinen Auftragsliste: SELECT Datum, Kunden. Name, Artikel. Name, Anzahl FROM Kunden, Artikel, Auftrag WHERE Kunden. Kundennr= Auftrag. Kundennr AND Artikel. ArtNr= Auftrag. ArtNr ORDER BY Datum ; - 6 -

Beispiel (2) Die Erstellung der Auftragsliste im Detail: - 7 -

Spaltenbezüge in JOINs Durch die Verknüpfung mehrerer Tabellen müssen die Bezüge auf Spaltennamen ggf. qualifiziert werden: Tabelle. Spaltenname Komplexe Abfragen können durch die Vergabe von Aliasnamen für Tabellen vereinfacht werden SELECT Datum, KU. Name, ART. Name, Anzahl FROM Kunden KU, Artikel ART, Auftrag AUF WHERE KU. Kundennr= AUF. Kundennr AND ART. ArtNr= AUF. ArtNr ORDER BY Datum ; - 8 -

JOINs: Regeln Spätestens bei JOINs ist es nicht mehr sinnvoll, alle Spalten zurückzugeben! Insbesondere sind die Spalten, die der Verknüpfung zweier Tabellen dienen, redundant und sollten wenn überhaupt nur einmal ausgegeben werden. Die Spalten in der WHERE- Klausel und in der SELECT- Klausel sind prinzipiell unabhängig! - 9 -

Klassifizierung von JOINs Nach Art der Verknüpfung: Equi- JOIN: Gleichheit der Felder Non- Equi- JOIN: Alle Vergleiche außer Gleichheit Nach Existenz der Verknüpfung: INNER JOIN: Nur Einträge mit bestehenden Verknüpfungen werden angezeigt OUTER JOIN: Es werden auch Einträge zurückgegeben, zu denen keine Verknüpfung besteht - 10 -

INNER JOIN Es werden die Daten aus zwei Tabellen angezeigt, die durch die Bedingung Artikel. ArtNr = Auftrag. ArtNr verknüpft sind. Dies ist eine Art "Standardverknüpfung für relationale Datenbanken sie entspricht der Verknüpfung von Tabellen über Fremdschlüssel... - 11 -

INNER JOIN Für INNER JOINs existiert in den meisten RDBMS alternativ eine spezielle Syntax, die aber (praktisch noch) nicht standardisiert ist. Beispiel: SELECT Spalte1 [, Spalte2 [,...] ] FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1. SpalteI = Tabelle2. SpalteJ [ WHERE sonstige_ Bedingungen ] ; Auch hier können mehr als zwei Tabellen verknüpft werden, das Ganze wird aber unübersichtlicher als in der Standardsyntax... Bei gleichem Spaltennamen kann man statt der ON- Klausel auch die USING- Klausel verwenden: USING Spaltenname - 12 -

NATURAL JOIN Der NATURAL JOIN soll die "natürliche" Verknüpfung zweier Tabellen realisieren. Er ist ein INNER JOIN, bei dem alle Spalten mit gleichem Namen und Datentyp in die JOIN- Bedingung eingebunden sind. SELECT * FROM Tabelle1 NATURAL JOIN Tabelle2... liefert keine doppelten Spalten zurück! - 13 -

OUTER JOIN Beim OUTER JOIN werden im Gegensatz zum INNER JOIN alle Einträge einer Tabelle zurückgegeben (unabhängig von den Verknüpfungen!). Die nicht existenten Felder werden mit NULL gefüllt. Auch hier existieren beide oben angegebenen Syntaxvarianten aber leider nicht in allen RDBMS die gleichen! - 14 -

OUTER JOIN: Syntax SELECT Spalte1 [, Spalte2 [,...] ] FROM Tabelle1 < LEFT RIGHT > JOIN Tabelle2 ON Tabelle1. SpalteI = Tabelle2. SpalteJ [ WHERE sonstige_ Bedingungen ] ; - 15 -

Outer-Join, Beispiel - 16 -

OUTER JOIN: Beispiel Was passiert, wenn man den JOIN umdreht? SELECT Kunden. Name, Artikel. Name, Anzahl FROM Kunden RIGHT JOIN ( Artikel INNER JOIN Auftrag ON Artikel. ArtNr = Auftrag. ArtNr) ON Kunden. Kundennr = Auftrag. Kundennr; - 17 -

JOINs... Damit ist unser Streifzug durch die JOINs im wesentlichen beendet Die bisherigen Beispiele waren aber naturgemäß extrem einfach prinzipiell können JOINs mit allen anderen Syntaxelementen kombiniert werden (wie wir im folgenden sehen werden...) => JOINs sind das Basiselement bei der Arbeit mit relationalen Datenbanken! - 18 -

Mengenoperatoren in SELECT- Anweisungen SQL kennt drei Mengenoperatoren: INTERSECT Schnittmenge zweier Mengen UNION Vereinigung zweier Mengen MINUS Differenz zweier Mengen Mit diesen Operatoren können die Ergebnisse zweier SELECT- Anweisungen verknüpft werden. - 19 -

INTERSECT Syntax: Select- Anweisung1 INTERSECT Select_ Anweisung2 [ ORDER BY Spaltennr1 [, Spaltennr2 [...]] ; - 20 -

INTERSECT: Regeln Die zwei SELECT- Anweisungen dürfen keine ORDER BY- Klausel enthalten. Sie können jedoch das Ergebnis der gesamten INTERSECT- Operation ordnen. Die Anzahl der von den beiden SELECT-Anweisungen zurückgegebenen Spalten muß gleich sein. Die Datentypen der von den beiden SELECT- Anweisungen abgefragten Spalten müssen gleich sein. In der ORDER BY- Klausel müssen die zum Ordnen verwendeten Spalten über Nummern statt Namen angesprochen werden. - 21 -

INTERSECT: Beispiel Sie haben die folgende Tabelle mit Kunden Ihres Hauptkonkurrenten zugespielt bekommen und möchten feststellen, welche Ihrer Kunden auch bei Ihrem Konkurrenten in der Kartei stehen... - 22 -

Intersect Beispiel - 23 -

UNION Syntax: Select- Anweisung1 UNION [ ALL ] Select_ Anweisung2 [ ORDER BY Spaltennr1 [, Spaltennr2 [...]] ; UNION bildet die Vereinigung zweier Mengen UNION ALL gibt doppelte Datensätze zurück Angenommen, Sie wollen die Gesamtanzahl aller verkauften Produkte Ihrer Firma anzeigen. Da aber jede Produktionsstätte (A,B,C), wo die Produkte hergestellt werden. Da Duplikate möglich sind (jede Produktionsstätte kann ja dieselben Produkte erstellen), ist die Verwendung von ALL notwendig: SELECT ProductName, UnitsSold FROM Facts_Divison_A UNION ALL SELECT ProductName, UnitsSold FROM Facts_Divison_B UNION ALL SELECT ProductName, UnitsSold FROM Facts_Divison_C - 24 -

UNION: Regeln Die zwei SELECT- Anweisungen dürfen keine ORDER BY- Klausel enthalten. Sie können jedoch das Ergebnis der gesamten UNION- Operation ordnen. Die Anzahl der von den beiden SELECT-Anweisungen zurückgegebenen Spalten muß gleich sein. Die Datentypen der von den beiden SELECT-Anweisungen abgefragten Spalten müssen gleich sein. In der ORDER BY- Klausel müssen die zum Ordnen verwendeten Spalten über Nummern statt Namen angesprochen werden. - 25 -

UNION: Beispiel Wir wollen die Konkurrenzdaten nutzen, um unsere Marketingabteilung mit neuen Daten zu versorgen... SELECT Name, Strasse, PLZ FROM Kunden UNION SELECT Nachname+", "+ Vorname, Strasse, PLZ FROM Konkurrenzkunden ORDER BY 1 ; - 26 -

MINUS Syntax: Select- Anweisung1 MINUS Select_ Anweisung2 [ ORDER BY Spaltennr1 [, Spaltennr2 [...]] ; MINUS bildet die Differenz zweier Mengen Regeln sind analog zu INTERSECT und UNION - 27 -

MINUS: Beispiel Welche Konkurrenzkunden sind keine Kunden von uns? SELECT Name, Strasse, PLZ FROM Konkurrenzkunden MINUS SELECT Nachname+", "+ Vorname, Strasse, PLZ FROM Kunden ORDER BY 1 ; - 28 -

SQL: Ändern von Daten INSERT Datensätze in eine Tabelle einfügen UPDATE Ändern einzelner Feldinhalte DELETE Datensätze aus einer Tabelle löschen - 29 -

INSERT: Wiederholung Einfügen einzelner Datensätze INSERT INTO Tabellenname [ ( Spalte1 [, Spalte2 [... ] ] ) ] VALUES ( Wert1 [, Wert2 [... ] ] ); Einfügen durch Kopieren aus einer anderen Tabelle: INSERT INTO Zieltabelle [ ( Spalte1 [, Spalte2 [... ] ] ) ] SELECT Spalte1 [, Spalte2 [... ] ] FROM Quelltabelle WHERE Suchbedingung ; - 30 -

UPDATE Mit der UPDATE- Anweisung lassen sich selektiv die Inhalte einzelner Felder ändern. Syntax: UPDATE Tabellenname SET Spaltenname1 = Wert1 [, Spaltenname2 = Wert2 [... ] ] [ WHERE Suchbedingung ] ; Achtung: Ein UPDATE ohne WHERE-Klausel ändert die betreffenden Spalten in allen Datensätzen der Tabelle! - 31 -

UPDATE: Beispiel Der Einkaufspreis für den Komplett- PC ist auf 424 gefallen UPDATE Artikel SET EK= 424 WHERE Name=" Komplett- PC" ; Auf alle Artikel über 500 werden 10% Rabat gegeben: UPDATE Artikel SET Preis= Preis* 0. 9 WHERE Preis> 500 ; - 32 -

UPDATE: Beispiel Um den Nachnamen in einer Personentabelle zu ändern, könnte ein UPDATE Statement wie folgt aussehen: UPDATE tpersonendaten SET Nachname = 'Wille' WHERE SozVersNummer = 4711010100 In diesem Beispiel wird - so die Spalte SozVersNummer ein Primärschlüsselfeld ist - nur dieser eine Datensatz verändert. Wenn mehrere Zeilen das Einschränkungskriterium erfüllen, so wird jede einzelne Zeile aktualisiert. UPDATE tpersonendaten SET Nachname = 'Wille Nun, es fehlt die Einschränkung auf die Zeile, die verändert werden soll, dann gilt das UPDATE für alle Zeilen! Fazit: Vorsicht, immer das UPDATE Statement doppelt kontrollieren! - 33 -

UPDATE... SELECT Auch in einer UPDATE- Anweisung lassen sich (im WHERE- Teil) Unterabfragen verwenden. Syntax: UPDATE Tabellenname SET Spaltenname1 = Wert1 [, Spaltenname2 = Wert2 [... ] ] [ WHERE SpaltennameI Select- Anweisung ] ; - 34 -

Beispiel Alle Artikel, deren Preis unter dem Durchschnitt liegt, sollen um 15 teuerer werden: UPDATE Artikel SET Preis= Preis+ 15 WHERE Preis < ( SELECT AVG (Preis) FROM Artikel) ; - 35 -

DELETE Die DELETE- Anweisung löscht (ohne Rückfrage!) Datensätze aus der Tabelle. Syntax: DELETE FROM Tabellenname WHERE Bedingung ; Anmerkung: Wenn man alle Datensätze löschen will, geht es in Oracle schneller mit TRUNCATE TABLE Tabellenname ; - 36 -

DELETE: Beispiel Die Kunden ohne Ortsangabe sollen wieder aus unserer Datenbank gelöscht werden: DELETE FROM Kunden WHERE Ort="???" ; - 37 -

DELETE: Regeln Beim Einsatz der DELETE- Anweisung sind folgende Punkte zu beachten: DELETE löscht nur komplette Datensätze aus einer Tabelle. Einzelne Felder lassen sich nicht löschen (verwenden Sie dafür UPDATE). Das Löschen von Datensätzen kann zu Problemen mit der referentiellen Integrität in anderen Tabellen führen! DELETE löscht nur Datensätze und nicht die Tabelle selbst (verwenden Sie dafür DROP TABLE). DELETE ohne WHERE- Klausel löscht alle Datensätze!!! - 38 -

DELETE... SELECT Auch innerhalb der DELETE- Anweisung lassen sich Unterabfragen einsetzen. Syntax: DELETE FROM Tabellenname WHERE SpaltennameI Select- Anweisung ; - 39 -

Sichten Sichten sind "virtuelle Tabellen" dienen der Kapselung komplexer Abfragen lassen sich wie jede andere Tabelle verwenden (aber gewisse Einschränkungen bei Updates...) belegen keinen physischen Platz in der Datenbank Syntax: CREATE VIEW Sichtname [ ( Spalte1, Spalte2,... )] AS Select- Statement ; - 40 -

CREATE VIEW ein Beispiel Die einfachste aller Sichten ist die identische Sicht auf eine Tabelle: CREATE VIEW MeineKunden AS SELECT * FROM Kunden ; - 41 -

CREATE VIEW 2. Beispiel Aber auch komplexe Abfragen lassen sich als Sicht kapseln: CREATE VIEW Auftragsliste AS SELECT Datum, Kunden. Name, Artikel. Name, Anzahl FROM Kunden, Artikel, Auftrag WHERE Kunden. Kundennr= Auftrag. Kundennr AND Artikel. ArtNr= Auftrag. ArtNr ; Der Zugriff erfolgt dann wie auf eine gewöhnliche Tabelle: SELECT * FROM Auftragsliste ORDER BY Datum ; - 42 -

Einschränkung von SELECT in Sichten Wenn man bei der Formulierung einer Sicht die SELECT- Anweisung verwendet, sind die folgenden zwei Regeln zu beachten: Der UNION- Operator kann nicht verwendet werden. Die Klausel ORDER BY läßt sich nicht verwenden. Allerdings kann man in einer Sicht mit der Klausel GROUP BY die gleichen Funktionen wie mit der Klausel ORDER BY realisieren. - 43 -

Einsatzfälle von Sichten Mit Sichten lassen sich unter anderem folgende Aufgaben realisieren: Sicherheitsfunktionen für den Benutzer bereitstellen zwischen Einheiten umrechnen ein neues virtuelles Tabellenformat erzeugen die Konstruktion komplexer Abfragen vereinfachen - 44 -

Sichten sind (fast...) Tabellen! Sichten lassen sich prinzipiell (fast) genau wie Tabellen verwenden Man kann sogar Sichten erstellen, die sich auf andere Sichten (statt auf Tabellen) beziehen prinzipiell ist eine beliebige hierarchische Verschachtelung möglich... Aber Vorsicht: Eine solche "Unter- Sicht ist von ihrer "Hauptsicht" abhängig wenn man die Hauptsicht löscht, liefert die Untersicht einen Fehler! - 45 -

Änderung von Daten in Sichten Eine Sicht spiegelt eventuell nur einen Ausschnitt aus einer Gruppe von Tabellen wider daher ist das Modifizieren der Daten in den zugrundeliegenden Tabellen nicht immer möglich. Häufige Einschränkungen sind:z Auf Sichten aus mehreren Tabellen läßt sich die DELETE- Anweisung nicht anwenden. Die INSERT- Anweisung kann man nicht verwenden, wenn nicht alle NOT NULL- Spalten in die Sicht eingeschlossen wurden. alle zu aktualisierenden Datensätze müssen zur selben physikalischen Tabelle gehören. In Sichten mit DISTINCT kann man keine Datensätze aktualisieren oder einfügen. virtuelle Spalten (Spalten, die das Ergebnis eines Ausdrucks oder einer Funktion sind) lassen sich nicht aktualisieren. - 46 -

DROP VIEW Sichten lassen sich auf die für SQL übliche Weise (ohne Rückfrage!) löschen: DROP VIEW Sichtname ; Alle Sichten, die sich auf die gelöschte Sicht beziehen, werden nun ungültig und liefern einen Fehler oder werden ggf. vom Datenbanksystem gelöscht. - 47 -

Miniübung 1 Gegeben sind folgende Tabellen: Person (PNr, Vorname, Nachname, Titel, ANr, KNr) Adresse (ANr, Straße, Postfach, PLZ, Ort) Kommunikation (KNr, Tel, Fax, email) 1. Geben Sie die relevanten Daten zu allen Personen aus. 2. An welcher Adresse wohnt der Inhaber der Telefonnummer 01234/ 56789? - 48 -

Miniübung 2 Gegeben sind folgende Tabellen: Die drei Tabellen aus Miniübung 1 Personal (PSNr, PNr, AbtNr, Chef, Gehalt) Abteilung (AbtNr, Name, Standort) 1. Geben Sie eine Liste der Mitarbeiter aus der Abteilung "Verkauf" mit Telefon- und Faxnummer aus. Bedenken Sie, daß ein Mitarbeiter nicht unbedingt über moderne Kommunikationsmittel verfügen muß... - 49 -

Miniübung 3 (Tabellen aus Miniübungen 1 und 2...) 1. Geben Sie alle Mitarbeiter aus, deren Chef ich bin. 2. Geben Sie für jeden Mitarbeiter das Gehalt an sowie wieviel Mitarbeiter weniger verdienen als er, also z. B. Name Gehalt #weniger Hubert Müller 6500, 00 12-50 -

Miniübung 4 Tabellen aus Miniübungen 1 und 2 sowie Kunden (KdNr, Name, Strasse, PLZ, Ort) Projekt (PkNr, PSNr, KdNr, Thema, Preis) 1. Geben Sie zu jedem Mitarbeiter das Hauptprojekt (mit dem der größte Umsatz gemacht wird) an. - 51 -