SQL-DDL und SQL-Anfragen. CREATE TABLE Kategorie (Bezeichnung VARCHAR(15) NOT NULL PRIMARY KEY, Klassifikationskriterium VARCHAR(100) NOT NULL )



Ähnliche Dokumente
Integritätsbedingungen / Normalformen- Beispiel: Kontoführung

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

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 27. Nov M. Endres, A. Huhn, T. Preisinger Lösungsblatt 5

Labor 3 - Datenbank mit MySQL

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

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

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

Informatik 12 Datenbanken SQL-Einführung

Datumsangaben, enthält mindestens Jahr, Monat, Tag

Übungsblatt 4 Lösung

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Professionelle Seminare im Bereich MS-Office

Oracle: Abstrakte Datentypen:

7. Übung - Datenbanken

SQL SQL. SQL = Structured Query Language (SEQUEL) IBM San Jose Research Laboratory SYSTEM R. Grundlagen der Datenbanksysteme I

SQL: statische Integrität

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

IV. Datenbankmanagement

4. BEZIEHUNGEN ZWISCHEN TABELLEN

Artikel Schnittstelle über CSV

mit Musterlösungen Prof. Dr. Gerd Stumme, Dipl.-Inform. Christoph Schmitz 11. Juni 2007

Beispiel 1: Filmdatenbank

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

Access Grundlagen für Anwender. Andrea Weikert 1. Ausgabe, 1. Aktualisierung, Juli inkl. zusätzlichem Übungsanhang ACC2010-UA

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Benutzeranleitung Superadmin Tool

Universität Duisburg-Essen Informationssysteme Prof. Dr.-Ing. N. Fuhr. Praktikum Datenbanken / DB2 Woche 8: Trigger, SQL-PL

Neuanlage des Bankzugangs ohne das bestehende Konto zu löschen

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

Vorlesung Dokumentation und Datenbanken Klausur

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

Excel Pivot-Tabellen 2010 effektiv

How to do? Projekte - Zeiterfassung

Datenbanksysteme 2 Frühjahr-/Sommersemester Mai 2014

Das SQL-Schlüsselwort ALL entspricht dem Allquantor der Prädikatenlogik

Klausur Interoperabilität

ecaros2 - Accountmanager

SQL Performance - Tips Do's & Don'ts

Übung Datenbanken in der Praxis. Datenmodifikation mit SQL

Im Original veränderbare Word-Dateien

Klicken Sie auf Weiter und es erscheint folgender Dialog

MySQL Installation. AnPr

Der Kalender im ipad

Berechnungen in Access Teil I

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

OP-LOG

Fallbeispiel: Eintragen einer Behandlung

Access 2000 und MS SQL Server im Teamwork

Ein Ausflug zu ACCESS

1 Mathematische Grundlagen

VERWALTUNG. Postfächer, Autoresponder, Weiterleitungen, Aliases. Bachstraße 47, 3580 Mödring

Hilfe zur Urlaubsplanung und Zeiterfassung

Datenbanken Microsoft Access 2010

Datenbanken für Online Untersuchungen

Sructred Query Language

Anleitung zum Anlegen und Bearbeiten einer News in TYPO3 für

Primzahlen und RSA-Verschlüsselung

Projektbericht Gruppe 12. Datenbanksysteme WS 05/ 06. Gruppe 12. Martin Tintel Tatjana Triebl. Seite 1 von 11

Programmteil Zeiterfassung für Projekt und Mitarbeiter

Anleitung: Einrichtung der Fritz!Box 7272 mit VoIP Telefonanschluss

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

EINFACHES HAUSHALT- KASSABUCH

Kurzanweisung für Google Analytics

2.1 Briefkopf Klicken Sie im Menü Einstellungen auf den Button Briefkopf. Folgendes Formular öffnet sich:

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Österreichische Trachtenjugend

Die Erstellung eigener Strukturprofile

SQL und MySQL. Kristian Köhntopp

Erstellen von x-y-diagrammen in OpenOffice.calc

3. Das Relationale Datenmodell

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

Die Anleitung zur Web Opac App Schritt für Schritt (Stand: )

S TAND N OVEMBE R 2012 HANDBUCH DUDLE.ELK-WUE.DE T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E

AUTOMATISCHE -ARCHIVIERUNG. 10/07/28 BMD Systemhaus GmbH, Steyr Vervielfältigung bedarf der ausdrücklichen Genehmigung durch BMD!

Second Steps in eport 2.0 So ordern Sie Credits und Berichte

Semantische Integrität (auch: Konsistenz) der in einer Datenbank gespeicherten Daten als wichtige Anforderung

Anleitung zum Bestellformular für Visitenkarten UZH

teamsync Kurzanleitung

Mediumwechsel - VR-NetWorld Software

Zimmertypen. Zimmertypen anlegen

Stundenerfassung Version 1.8

1. Erreichen Sie, dass im Feld KdNr (Kunden-Nummer) nur 4-stellige Zahlen eingetragen

Der Zwei-Quadrate-Satz von Fermat

Sage Start Einrichten des Kontenplans Anleitung. Ab Version

Fachhochschule Deggendorf Platzziffer:...

Sichern der persönlichen Daten auf einem Windows Computer

Verbuchung von Zahlungseingängen über das PayPal-Konto

Bedienungsanleitung DHL-Schnittstelle für JTL-WAWI

2 Darstellung von Zahlen und Zeichen

Bauteilattribute als Sachdaten anzeigen

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

IAWWeb PDFManager. - Kurzanleitung -

Wie gestaltet man Online-Umfragen mit SurveyMonkey?

Hilfedatei der Oden$-Börse Stand Juni 2014

Views in SQL. 2 Anlegen und Verwenden von Views 2

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

Transkript:

Technische Universität München WS 2003/04, Fakultät für Informatik Datenbanksysteme I Prof. R. Bayer, Ph.D. Lösungsblatt 6 Dipl.-Inform. Michael Bauer Dr. Gabi Höfling 1.12.2003 SQL-DDL und SQL-Anfragen Aufgabe 1: 1.) Legen Sie die Tabelle Kategorie an. Die Kategoriebezeichnung soll ein String mit wechselnder Länge, maximal jedoch 15 Zeichen sein, das Klassifikationskriterium ein String mit wechselnder Länge (max. 100 Zeichen). Weiterhin soll die Tabelle festlegen, dass das Kategoriekriterium eingegeben werden muss und die Kategoriebezeichnung der Primärschlüssel ist. Fügen Sie dann folgende Tupel in die Tabelle ein: ( U- 18, Alter unter 18 Jahren ),( G-Kunde, Geschäftskunde ), ( U-18, Alter unter 18 Jahren ) CREATE TABLE Kategorie (Bezeichnung VARCHAR(15) NOT NULL PRIMARY KEY, Klassifikationskriterium VARCHAR(100) NOT NULL ) Create Table legt eine neue Tabelle an, die Spalten werden in Klammern dahintergeschrieben. Für jede Spalte werden der Spaltenname, der Typ und eventuell weitere Informationen angegeben. In unserem Fall wird festgelegt, dass die Spalten Werte enthalten müssen und der (Primär-)schlüssel für diese Tabelle entsprechend gesetzt wird. Als Konvention wird im weiteren Lösungsblatt Großschreibung für alle Schlüsselwörter von SQL verwendet, die Identifier sind in gemischter Schreibweise. INSERT INTO Kategorie (Bezeichnung, Klassifikationkriterium) VALUES ( U-18, Alter unter 18 Jahren ), analog G-Kunde und noch einmal U-18. Beim zweiten Einfügen von U-18 wird eine Fehlermeldung zurückgegeben, die besagt, dass gegen die Schlüsselbedingung verstoßen wurde. U-18 existiert ja bereits als Schlüsselwert in der Tabelle. 2.) Legen Sie die Tabelle Konto an. Fügen sie das Tupel (Kontonr, Betrag, Gebühr): (174266,789.50,3) ein, danach das Tupel (Kontonr): (174255). Was passiert im zweiten Fall? CREATE TABLE Konto (Kontonr INTEGER NOT NULL PRIMARY KEY, Betrag NU- MERIC(10,2), Gebühr NUMERIC(10,2)) INSERT INTO Konto (Kontonr, Betrag, Gebühr) VALUES (174266,789.50,3) INSERT INTO Konto (Kontonr) VALUES (174255) Die zweite Zeile enthält NULL-Werte für Betrag und Gebühr. -1-

3.) Legen Sie ähnlich wie oben die Tabelle Kunde an. Hierbei soll gelten, dass die Kategoriebezeichnung eines Kunden (15 Zeichen, variabel) nicht leer sein darf. Um den zusammengesetzten Schlüssel darzustellen, verwenden Sie das Primary Key(Spaltenname, Spaltenname,...)-Konstrukt, das wie eine Spaltendefinition eingetragen wird. Fügen Sie folgende Tupel ein (VN, NN, Gebdatum, Bezeichnung): ( Heinz, Schiller, 05/03/1942, P-Kunde ) und (VN, NN, Gebdatum)( Anette, Müller, 07/25/1953 ). Was passiert im zweiten Fall? CREATE TABLE Kunde ( Bezeichnung VARCHAR(15) NOT NULL, PRIMARY KEY (VN,NN, Gebdat)) Inserts analog zur letzten Aufgabe. Beim zweiten Insert wird eine Fehlermeldung ausgegeben, dass ein benötigter Wert fehlt, da wir Name als NOT NULL definiert haben. Der Datentyp DATE wurde in dieser Aufgabe im amerikanischen Datumsformat gesetzt. Es funktioniert allerdings auch die gewohnte europäische Schreibweise (25.7.1953). In vielen Datenbanksystemen hängt dieses Verhalten von der installierten Sprachversion ab. 4.) Setzen Sie die restlichen Relationen analog zu 1-3 um. CREATE TABLE Festgeldkonto ( Kontonr INTEGER NOT NULL PRIMARY KEY, Faelligkeit DATE, zinssatz NUMERIC(4,2)) CREATE TABLE Girokonto ( Kontonr INTEGER NOT NULL PRIMARY KEY, Dispolimit NUMERIC(10,2), Telebanking CHAR(1)) CREATE TABLE Kontobewegung ( Datum DATE NOT NULL, Kontonr INTEGER NOT NULL, Betrag NUMERIC(10,2), Bewegungsart VARCHAR(15), PRIMARY KEY (Datum, VN, NN, Gebdat, Kontonr)) CREATE TABLE Kontoauszug( Erstelldat DATE NOT NULL PRIMARY KEY, -2-

Kontonr INTEGER, Startdat DATE, Gesamt NUMERIC (10,2) ) CREATE TABLE besitzt ( Kontonr INTEGER NOT NULL, PRIMARY KEY (VN, NN, Gebdat, Kontonr) ) CREATE TABLE listet ( Erstelldat DATE NOT NULL, Kontonr INTEGER NOT NULL, Datum DATE NOT NULL, PRIMARY KEY (Erstelldat, Kontonr, Datum, VN, NN, Gebdat) ) 5.) Oft ist es notwendig, eine Tabelle nachträglich noch zu verändern. Fügen Sie zur Tabelle Kunde eine neue Spalte Wohnort mit Typ VARCHAR(30) hinzu. Um Tabellen nachträglich weitere Spalten hinzuzufügen, gibt es die Anweisung ALTER TABLE Tabellenname ADD COLUMN Spaltendefinition Welche Werte sind in der neuen Spalte? ALTER TABLE KUNDE ADD COLUMN Wohnort VARCHAR(30) Die neue Spalte enthält NULL 6.) Legen Sie einen Index zu den Bezeichnungen in der Tabelle Kunde an. CREATE INDEX bezindex ON Kunde(Bezeichnung) 7.) Versuchen Sie, einen Index auf Bezeichnung in der Tabelle Kategorie anzulegen. Welchen Schluss können Sie aus der Fehlermeldung ziehen? CREATE INDEX katbezindex ON Kategorie (Bezeichnung) Die Fehlermeldung besagt sinngemäß, dass ein Index mit den gleichen Eigenschaften schon existiert. Viele DBMS legen automatisch einen Index auf den Primärschlüssel an, so auch DB2 8.) Löschen Sie den Index aus Aufgabe 5.) wieder. DROP INDEX bezindex Ähnlich können Tabellen gelöscht werden. Aufgabe 2: SQL-Anfragen, Kontobeispiel -3-

Formulieren Sie folgende Anfragen basierend auf dem Schema aus Aufgabe 1 in SQL. 1.) Finden Sie alle Kunden. SELECT * FROM Kunde SELECT * gibt alle Spalten des Ergebnisses zurück. Mit der From-Klausel werden die Quellrelationen bestimmt. 2.) Finden Sie alle Kategoriebezeichnungen. SELECT Bezeichnung FROM Kategorie Projektion erfolgt in SQL durch die Nennung der Spalten nach dem SELECT. 3.) Finden Sie alle Kontobewegungen des Kunden Heinz Schiller (geb. am 3.5.1942), bei denen mehr als 500 Euro bewegt wurden. SELECT * FROM Kontobewegung WHERE VN= Heinz AND NN= Schiller AND Gebdat = 05/03/1942 AND Betrag > 500 Mehrere Prädikate können durch logisches UND und ODER verbunden werden. Der Datentyp DATE wurde in dieser Aufgabe im amerikanischen Datumsformat gesetzt. Es funktioniert allerdings auch die gewohnte europäische Schreibweise (25.7.1953). In vielen Datenbanksystemen hängt dieses Verhalten von der installierten Sprachversion ab. 4.) Finden Sie alle Kunden des Kontos 174266. SELECT Kunde.VN, Kunde.NN FROM Kunde, besitzt WHERE Kunde.VN=besitzt.VN AND Kunde.NN=besitzt.NN AND Kunde.Gebdat=besitzt.Gebdat AND besitzt.kontonr= 174266 Indem die beteiligten Tabellen im FROM und das verbindende Prädikat im WHERE angegeben werden, sind Joins darstellbar. Wenn der Spaltenname über alle beteiligten Tabellen eindeutig ist, muss der Tabellenname nicht angegeben werden, andernfalls ist dies notwendig. 5.) Wieviele Kunden haben mehr als 5000 Euro Guthaben. SELECT count(*) FROM Kunde k, besitzt b, Konto kn WHERE k.vn=b.vn AND k.nn=b.nn AND k.gebdat=b.gebdat AND b.kontonr=kn.kontonr AND kn.betrag > 5000 Mit Hilfe der Aggregatfunktionen kann man Maximum, Minimum, Durchschnitt, Summe oder Anzahl Werte einer Spalte bestimmt werden. Wird bei COUNT ein Stern als Spalte angegeben, so wird die Anzahl Tupel gezählt. Joins können über mehrere beteiligte Tabellen formuliert werden. Zur vereinfachten Eingabe -4-

und zur Unterstützung von Self-Joins können die Tabellen andere Namen erhalten. 6.) Finden Sie das Konto mit dem höchsten Guthaben. SELECT max(betrag) FROM Konto liefert nur den höchsten Betrag. SELECT Kontonr, Betrag FROM Konto WHERE Betrag = (SELECT max(betrag) FROM Konto) liefert das gewünschte Ergebnis. Aufgabe 3: SQL-Anfragen, Bibliotheks-DB Gegeben ist folgende Datenbank, die das Ausleihwesen einer Bibliothek unterstützt: Für Leser werden die wichtigsten Daten erfasst und jedem Leser eine eindeutige Lesernummer zugeordnet. Bei Büchern stellt die ISBN (eine zehnstellige Zahl) einen eindeutigen Schlüssel dar. Sie wird für jede Ausgabe neu vergeben, ändert sich aber für einzelne Exemplare nicht. Falls ein Leser ein Buch ausleiht, wird in der Relation Ausleihe ein Tupel mit der ISBN des Buches, seiner Lesernummer und dem Ausleihdatum angelegt. Wir berücksichtigen noch nicht, dass es mehrere Exemplare eines Buches geben kann, d.h. es wird nur festgehalten, dass für diesen Leser und ein solches Buch eine Ausleihe besteht. LESER (LSNR, NAME,VORNAME, WOHNORT, GEBDATUM) BUCH (ISBN, TITEL, AUTOR, SEITENZAHL, VERLAG, ERSCHEINUNGSJAHR, ANZAHL_EXEMPLARE) VERLAG (VERLAG, VERLAGSORT) AUSLEIHE (ISBN, LSNR, DATUM) PK FK1 Buch ISBN Titel Autor Seitenzahl Erscheinungsjahr Anzahl_Exemplare Verlag PK Verlag Verlag Verlagsort PK Leser LSNR Name Vorname Wohnort Geburtsdatum PK, FK2 PK, FK1 Ausleihe ISBN LSNR Datum Die Grafik stellt die Relationen noch einmal anschaulicher dar. Primärschlüssel und Fremdschlüssel sind als solche markiert, die Pfeile geben die Fremdschlüsselbeziehungen an -5-

Formulieren Sie folgende Anfragen in SQL: 1. Welche Bücher (AUTOR, TITEL) hat der Leser Lemmi Schmöker ausgeliehen? SELECT B.AUTOR, B.TITEL FROM LESER L, AUSLEIHE A, BUCH B WHERE L.NAME = Schmöker AND L.VORNAME = Lemmi AND L.LSNR = A.LSNR AND A.ISBN = B.ISBN Vorgehen: Lesernummer von Lemmi Schmöker finden (aus Leser) Mit der Lesernr die Buchnummern der ausgeliehenen Bücher (Join mit Ausleihe) Buchtitel und Autor bestimmen (durch Join mit Buch) 2. Welche Bücher (AUTOR, TITEL) sind in mehreren verschiedenen Ausgaben vorhanden? SELECT DISTINCT B1.TITEL, B1.AUTOR FROM BUCH B1, BUCH B2 WHERE B1.TITEL = B2.TITEL AND B1.AUTOR = B2.AUTOR AND B1.ISBN <> B2.ISBN Vorgehen: Bücher mit verschiedenen Auflagen haben denselben Titel und Autor, aber unterschiedliche ISBNs. Diese Bücher erhält man am einfachsten durch einen Selfjoin auf Buch. 3. Welche Leser (NAME, VORNAME) haben Bücher ausgeliehen, die an ihrem Wohnort verlegt wurden? SELECT L.NAME, L.VORNAME FROM LESER L, AUSLEIHE A, BUCH B, VERLAG V WHERE L.LSNR = A.LSNR AND A.ISBN = B.ISBN AND B.VERLAG = V.VERLAG AND L.WOHNORT = V.VERLAGSORT Vorgehen: Buchnummern von ausgeliehenen Büchern durch Join zwischen Leser und Ausleihe Bücherdaten durch Join mit Buch Verlagsdaten durch Join mit Verlag (Ringschluss) Selektion auf Tupel mit Wohnort = Verlagsort 4. Welcher Leser (NAME, VORNAME) hat mindestens ein Buch ausgeliehen, das auch Leser Lemmi Schmöker ausgeliehen hat (Lemmi Schmöker soll nicht ausgegeben werden)? SELECT L1.NAME, L1.VORNAME FROM LESER L1, AUSLEIHE A1, AUSLEIHE A2, LESER L2 WHERE L2.VORNAME= Lemmi AND L2.NAME = Schmöker AND A2.LSNR = L2.LSNR AND A1.ISBN = A2.ISBN AND L1.LSNR = A1.LSNR AND L1.LSNR <> L2.LSNR Vorgehen: Lesernummer von Lemmi Schmöker (L2) Bücher von Lemmi Schmöker durch Join mit A2-6-

Lesernummer alles Personen, die die gleichen Bücher wie Lemmi ausgeliehen haben, durch Join mit A1 Daten der Leser durch Join mit L1 Lemmi aus dem Ergebnis entfernen durch ungleiche LSNR Projektion auf die Daten der Leser aus L1-7-