Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Folienadaption HS, 4/99.

Ähnliche Präsentationen


Präsentation zum Thema: "Folienadaption HS, 4/99."—  Präsentation transkript:

1 Folienadaption HS, 4/99

2 Relationen sind Tabellen!
Relationales Modell = Tabellarische Repräsentation der Daten + „assoziative“ Anfragesprache Datenbank enthält auch Beschreibung der Daten: Datenbankschema (also Metadaten)

3 Wie kommt man zu einem DB-Schema?
1. Datenmodellierung typisch: Entity-Relationship-Modell (datenorientiert) zunehmend mit den Operationen (Unified Modeling Language, UML) Oft andere Notation! Lies z.B: einem Kunde (customer) werden Lieferungen (shipments) gesandt, keine, eine oder mehrere (1:M) Kardinalitäten sind Invarianten: eine Lieferung kann nie an mehrere Kunden gehen

4 Beispiel zu Entity-Relationship-Modellierung
Schlüssel (key) Allgemein: eine identifizierende Folge von Attributen. (Invanrianzeigenschaft!) Kunden (AntiqueOwners) Antiquität bestellen (Orders) N M KDnr (ownerID) Name Nachname Bezeichner (item) Handelstransaktion (Antiques) kauft verkauft Was? (siehe Tutorial S. 6 u. 7)

5 Wie kommt man DB-Schema: Datendefinition
2. Datenbankschema definieren im RDM heißt das: Tabellenstruktur festlegen, Bezeichner, Attribute und deren Typ, ggf. Invarianten CREATE TABLE Orders (OwnerId INTEGER NOT NULL FOREIGN KEY REFERENCES AntiqueOwners (OWNERID), ItemDesired CHAR(40) NOT NULL); CREATE TABLE AntiqueOwners (OwnerId INTEGER NOT NULL, OwnerLastname CHAR(40) NOT NULL, OwnerFirstName CHAR(30)); CREATE TABLE Antiques (SellerID INTEGER NOT NULL FOREIGN KEY REFERENCES AntiqueOwners (OWNERID), .....);

6 Das Datenbänkchen... ... benutzen wir später!

7 Eine zweite DB für einfache SQL-Anfragen
Leider hat diese Tabelle des Tutorials herzlich wenig mit der ersten zu tun! Was fehlt da?

8 Einfache SQL-Anfragen
Grundstruktur (eine beteiligte Tabelle): SELECT [<attributBezeicher>] | * FROM <tabellenBezeichner > [WHERE <prädikat>] ; EBNF-Syntax Metasymbole! Ein SQL-Ausdruck braucht also kein (Selektions-)prädikat Ergebnis einer Anfrage ist immer eine Tabelle! ... auf der wieder eine Anfrage... -> Algebra auf Relationen als theoretische Basis. Relationenalgebra: eine applikative Sprache SELECT State FROM EmployeeAddressTable; So sollte Ergebnis aussehen, (leider) werden Duplikate nicht entfernt

9 Beispiele SELECT FirstName, LastName, Address, City, State
FROM EmployeeAddressTable; SELECT LastName, Address, City, State FROM EmployeeAddressTable WHERE State = ´Ohio´; Projektion Selektion Zeichenkettenwerte in Hochkommata

10 Selektionsprädikate (1)
Engl. <condition_list> <prädikat> This is a boolean expression which each row must satisfy. Operators which may be used include AND, OR, NOT, >, >=, =, <, <= The LIKE operator permits strings to be compared using 'wild cards' The symbols _ and % are used to represent a single character or a sequence of characters. The IN operator allows an item to be tested against a list of values. There is a BETWEEN operator for checking ranges.

11 Einfache Anfragen (1) Programmierer, die weniger als (was??) verdienen? SELECT EmployeeIdNo FROM EmployeeStatisticsTable WHERE Salary < AND Position = ´Programmer´; Kann hier auch OR stehen? Angestellte mit Gehalt > oder Bonus (benefits) von mehr als 10000? SELECT EmployeeIdNo FROM EmployeeStatisticsTable WHERE Salary < OR Benefits > 10000;

12 Einfache Anfragen (2) Manager mit Gehalt > oder Bonus (benefits) von mehr als 10000? SELECT EmployeeIdNo FROM EmployeeStatisticsTable WHERE POSITION = ´Manager´ AND (SALARY < OR BENEFITS > 10000; Manager, Programmierer, Stabsmitglieder oder Ingenieure! SELECT EmployeeIdNo FROM EmployeeStatisticsTable WHERE Position IN (´Manager´, ´Programmer´, ´Staff´, ´Engineer´) ; Vermeidet lästiges OR, was bedeutet: NOT IN ?

13 Einfache Anfragen (3) Manager mit Gehalt zwischen und ? SELECT EmployeeIdNo FROM EmployeeStatisticsTable WHERE Position = ´MANAGER´ AND Salary BETWEEN AND ; Etwas ´verbose´ ! Manager mit Gehalt < Bonus (benefits) ? SELECT EmployeeIdNo FROM EmployeeStatisticsTable WHERE Position = ´MANAGER´ AND Salary < Benefits ; Natürlich nur, wenn die Attribute gleichen Typ haben!

14 Einfache Anfragen (4) Angestellte mit Anfangsbuchstabe ´S´
SELECT EmployeeIdNo FROM EmployeeAddressTable WHERE Lastname LIKE ´S%´; In regulären Ausdrücken ist das der *

15 Einfache Subqueries Personen mit Vornamen, die auch als Nachnamen auftauchen SELECT EmployeeIdNo FROM EmployeeAddressTable WHERE Firstname IN (SELECT Lastname FROM EmployeeAddressTable) ; Diese Subqueries sind unabhängig voneinander Beachte Unterschied zu ´Vorname = Nachname´

16 Mehrere Tabellen Anfrage: Namen der Manager, die mehr als verdienen. Problem: Verbindung zwischen der Information in verschiedenen Tabellen kann nicht hergestellt werden. Annahme: EmployeeAddressTable besitzt zusätzlich Spalte EmployeeNo Alias manchmal nötig, immer nützlich SELECT Lastname FROM EmployeeStatisticsTable ES, EmployeeAddressTable EA WHERE Position = ´Manager´ AND Salary > AND EA.EmployeeIdNo = ES. EmployeeIdNo; Verbund (genauer: Gleichheitsverbund)

17 Andere Join-Typen Voriges Beispiel: Join-Prädikat Teil der WHERE-Klausel: muss nicht so sein. Unterschied: Gültigkeitsbereich der Bezeichner in WHERE - Klausel SELECT Lastname FROM EmployeeStatisticsTable ES JOIN EmployeeAddressTable EA ON EA.EmployeeIdNo = ES. EmployeeIdNo WHERE Position = ´Manager´ AND Salary > ;

18 Natürlicher Verbund Gleichverbund (Equijoin) auf gleich benannten Attributen verschiedener Tabellen. SELECT Lastname FROM EmployeeStatisticsTable ES NATURAL JOIN EmployeeAddressTable EA WHERE Position = ´Manager´ AND Salary > ;

19 Äußerer Verbund Wo bleibt die Adresse der nicht angestellten Personen?
010 400 ID Erstelle Liste aller Namen und Adressen und (ggf.) des Gehalts SELECT EA.LastName, EA.Address, ES.Salary FROM EmployeeStatisticsTable ES RIGHT OUTER JOIN EmployeeAddressTable EA ON EA.EmployeeIdNo = ES.EmployeeIdNo ; Right Outer Join: auch die Tupel des rechten Relationsarguments ohne Korrespondenzwert im ersten gehören zum Ergebnis! Wo bleibt die Adresse der nicht angestellten Personen?

20 Duplikate eliminieren
SELECT State FROM EmployeeAddressTable; liefert .... Mehrfach auftretende Werte (Duplikate) unterdrücken durch Schlüsselwort DISTINCT . SELECT DISTINCT State FROM EmployeeAddressTable ORDER BY State; hier sogar sortiert

21 Aggregierungsfunktionen
· SUM () gives the total of all the rows, satisfying any conditions, of the given column, where the given column is numeric. · AVG () gives the average of the given column. · MAX () gives the largest figure in the given column. · MIN () gives the smallest figure in the given column. · COUNT(*) gives the number of rows satisfying the conditions. Bsp: Gehaltssumme und -durchschnitt aller Mitarbeiter! SELECT SUM(Salary), AVG(Salary) FROM EmployeeStatisticsTable ;

22 Zielliste und Prädikate können Arithmetik enthalten
Arithmetisch Zielliste und Prädikate können Arithmetik enthalten Bsp: Angestellte, die das Doppelte des Durchschnitts verdienen SELECT EmployeeIdNo FROM EmployeeStatisticsTable WHERE Salary > (SELECT AVG(Salary) FROM EmployeeStatisticsTable);

23 Gruppierung Maximaler Verdienst aller Berufsgruppen
SELECT Position MAX(Salary) FROM EmployeeStatisticsTable GROUP BY Position; Maximaler Verdienst aller Berufsgruppen mit Durchschnittsgehalt > 50000 SELECT Position MAX(Salary) FROM EmployeeStatisticsTable GROUP BY Position HAVING AVG(Salary) > 50000;

24 Daten ändern Adding Data
To insert rows into a table, do the following: INSERT INTO Antiques VALUES (21, 01, 'Ottoman', ); This inserts the data into the table, as a new row, column-by-column, in the pre-defined order. Instead, let's change the order and leave Price blank: INSERT INTO Antiques (BuyerId, SellerId, Item) VALUES (01, 21, 'Ottoman');

25 Ändern und Löschen Ändere Preis für alle Positionen ´chair´ auf 500.
UPDATE Antiques SET Price = WHERE Item = 'Chair'; Beliebige Prädikate möglich Lösche alle Ottomanen DELETE FROM Antiques WHERE Item = 'Ottoman';

26 Nochmal: Datendefinition
Mit Hilfe von Anfragen können Tabellen definiert werden, die künftig (fast) wie Basistabellen behandelt werden. Diese Tabellen heißen VIEW . Sie werden normalerweise nicht materialisiert. CREATE VIEW MoneyMakers AS SELECT Lastname, City, State FROM EmployeeStatisticsTable ES, EmployeeAddressTable EA WHERE Salary > AND EA.EmployeeIdNo = ES.EmployeeIdNo; SELECT COUNT(Lastname) FROM MoneyMakers GROUP BY City, State; Anfrage auf VIEW

27 Schemaänderungen erleichtern Rapid Prototyping
Hinzufügen des Attributs (der Spalte) EmployeeIdNo zur EmployeeAddressTable ALTER TABLE EmployeeAddressTable ADD (EmployeeIdNo INTEGER NULL); Nullwert != 0 NULL : undefiniert Nicht behandelt: Mengenoperationen, physikalisches Schema, Einbettung in Pogrammiersprachen.


Herunterladen ppt "Folienadaption HS, 4/99."

Ähnliche Präsentationen


Google-Anzeigen