2. Einführung in das Relationale Modell und SQL 2-1 Inhalt 2. Einführung in das Relationale Modell und SQL 2-2 Das relationale Modell ' $ Das relationale Modell strukturiert die Daten. 1. Relationales Modell, Beispiel-Datenbank & % Ein relationales DB-Schema definiert: 2. Schlüssel • Den Namen der Tabellen in der Datenbank. 3. Einfache SQL-Anfragen • Die Spalten jeder Tabelle - jeweils Spalten-Name und Datentyp. 4. Tupelvariable, Terme, Bedingungen • Die Integritätsbedingungen. S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-3 2. Einführung in das Relationale Modell und SQL 2-4 Beispiel-Datenbank (1) SID 101 102 103 104 STUDENTEN VORNAME NACHNAME Lisa Weiss Michael Grau Daniel Sommer Iris Winter EMAIL ··· NULL ··· ··· AUFGABEN ATYP ANR THEMA MAXPT H 1 ER 10 H 2 SQL 10 Z 1 SQL 14 S. Brass, A. Herrmann: Datenbanken und WWW SID 101 101 101 102 102 102 103 103 Beispiel-Datenbank (2) BEWERTUNGEN ATYP ANR PUNKTE H 1 10 H 2 8 Z 1 12 H 1 9 H 2 9 Z 1 10 H 1 5 Z 1 7 • STUDENTEN: enthält eine Zeile für jeden Studenten. SID: “Studenten-ID” (eindeutige Nummer). VORNAME, NACHNAME: Vor- und Nachname. EMAIL: Email-Adresse (kann NULL sein). • AUFGABEN: enthält eine Zeile für jede Aufgabe. ATYP: Typ/Kategorie der Aufgabe. Z.B. ’H’: Hausaufgabe, ’Z’: Zwischenklausur, ’E’: Endklausur. ANR: Aufgabennummer (innerhalb des Typs). THEMA: Thema der Aufgabe. MAXPT: Maximale/volle Punktzahl der Aufgabe. Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-5 2. Einführung in das Relationale Modell und SQL Beispiel-Datenbank (3) 2-6 Zusammenfassung • BEWERTUNGEN: enthält eine Zeile für jede abgegebene Lösung zu einer Aufgabe. Tabellen-Name P PP PP SID: Student, der die Lösung abgegeben hat. PP PP q Spalte PP PP PP Dies referenziert eine Zeile in STUDENTEN. A1 a1,1 P q ATYP, ANR: Identifikation der Aufgabe. Zeile - Zusammen identifiziert dies eine Zeile in AUFGABEN. PUNKTE: Punkte, die der Student für die Lösung bekommen hat. Zeile Falls es keinen Eintrag für einen Studenten und eine Aufgabe gibt: Aufgabe nicht abgegeben. - R ··· .. ··· .. am,1 ··· Spalte ) An Tabellen Eintrag a1,n) (Spalten.. Wert) am,n Statt Tabelle kann man auch Relation sagen, statt Zeile auch Tupel, und statt Spalte auch Attribut. S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-7 2. Einführung in das Relationale Modell und SQL 2-8 Schlüssel (1) Inhalt • Die Spalte SID ist als “Schlüssel” der Tabelle STUDENTEN deklariert (ein Typ von Integritätsbedingungen). 1. Relationales Modell, Beispiel-Datenbank ' $ 2. Schlüssel & • Das bedeutet, daß ein Wert für SID immer eine einzige Zeile (Tupel) der Tabelle eindeutig identifiziert. % 3. Einfache SQL-Anfragen 4. Tupelvariable, Terme, Bedingungen S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 SID 101 102 103 104 STUDENTEN VORNAME NACHNAME Lisa Weiss Michael Grau Daniel Sommer Iris Winter S. Brass, A. Herrmann: Datenbanken und WWW EMAIL ··· NULL ··· ··· Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-9 2. Einführung in das Relationale Modell und SQL 2-10 Fremdschlüssel • SID in der Tabelle BEWERTUNGEN identifiziert eindeutig Schlüssel (2) eine Zeile in der Tabelle STUDENTEN. • Eine Tabelle kann mehrere Schlüssel haben aber nur einen Primärschlüssel: • Der Primärschlüssel kann auch aus der Kombination mehrerer Spalten bestehen. • SID stellt also einen Verweis auf die andere Tabelle dar - ein Fremdschlüssel. Man kann die Daten der beiden Tabellen darüber verknüpfen. • Das DBMS stellt dann sicher, daß nur Werte in diese Spalte eingetragen werden können, die auch tatsächlich in STUDENTEN (in der Spalte SID) auftreten. S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-11 2. Einführung in das Relationale Modell und SQL 2-12 Schema-Notation (1) Schema-Notation (2) Arten von Notationen für relationale Schemata: 1. SQL-Anweisungen (CREATE TABLE) enthalten alle Details. 2. Tabellen - Schlüsselspalten unterstreichen - Fremdschlüssel durch Pfeile kennzeichnen: 3. Kurznotation • Tabellen-Name und dahinter in Klammern die Spalten, z.B. STUDENTEN(SID, VORNAME, NACHNAME, EMAIL◦) • Schlüssel: Durch Unterstreichen markiert. Man kann so nur einen Schlüssel markieren (“Primärschlüssel”): Falls mehrere Spalten unterstrichen: Kombination ist Schlüssel. Spalten mit Nullwerten werden mit ◦ markiert. • Fremdschlüssel: Pfeil und referenzierte Tabelle: BEWERTUNGEN(SID → STUDENTEN, (ATYP, ANR) → AUFGABEN, PUNKTE) S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-13 2. Einführung in das Relationale Modell und SQL 2-14 Inhalt Web-Schnittstelle (1) SQL-Anfragen kann man in folgendem Webformular 1. Relationales Modell, Beispiel-Datenbank ausprobieren: https://dbs.informatik.uni-halle.de/adminer/adminer.php 2. Schlüssel ' $ Datenbanksystem: Oracle Server: studdb 3. Einfache SQL-Anfragen & % 4. Tupelvariable, Terme, Bedingungen von zu Hause Server: verdi.informatik.uni-halle.de:1521/studdb S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-15 2. Einführung in das Relationale Modell und SQL 2-16 Einfache SQL-Anfragen Web-Schnittstelle (2) Einfache Ein-Tabellen-Anfragen: • Eine einfache SQL-Anfrage hat folgende Form: • Benutzer und Passwort werden zur Verfügung gestellt. • Die Übungsdatenbanken müssen durch Ausführen der auf der Webseite stehenden Skripte erstellt werden. S. Brass, A. Herrmann: Datenbanken und WWW SELECT Spalten FROM Tabelle WHERE Bedingung • Z.B. gibt die folgende Anfrage alle Hausaufgabenergebnisse von Studentin 101 aus: SELECT ANR, PUNKTE FROM BEWERTUNGEN WHERE ATYP = ’H’ AND SID = 101 Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW ANR PUNKTE 1 10 2 8 Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-17 2. Einführung in das Relationale Modell und SQL 2-18 Syntax (2) Syntax (1) Leerplatz ist zwischen Wortsymbolen erlaubt: SQL ist eine formatfreie Sprache: • Es ist nicht nötig, daß “SELECT”, “FROM”, “WHERE” • Leerzeichen (meist auch Tabulator-Zeichen) am Anfang neuer Zeilen stehen. Man kann auch • Zeilenumbrüche die ganze Anfrage auf eine Zeile schreiben. • Kommentare (Bemerkungen für menschliche Leser, • Z.B. kann man komplexe Bedingungen auf mehre- vom DBMS einfach ignoriert): re Zeilen verteilen und die Struktur mit Hilfe von • Von “--” bis Zeilenende Einrückungen deutlich machen. • Von “/*” bis “*/” S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-19 2. Einführung in das Relationale Modell und SQL 2-20 Zahlen Zeichenketten • Numerische Literale sind Konstanten numerischer Datentypen (Fixpunkt- und Gleitkommazahlen). Z.B.: 1, +2., -34.5, -.67E-8 • Zahlen stehen nicht in Hochkommas! • Bei einer Festkommazahl wird mit einer festen Anzahl Stellen vor und nach dem Komma gerechnet. • Bei Fließkommazahlen wird insgesamt mit einer festen Anzahl Stellen gerechnet, aber die Position des Kommas ist variabel, je nachdem, ob die Zahlen • Ein Zeichenketten-Literal (String-Konstante) ist eine Folge von Zeichen, eingeschlossen in Hochkommas, z.B. ’abc’ ’Dies ist ein String.’ • Hochkommas in Zeichenketten müssen verdoppelt werden, z.B. ’Dirk’’s Buch’. groß oder klein sind. S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-21 2. Einführung in das Relationale Modell und SQL Andere Konstanten 2-22 Bezeichner (1) • Zeichenketten mit nationalem Zeichensatz • Wird u.a. als Tabellen- und Spaltennamen verwen- • Datum, Zeit, Zeitstempel, Datum-/Zeit-Intervall Datumswerte werden in Oracle folgt geschrieben:’31-OCT-02’ (US), ’31.10.2002’ (D). • Bit-Strings, binäre Daten det. • Kann auch Zahlen enthalten • beginnt immer mit einem Buchstaben. • Large Objects (Dateien als Tabelleneintrag) • Die Syntax der Konstanten dieser Datentypen ist allgemein sehr systemabhängig. • als Sonderzeichen ist nur zugelassen. • Z.B. Dozenten_Name, X27, aber nicht _XYZ, 12, 2BE. S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-23 2. Einführung in das Relationale Modell und SQL 2-24 Bezeichner (2) Bezeichner (3) • Bezeichner können bis 18 Zeichen haben (systemabhängig). • müssen verschieden von reservierten Wörtern sein. Beispiel: SELECT VORNAME, NACHNAME FROM STUDENTEN ist äquivalent zu: Es gibt viele reservierte Wörter, siehe unten. Einbettungen in Programmiersprachen (PL/SQL, Visual Basic) fügen noch mehr hinzu. • Nationale Zeichen (z.B. Umlaute) zu verwenden, ist möglich, sollte aber vermieden werden. • Die Groß-/Kleinschreibung ist bei Bezeichnern und Schlüsselwörtern egal (sie sind nicht case-sensitiv). select Vorname , NachNaMe -- huebsch haesslich From Studenten Achtung: Zeichenketten-Vergleiche sind normalerweise case-sensitive: select x.name from studenten x where x.name = ’lisa’ wird keine Antwort liefern (obwohl es ’Lisa’ gibt). S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-25 2. Einführung in das Relationale Modell und SQL 2-26 Reservierte Wörter - SQL (1) Reservierte Wörter Die Schlüsselworte von SQL, z.B. SELECT dürfen nicht als Bezeichner verwendet werden. Das könnte zu Mißverständnissen führen. Beispiel: “SELECT A FROM FROM R” Das erste FROM ist das Schlüsselwort, das zweite der Name einer Tabelle. Fehler!! Eine Tabelle darf nicht FROM heißen. 1 = Oracle 8.0 ARE2 = SQL-92 AS1,2,3 3 = SQL Server 7 ASC1,2,3 ASSERTION2 — A — AT2 ABSOLUTE2 AUTHORIZATION2,3 ACCESS1 AUDIT1 ACTION2 AVG2,3 ADD1,2,3 — B — ALL1,2,3 BACKUP3 ALLOCATE2 BEGIN2,3 ALTER1,2,3 BETWEEN1,2,3 AND1,2,3 BIT2 ANY1,2,3 BIT_LENGTH2 2 BOTH2 BREAK3 BROWSE3 BULK3 BY1,2,3 — C — CASCADE2,3 CASCADED2 CASE2,3 CATALOG2 CHAR1,2 CHARACTER2 CHAR_LENGTH2 CHARACTER_LENGTH2 CHECK1,2,3 CHECKPOINT3 CLOSE2,3 CLUSTER1 CLUSTERED3 COALESCE2,3 COLLATE2 COLLATION2 COLUMN1,3 COMMENT1 COMMIT2,3 COMMITTED3 COMPRESS1 COMPUTE3 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-27 2. Einführung in das Relationale Modell und SQL 2-28 Reservierte Wörter - SQL (2) CONFIRM3 CONNECT1,2 CONNECTION2 CONSTRAINT2,3 CONSTRAINTS2 CONTAINS3 CONTAINSTABLE3 CONTINUE2,3 CONTROLROW3 CONVERT2,3 CORRESPONDING2 COUNT2,3 CREATE1,2,3 CROSS2,3 CURRENT1,2,3 DECLARE2,3 DEFAULT1,2,3 CURRENT_DATE2,3 CURRENT_TIME2,3 DEFERRABLE2 CURRENT_TIMESTAMP2,3 DEFERRED2 CURRENT_USER2,3 DELETE1,2,3 CURSOR2,3 DENY3 — D — DESC1,2 DATABASE3 DESCRIBE2 DATE1,2 DESCRIPTOR2 DAY2 DIAGNOSTICS2 DBCC3 DISCONNECT2 DEALLOCATE2,3 DISK3 DEC2 DISTINCT1,2,3 DECIMAL1,2 DISTRIBUTED3 S. Brass, A. Herrmann: Datenbanken und WWW DOMAIN2 DOUBLE2,3 DROP1,2,3 DUMMY3 DUMP3 — E — ELSE1,2,3 END2,3 END-EXEC2 ERRLVL3 ERROREXIT3 ESCAPE2,3 EXCEPT2,3 EXCEPTION2 Universität Halle, 2014 Reservierte Wörter - SQL (3) EXCLUSIVE1 EXEC2,3 EXECUTE2,3 EXISTS1,2,3 EXIT3 EXTERNAL2 EXTRACT2 — F — FALSE2 FETCH2,3 FILE1,3 FILLFACTOR3 FIRST2 FLOAT1,2 FLOPPY3 FOR1,2,3 FOREIGN2,3 FOUND2 FREETEXT3 FREETEXTTABLE3 FROM1,2,3 FULL2,3 — G — GET2 GLOBAL2 GO2 GOTO2,3 GRANT1,2,3 GROUP1,2,3 — H — HAVING1,2,3 HOLDLOCK3 HOUR2 — I — IDENTITY2,3 IDENTITY_INSERT3 IDENTITYCOL3 IDENTIFIED1 IF3 IMMEDIATE1,2 IN1,2,3 INCREMENT1 S. Brass, A. Herrmann: Datenbanken und WWW INDEX1,3 INDICATOR2 INITIAL1 INITIALLY2 INNER2,3 INPUT2 INSENSITIVE2 INSERT1,2,3 INT2 INTEGER1,2 INTERSECT1,2,3 INTERVAL2 INTO1,2,3 IS1,2,3 Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-29 2. Einführung in das Relationale Modell und SQL Reservierte Wörter - SQL (5) Reservierte Wörter - SQL (4) ISOLATION2,3 — J — JOIN2,3 — K — KEY2,3 KILL3 — L — LANGUAGE2 LAST2 LEADING2 LEFT2,3 LEVEL1,2,3 LIKE1,2,3 LINENO3 LOAD3 LOCAL2 LOCK1 LONG1 LOWER2 — M — MATCH2 MAX2,3 MAXEXTENTS1 MIN2,3 MINUS1 MINUTE2 MIRROREXIT3 MODE1 MODIFY1 MODULE2 MONTH2 — N — NAMES2 NATIONAL2,3 NATURAL2 NCHAR2 NETWORK1 NEXT2 NO2 NOAUDIT1 NOCHECK3 NOCOMPRESS1 2-30 ONCE3 ONLINE1 ONLY2,3 OPEN2,3 OPENDATASOURCE3 OPENQUERY3 OPENROWSET3 OPTION1,2,3 OR1,2,3 ORDER1,2,3 OUTER2,3 OUTPUT2 OVER3 OVERLAPS2 NONCLUSTERED3 NOT1,2,3 NOWAIT1 NULL1,2,3 NULLIF2,3 NUMBER1 NUMERIC2 — O — OCTET_LENGTH2 OF1,2,3 OFF3 OFFLINE1 OFFSETS3 ON1,2,3 — P — PARTIAL2 PCTFREE1 PERCENT3 PERM3 PERMANENT3 PIPE3 PLAN3 POSITION2 PRECISION2,3 PREPARE2,3 PRESERVE2 PRIMARY2,3 PRINT3 PRIOR1,2 PRIVILEGES1,2,3 PROC3 PROCEDURE2,3 PROCESSEXIT3 PUBLIC1,2,3 — R — RAISERROR3 RAW1 READ2,3 READTEXT3 REAL2 RECONFIGURE3 REFERENCES2,3 RELATIVE2 RENAME1 REPEATABLE3 REPLICATION3 RESOURCE1 RESTORE3 RESTRICT2,3 RETURN3 REVOKE1,2,3 RIGHT2,3 ROLLBACK2,3 ROW1 ROWCOUNT3 ROWGUIDCOL3 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-31 2. Einführung in das Relationale Modell und SQL 2-32 Reservierte Wörter - SQL (6) ROWID1 ROWNUM1 ROWS1,2 RULE3 — S — SAVE3 SCHEMA2,3 SCROLL2 SECOND2 SECTION2 SELECT1,2,3 SERIALIZABLE3 SESSION1,2 SESSION_USER2,3 SET1,2,3 SETUSER3 SHARE1 SHUTDOWN3 SIZE1,2 SMALLINT1,2 SOME2,3 SQL2 SQLCODE2 SQLERROR2 SQLSTATE2 START1 STATISTICS3 SUBSTRING2 SUCCESSFUL1 SUM2,3 SYNONYM1 SYSDATE1 SYSTEM_USER2,3 — T — TABLE1,2,3 TAPE3 TEMP3 TEMPORARY2,3 TEXTSIZE3 THEN1,2,3 TIME2 TIMESTAMP2 S. Brass, A. Herrmann: Datenbanken und WWW TIMEZONE_HOUR2 TIMEZONE_MINUTE2 TO1,2,3 TOP3 TRAILING2 TRAN3 TRANSACTION2,3 TRANSLATE2 TRANSLATION2 TRIGGER1,3 TRIM2 TRUE2 TRUNCATE3 TSEQUAL3 Universität Halle, 2014 Reservierte Wörter - SQL (7) — U — UID1 UNCOMMITTED3 UNION1,2,3 UNIQUE1,2,3 UNKNOWN2 UPDATE1,2,3 UPDATETEXT3 UPPER2 USAGE2 USE3 USER1,2,3 USING2 — V — VALIDATE1 VALUE2 VALUES1,2,3 VARCHAR1,2 VARCHAR21 VARYING2,3 VIEW1,2,3 — W — WAITFOR3 WHEN2,3 WHENEVER1,2 WHERE1,2,3 WHILE3 WITH1,2,3 WORK2,3 WRITE2 WRITETEXT3 — Y — YEAR2 — Z — ZONE2 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-33 2. Einführung in das Relationale Modell und SQL 2-34 Apostrophe und Anführungszeichen (2) Apostrophe und Anführungszeichen (1) Zeichenkettenkonstanten stehen in einfachen Anführungszeichen (auf der Tastatur über #). Beispiel: select x.name from studenten x where x.name = ’Lisa’ • Außerdem gibt es noch “Delimited Identifier”. Sie werden verwendet, um ausgegebene Spaltennamen umzubenennen. Beispiel: SELECT VORNAME AS "Vorname", NACHNAME "Name" FROM STUDENTEN “AS” ist optional (außer in MS Access). dagegen würde select x.name from studenten x where x.name = "Lisa" einen Fehler erzeugen • Ist aber der neue Spaltenname ein legaler Bezeichner, sind die Anführungszeichen unnötig: SELECT VORNAME AS V_NAME, NACHNAME Name FROM STUDENTEN In Oracle wird alles in Großbuchstaben ausgegeben. S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-35 2. Einführung in das Relationale Modell und SQL 2-36 Beispiel-Datenbank Inhalt SID 101 102 103 104 1. Relationales Modell, Beispiel-Datenbank 2. Schlüssel 3. Einfache SQL-Anfragen ' $ 4. Tupelvariable, Terme, Bedingungen & S. Brass, A. Herrmann: Datenbanken und WWW % Universität Halle, 2014 STUDENTEN VORNAME NACHNAME Lisa Weiss Michael Grau Daniel Sommer Iris Winter EMAIL ··· NULL ··· ··· AUFGABEN ATYP ANR THEMA MAXPT H 1 ER 10 H 2 SQL 10 Z 1 SQL 14 S. Brass, A. Herrmann: Datenbanken und WWW SID 101 101 101 102 102 102 103 103 BEWERTUNGEN ATYP ANR PUNKTE H 1 10 H 2 8 Z 1 12 H 1 9 H 2 9 Z 1 10 H 1 5 Z 1 7 Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-37 2. Einführung in das Relationale Modell und SQL 2-38 Tupelvariablen (2) Tupelvariablen (1) • In der FROM-Klausel deklariert man Variablen, die über alle Tupel (Zeilen) der Relation laufen: SELECT A.ANR, A.THEMA FROM AUFGABEN A WHERE A.ATYP = ’H’ • “A” steht nacheinander für jede Zeile der Tabelle. Weil das Tupel sich ändert, für das A steht, heißt A (Tupel-)Variable. • Auf die Werte der Spalten in der gerade betrachteten Zeile kann man sich mit A.ATYP, A.ANR, A.THEMA und A.MAXPT beziehen. • Z.B. könnte A zuerst für die erste Zeile der Tabelle stehen (die genaue Reihenfolge darf das DBMS wählen, da Relationen Mengen sind): AUFGABEN ATYP ANR THEMA MAXPT A −→ H 1 ER 10 H 2 SQL 10 Z 1 SQL 14 • Nun kann man für Ausdrücke wie A.ATYP jeweils den konkreten Wert aus der aktuellen (gerade betrachteten) Zeile einsetzen, im Beispiel also ’H’. S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-39 2. Einführung in das Relationale Modell und SQL 2-40 Tupelvariablen (3) Tupelvariablen (4) • Anfrage und aktuelle Zeile (nochmal): SELECT A.ANR, A.THEMA FROM AUFGABEN A WHERE A.ATYP = ’H’ ATYP ANR THEMA MAXPT A −→ H 1 ER 10 • Die WHERE-Bedingung ist für diese Zeile wahr. • Daher werden die in der SELECT-Klausel angegebenen Werte ausgegeben: ANR THEMA 1 ER S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 • Anschließend wird die Tupelvariable A eine Zeile weiter geschaltet: AUFGABEN ATYP ANR THEMA MAXPT H 1 ER 10 A −→ H 2 SQL 10 Z 1 SQL 14 • Die WHERE-Bedingung A.ATYP = ’H’ ist wieder wahr. • Also erfolgt wieder die Ausgabe der SELECT-Daten: ANR THEMA 2 SQL S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-41 2. Einführung in das Relationale Modell und SQL Tupelvariablen (5) 2-42 Tupelvariablen (6) • Dann wird die Tupelvariable A noch eine Zeile weiter • Insgesamt ergibt die Anfrage für die geg. Tabelle geschaltet: SELECT A.ANR, A.THEMA FROM AUFGABEN A WHERE A.ATYP = ’H’ AUFGABEN ATYP ANR THEMA MAXPT H 1 ER 10 H 2 SQL 10 A −→ Z 1 SQL 14 • Die WHERE-Bedingung A.ATYP = ’H’ ist diesmal nicht AUFGABEN ATYP ANR THEMA MAXPT H 1 ER 10 H 2 SQL 10 Z 1 SQL 14 also das Ergebnis: ANR THEMA 1 ER 2 SQL erfüllt (falsch). • In diesem Fall wird nichts ausgegeben. S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-43 2. Einführung in das Relationale Modell und SQL 2-44 Abkürzungen (1) Abkürzungen (2) • Man kann die Anfrage kürzer schreiben: SELECT ANR, THEMA FROM AUFGABEN WHERE ATYP = ’H’ • Dies macht Gebrauch von zwei Abkürzungen, die unabhängig von einander sind: 1. Statt T.S (Tupelvariable.Spalte) kann man auch einfach S (nur den Namen der Spalte) schreiben, wenn es nur eine passende Tupelvariable gibt. 2. Wenn man nicht explizit eine Tupelvariable benennt, heißt sie so wie die Tabelle. S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 • Eine Tupelvariable wird immer erstellt: Ist kein Name angegeben, erhält sie den Namen der Relation: SELECT AUFGABEN.ANR, AUFGABEN.THEMA FROM AUFGABEN WHERE AUFGABEN.ATYP = ’H’ • Wenn man also nur FROM AUFGABEN schreibt, wird dies behandelt wie: FROM AUFGABEN AUFGABEN (Die Tupelvariable namens “AUFGABEN ” läuft über alle Zeilen der Tabelle “AUFGABEN ”.) S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-45 2. Einführung in das Relationale Modell und SQL 2-46 FROM-Syntax Abkürzungen (3) • Nach FROM werden in einer Liste, durch Komma getrennt, die benötigten Tabellennamen mit entsprechenden Tupelvariablen angegeben. • Wird ein Tupelvariablen-Name angegeben, z.B. FROM AUFGABEN A so ist es ein Fehler, “AUFGABEN.ANR” zu schreiben. Die Tupelvariable heißt nun “A”, nicht “AUFGABEN”. • Wenn man will, kann man auch nur in Tabellen und Spalten denken, und bei “FROM AUFGABEN A” sagen, daß “A” ein Alias für die Tabelle “AUFGABEN” ist. • Werden Tabellen eines anderen Nutzers verwendet, so muß der Nutzername, durch Punkt getrennt, vor dem Tabellennamen stehen Beispiel: FROM HERRMANN.STUDENTEN S, HERRMANN.BEWERTUNGEN B • In der FROM-Klausel kann auch eine Unterabfrage stehen. S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-47 2. Einführung in das Relationale Modell und SQL 2-48 Terme (2) Terme (1) • Ein Term (oder Ausdruck) ist jeder Teil einer SQLAnfrage, der sich zu einem Datenwert (Element ei- • Terme können aus kleineren Termen zusammengesetzt werden durch nes Datentyps, z.B. Zeichenkette, Zahl) auswerten die vier Grundrechenarten +, -, *, / (für Zahlen), läßt. || (String-Konkatenation) weitere Datentyp-Funktionen (siehe Kapitel 8), z.B. UPPER, ROUND. • Terme sind (u.a.): Spaltenzugriffe, z.B. S.SID. Konstanten/Literale, z.B. ’Lisa’. Zusammengesetzte/geschachtelte Terme, z.B. (B.PUNKTE/A.MAXPT)*100. S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 • Die Argumente (Eingabewerte) eines Operators (wie “||”) oder einer Funktion wie “UPPER” müssen den richtigen Datentyp haben (im Beispiel Zeichenketten sein, keine Zahlen). S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-49 2. Einführung in das Relationale Modell und SQL 2-50 Terme (3) Zusammengesetzte Terme • Terme verwendet man in Bedingungen, z.B. enthält • SQL kennt die übliche Vorrangregel “Punktrech- B.PUNKTE > A.MAXPT * 0.8 nung vor Strichrechnung”, z.B. bedeutet A+B*C: die Terme “B.PUNKTE” und “A.MAXPT * 0.8”. • Auch SELECT-Liste kann beliebige Terme enthalten: A+(B*C), und nicht SELECT NACHNAME || ’, ’ || VORNAME FROM STUDENTEN (A+B)*C. ... Weiss, Lisa Grau, Michael Sommer, Daniel Winter, Iris • Klammern (...) können verwendet werden, um eine bestimmte Struktur zu erzwingen. S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-51 2. Einführung in das Relationale Modell und SQL 2-52 Terme: Syntax Atomare Formeln (1) Spalten-Zugriff: Tupelvariable.Spaltenname • Die Tupelvariable muß unter FROM deklariert sein (eventuell implizit der unter FROM angegebene Tabellenname). • Die Relation, über der die Tupelvariable läuft, muß eine Spalte mit dem Namen haben. • Die Tupelvariable darf weggelassen werden, wenn nur eine Tupelvariable deklariert ist, die über einer Relation mit einer solchen Spalte läuft. • Bedingungen in SQL (u.a. in der WHERE-Klausel) sind logische Formeln. • Logische Formeln bestehen aus atomaren Formeln, die mit “und”, “oder”, “nicht” verknüpft werden (in SQL: AND, OR, NOT). • Die wichtigste Art von atomarer Formel ist der Vergleich, z.B. SID = 101 oder PUNKTE > 8. • Binäre Operatoren: + - * / || S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-53 2. Einführung in das Relationale Modell und SQL 2-54 Einfache Bedingungen (1) Atomare Formeln (2) • Alle Daten der Klausur von “BEWERTUNGEN”: • Vergleichsoperatoren in SQL: SELECT * FROM BEWERTUNGEN WHERE ATYP = ’Z’ = : “ist gleich” <> : “ist verschieden von” < : “ist kleiner als” <= : “ist kleiner oder gleich” • Zeichenketten (Strings) werden mit ’...’ markiert. > : “ist größer als” >= : “ist größer oder gleich” • In Zeichenketten ist die Groß- und Kleinschreibung wichtig (je nach DBMS und Konfiguration). Folgende Anfrage liefert also 0 Zeilen (leere Menge): SID 101 102 103 • Diese Vergleichsoperatoren können sowohl für Zahlen als auch für Zeichenketten verwendet werden. ATYP Z Z Z ANR 1 1 1 PUNKTE 12 10 7 SELECT * FROM BEWERTUNGEN WHERE ATYP = ’z’ S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-55 2. Einführung in das Relationale Modell und SQL 2-56 Einfache Bedingungen (2) • Drucke Thema, AufgabenNr, Typ und Maximalpunktzahl aller Aufgaben, deren Maximalpunktzahl • Man muß Spalten, die in Bedingungen verwendet werden, nicht unbedingt ausdrucken. WHERE wird vor SELECT ausgewertet. größer als 10 ist.: SELECT THEMA, ANR, ATYP, MAXPT FROM AUFGABEN WHERE MAXPT > 10 THEMA SQL Einfache Bedingungen (3) ANR 1 ATYP Z MAXPT 14 • Zahlen werden nicht in ’...’ eingeschlossen! S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 • Z.B.: Drucke Aufgabennummer und Thema aller Hausaufgaben: SELECT ANR, THEMA FROM AUFGABEN WHERE ATYP = ’H’ ANR 1 2 THEMA ER SQL S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-57 Bedingungen (1) 2. Einführung in das Relationale Modell und SQL 2-58 Bedingungen (2) • Aus den atomaren Formeln kann man nun komplexere Formeln (Bedingungen) aufbauen, indem man zwei Formeln mit AND (“und”) verknüpft, z.B. ATYP = ’H’ AND ANR = 1 • Die WHERE-Bedingung wird für jede Kombination von Zeilen der unter FROM stehenden Tabellen ausgewertet. Ist sie wahr, wird die SELECT-Liste ausgegeben. • Eine AND-Bed. ist wahr, wenn beide Teile wahr sind, zwei Formeln mit OR (“oder”) verknüpft, z.B. ANR = 1 OR ANR = 2 eine OR-Bed. ist wahr, wenn ein Teil wahr ist: eine Formel mit NOT (“nicht”) negiert, z.B. NOT ATYP = ’H’ • Da das Ergebnis wieder eine Formel ist, kann man daraus dann noch komplexere Formeln aufbauen. B1 B2 B1 and B2 B1 or B2 not B1 falsch falsch falsch falsch wahr falsch wahr falsch wahr wahr wahr falsch falsch wahr falsch wahr wahr wahr wahr falsch S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-59 2. Einführung in das Relationale Modell und SQL 2-60 Bedingungen (3) Bedingungen (4) • “Geben Sie die SIDs von Lisa und Iris aus”. SELECT SID FROM STUDENTEN Falsch! WHERE VORNAME = ’Lisa’ AND VORNAME = ’Iris’ STUDENTEN SID VORNAME NACHNAME 101 Lisa Weiss 102 Michael Grau 103 Daniel Sommer 104 Iris Winter VORN.=’Lisa’ VORN.=’Iris’ wahr falsch falsch falsch falsch falsch falsch wahr WHERE falsch falsch falsch falsch • Die Bedingung ist immer falsch (inkonsistent). Hier muß “OR” verwendet werden, nicht “AND”. S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 • Um die syntaktische Struktur komplexerer Formeln eindeutig zu machen, gibt es für AND, OR, NOT wie bei “+” und “* Vorrangregeln: NOT hat höchste Priorität, AND hat mittlere Priorität (wie “*”), OR hat niedrigste Priorität (wie “+”). • Weil AND stärker als OR bindet, wird ATYP = ’H’ AND ANR = 1 OR ANR = 2 implizit so geklammert: (ATYP = ’H’ AND ANR = 1) OR ANR = 2 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-61 Bedingungen (5) 2. Einführung in das Relationale Modell und SQL 2-62 Rechnen in SQL • AND und OR müssen auf beiden Seiten vollständige logische Bedingungen haben (etwas, das wahr oder falsch ist). • Somit ist Folgendes ein Syntaxfehler, obwohl es in der natürlichen Sprache erlaubt wäre: SELECT DISTINCT SID Falsch! FROM BEWERTUNGEN WHERE ATYP = ’H’ AND PUNKTE >= 9 AND ANR = 1 OR 2 • Ausnahme: ... BETWEEN ... AND ... Hier bezeichnet das Wort AND keinen logischen Operator. • Man kann Spalten und/oder Konstanten mit den vier Grundrechenarten verknüpfen. • Z.B. AufgabenNr und 80% der Max-Punktz. der SQL-Aufgaben: ANR MAXPKT * 0.8 SELECT ANR, MAXPKT * 0.8 2 8 FROM AUFGABEN 1 11.2 WHERE THEMA = ’SQL’ • Zeichenketten können in den meisten Systemen mit dem Operator || verknüpft (konkateniert) werden (Folie 49). S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-63 2. Einführung in das Relationale Modell und SQL 2-64 Duplikat-Eliminierung (2) Duplikat-Eliminierung (1) • Anfragen können u.U. die gleiche Ergebnis-Zeile mehrfach liefern. • Z.B.: “Gib die Themen aller Aufgaben aus.” SELECT THEMA FROM AUFGABEN THEMA ER SQL SQL • Schreibt man “SELECT DISTINCT” statt “SELECT”, so werden Duplikate eliminiert: SELECT DISTINCT THEMA FROM AUFGABEN THEMA ER SQL • Auch wenn man mehrere Spalten ausgibt, schreibt man DISTINCT nur einmal: SELECT DISTINCT ANR, THEMA FROM AUFGABEN Der Grund ist, daß sich DISTINCT auf ganze Zeilen bezieht, die also in allen Spalten identisch sind. Nur partiell gleiche Zeilen sind wichtig. S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-65 • Die Reihenfolge, in der die Ausgabezeilen gedruckt werden, ist nicht vorhersehbar, wenn man nicht ex• Z.B. Studenten mit SID, sortiert nach Nachnamen: SID VORNAME SELECT SID, VORNAME, NACHNAME 102 Michael 103 Daniel FROM STUDENTEN 101 Lisa ORDER BY NACHNAME 104 Iris 105 Anton NACHNAME Grau Sommer Weiß Winter Winter S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014 2. Einführung in das Relationale Modell und SQL 2-67 Sortierung (3) • Die Reihenfolge der Zeilen für Anton Winter und Iris Winter ist bei der Sortierung nach Nachnamen so nicht festgelegt. • Ein zweites Sortierkriterium ist nötig, das nur relevant ist, wenn die Sortierkriterien davor keine Entscheidung bringen: SID 102 103 101 104 105 VORNAME Michael Daniel Lisa Anton Iris • Beispiel: Gleiche Anfrage, aber Sortierung nach SID, und zwar in umgekehrter Reihenfolge (von groß nach klein: “descending”/“absteigend”): plizit eine Sortierung verlangt (mit ORDER BY). S. Brass, A. Herrmann: Datenbanken und WWW 2-66 Sortierung (2) Sortierung (1) SELECT SID, VORNAME, NACHNAME FROM STUDENTEN ORDER BY NACHNAME, VORNAME 2. Einführung in das Relationale Modell und SQL NACHNAME Grau Sommer Weiß Winter Winter Universität Halle, 2014 SELECT SID, VORNAME, NACHNAME SID VORNAME 105 Anton FROM STUDENTEN 104 Iris ORDER BY SID DESC 103 Daniel 102 101 Michael Lisa NACHNAME Winter Winter Sommer Grau Weiß • Ohne das Schlüsselwort DESC bekommt man aufsteigende Sortierung (von kleinen zu großen Werten). S. Brass, A. Herrmann: Datenbanken und WWW Universität Halle, 2014