Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Folienadaption HS, 4/00. Relationen sind Tabellen! Relationales Modell = Tabellarische Repräsentation der Daten + assoziative Anfragesprache Datenbank.

Ähnliche Präsentationen


Präsentation zum Thema: "Folienadaption HS, 4/00. Relationen sind Tabellen! Relationales Modell = Tabellarische Repräsentation der Daten + assoziative Anfragesprache Datenbank."—  Präsentation transkript:

1 Folienadaption HS, 4/00

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) 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 Oft andere Notation!

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

5 Wie kommt man zum 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 [ ] | * FROM [WHERE ] ; 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) 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. Engl.

11 Einfache Anfragen (1) SELECT EMPLOYEEIDNO FROM EMPLOYEESTATISTICSTABLE WHERE SALARY < 40000 AND POSITION = ´Programmer´; Programmierer, die weniger als 4000 (was??) verdienen? Angestellte mit Gehalt > 40000 oder Bonus (benefits) von mehr als 10000? SELECT EMPLOYEEIDNO FROM EMPLOYEESTATISTICSTABLE WHERE SALARY 10000; Kann hier auch OR stehen?

12 Einfache Anfragen (2) Manager mit Gehalt > 40000 oder Bonus (benefits) von mehr als 10000? SELECT EMPLOYEEIDNO FROM EMPLOYEESTATISTICSTABLE WHERE POSITION = ´Manager´ AND (SALARY 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 < Bonus (benefits) ? SELECT EMPLOYEEIDNO FROM EMPLOYEESTATISTICSTABLE WHERE POSITION = ´Manager´ AND SALARY < BENEFITS ; Natürlich nur, wenn die Attribute gleichen Typ haben! Manager mit Gehalt zwischen 50000000 und 100000000 ? SELECT EMPLOYEEIDNO FROM EMPLOYEESTATISTICSTABLE WHERE POSITION = ´MANAGER´ AND SALARY BETWEEN 50000000 AND 100000000 ;

14 Einfache Anfragen (4) Manager mit Gehalt zwischen 50000000 und 100000000 ? SELECT EMPLOYEEIDNO FROM EMPLOYEESTATISTICSTABLE WHERE POSITION = ´MANAGER´ AND SALARY BETWEEN 50000000 AND 100000000 ; Etwas ´verbose´ ! Angestellte mit Anfangsbuchstabe ´S´ SELECT EMPLOYEEIDNO FROM EMPLOYEESTATISTICSTABLE 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 EMPLOYEESTATISTICSTABLE WHERE FIRSTNAME IN (SELECT LASTNAME FROM EMPLOYEESTATISTICSTABLE) ; Beachte Unterschied zu ´Vorname = Nachname´ Diese Subqueries sind unabhängig voneinander

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

17 Andere Jointypen Voriges Beispiel: Join-Prädikat Teil der WHERE -Klausel: muss nicht so sein. SELECT LASTNAME FROM EMPLOYEESTATISTICSTABLE ES JOIN EMPLOYEEADDRESSTABLE EA ON EA.EMPLOYEENO = ES.EMPLOYEENO WHERE POSITION = ´MANAGER´ AND SALARY > 1000000; Unterschied: Gültigkeitsbereich der Bezeichner in WHERE - Klausel

18 Natürlicher Verbund SELECT LASTNAME FROM EMPLOYEESTATISTICSTABLE ES NATURAL JOIN EMPLOYEEADDRESSTABLE EA WHERE POSITION = ´MANAGER´ AND SALARY > 1000000; Gleichverbund (Equijoin) auf gleich benannten Attributen verschiedener Tabellen.

19 Äusserer Verbund 010 400 ID Erstelle Liste aller Namen und Adressen und (ggf.) des Gehalts Wo bleibt die Adresse der nicht angestellten Personen? SELECT EA.LASTNAME, EA.ADRESS,ES.SALARY FROM EMPLOYEESTATISTICSTABLE ES RIGHT OUTER JOIN EMPLOYEEADDRESSTABLE EA ON EA.EMPLOYEENO = ES.EMPLOYEENO ; Right Outer Join: auch die Tupel des rechten Relationsarguments ohne Korrespondenzwert im ersten gehören zum Ergebnis!

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. SELECT SUM(SALARY), AVG(SALARY) FROM EMPLOYEESTATISTICSTABLE; Bsp : Gehaltssumme und -durchschnitt aller Mitarbeiter!

22 Arithmetisch Zielliste und Prädikate können Arithmetik enthalten Bsp: Angestellte, die das Doppelte des Durchschnitts verdienen SELECT EMPLOYEEID 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', 200.00); 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 = 500.00 WHERE ITEM = 'Chair'; Lösche alle Ottomanen DELETE FROM ANTIQUES WHERE ITEM = 'Ottoman'; Beliebige Prädikate möglich

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 > 1000000 AND EA.EMPLOYEENO = ES.EMPLOYEENO; SELECT COUNT(LASTNAME) FROM MONEYMAKERS GROUP BY CITY, STATE; Anfrage auf VIEW

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


Herunterladen ppt "Folienadaption HS, 4/00. Relationen sind Tabellen! Relationales Modell = Tabellarische Repräsentation der Daten + assoziative Anfragesprache Datenbank."

Ähnliche Präsentationen


Google-Anzeigen