Einführung in die Wirtschaftsinformatik Teil 9 - Grundlagen der Datenmanipulation Wintersemester 2015/16 Lehrstuhl für Wirtschaftsinformatik und Electronic Government Universität Potsdam Chair of Business Information Systems and Electronic Government University of Potsdam Univ.-Prof. Dr.–Ing. habil. Norbert Gronau Lehrstuhlinhaber | Chairholder August-Bebel-Str. 89 | 14482 Potsdam | Germany Tel Fax +49 331 977 3322 +49 331 977 3406 E-Mail [email protected] Web lswi.de 1 Inhalt Abfragen mit SELECT Operatoren und Ausdrücke Datumsfunktionen 2 Abfragen mit SELECT Operatoren und Ausdrücke Datumsfunktionen 3 Betrachtung der SQL-Anweisungen am Beispiel Struktur der Datenbank "WIProM AG" für die Beispiele in SQL mitarbeiter PERS_NR NAME VORNAME A* LEITER POSITION G* EINSTELLUNG GEHALT ABT_NR PROJ_NR .. abteilung ABT_NR ABT_NAME A* ~ ANREDE G* ~ GEBURTSTAG BETR_TEIL bereich BEREICHSNAME BETR_TEIL BETR_ORT BETRIEBSTEILNAME PLZ ORT STRASSE LAND betriebsort BETR_ORT BETRIEBSTEILNAME PLZ ORT STRASSE LAND projekt PROJ_NR PROJ_NAME arbeitet_in PERS_NR PROJ_BEGINN PERSONALKOSTEN PROJEKTBESCHREIBUNG Projektdaten PROJ_NR PROJ_MA_NR BEGINN ENDE Projektpartner bank BLZ PROJ_LEITER BANK PROJ_NR PROJ_PARTNER ADRESSE 4 SQL-Anweisungen erstellen Keine Unterscheidung zwischen Groß- und Kleinschreibung in SQLSchlüsselworten (Anweisungen) Semikolon - Abschluss einer Anweisung Keine Abkürzung oder Trennung von Schlüsselwörtern Anweisungen können aus einer oder mehreren Zeilen bestehen Sinnvoll: Setzen jeder Klausel in eine eigene Zeile Einrückungen verbessern die Lesbarkeit Nur die Feldinhalte sind casesensitiv. 5 Default-Einstellungen und Ausdrücke Default-Ausrichtung für Überschriften: zentriert ABT_NR ABT_NAME BETR_TEIL Default-Schreibung für Überschriftenanzeige: Großschreibung PROJ_NR PROJ_NAME PROJ_LEITER Ausdrücke und Klammern Eckige Klammern ("[", "]") - optional auswählbare Ausdrücke Geschweifte Klammern ("{", "}") - alternative Ausdrücke stehen untereinander Senkrechte Striche ("|") - trennen alternative Ausdrücke bzw. Werte 6 Anweisung SELECT - Projektion Projektion - Spaltenauswahl Auswahl bestimmter Attribute (Spalten) einer Tabelle Anzeige der Werte aller Entities Die Auswahl von Daten erfolgt bei der Projektion immer spaltenweise. 7 Anweisung SELECT - Selektion Selektion - Zeilenauswahl Auswahl bestimmter Tupel (Zeilen, Datensätze) einer Tabelle Anzeige aller Spalten (Artikel) der ausgewählten Entities entsprechend einer Auswahlbedingung Bezug auf Attributausprägungen Die Auswahl von Daten erfolgt bei der Selektion immer zeilenweise. 8 Anweisung SELECT - Tabellen verknüpfen Join - Kreuzprodukt mehrerer Tabellen Kombination jedes Tupels einer Relation mit jedem Tupel einer anderen Relation Die Auswahl von Daten erfolgt über eine Verknüpfung mehrerer Tabellen als Kreuzprodukt ihrer Spalten. 9 Auswahl aller Spalten - Das Sternchen * SELECT * FROM mitarbeiter; PERS_NR NAME VORNAME A* A_T* LEITER 101001Büchner Edgar H 101002Martens Eugen H 101003Dost Alexander H 101004Fuchs Erna F 101005Rösch Konrad H ….. ….. ….. ….. 101132Neike Bernd H 101133Rohloff Friedrich H 101134Ludwig Jens H 101135Fritzsche Christian H 101136Bode Marie F ….. POSITION 101060Hauptabteilungsleiter 101060Dreher 101059Einkäufer 101060Sekretärin 101047Abteilungsleiter ….. 101075Ingenieur 101075Techniker 101092Elektriker 101092Elektroniker 101092Elektronikerin GEBURTSTAG 23.06.1949 02.08.1948 19.09.1955 22.09.1957 16.03.1955 ….. 02.11.1958 15.08.1966 26.06.1966 01.03.1969 07.06.1974 ABT_NR PROJ_NR 260F 260D 210E 260D 510L 610A 610A 630E 630E 630E P120 P150 P150 A: ANREDE A_T: AKAD_TITEL Mit Auswahl aller Spalten wird die gesamte Tabelle angezeigt. 10 Varianten der Spaltenauswahl Festlegen aller zu projizierenden Spalten SELECT attribut,... attribut:= * tabelle.* FROM tabelle Keine Einschränkung - Ausgabe aller Spalten einer Tabelle Beispiele: SELECT * FROM abteilung; SELECT mitarbeiter.* FROM mitarbeiter; Die Angabe von Tabellen- und Spaltenname erfordert eine Trennung mittels Punkt zwischen beiden. 11 Einschränkung der Spaltenauswahl Auswahl der Spalten über ausgewählte Attribute oder Funktionen SELECT attribut1, attribut2,... attribut:= ausdruck [alias] spalte ausdruck:= tabelle.spalte ... weitere Varianten, z.B. Funktionsaufruf FROM tabelle Beispiele: SELECT pers_nr, abt_nr FROM abteilung; SELECT mitarbeiter.pers_nr, mitarbeiter.abt_nr FROM mitarbeiter; 12 Spaltenauswahl über Attribut- und Tabellennamen Präzise Formulierung mit Angabe des Tabellennamens SELECT attribut1, attribut2,... attribut:= ausdruck [alias] ausdruck:= tabelle.spalte FROM tabelle1, ..; Beispiele: SELECT name, vorname FROM mitarbeiter; SELECT mitarbeiter.name, mitarbeiter.vorname FROM mitarbeiter; SELECT abt_nr, abt_name FROM abteilung; SELECT abteilung.abt_nr, abteilung.abt_name FROM abteilung; 13 Auswahl bestimmter Spalten Spaltenauswahl über korrekte Angabe der Spaltennamen Werden die Spaltennamen falsch geschrieben, erfolgt keine Ausgabe von Daten. 14 Spalten-Aliasnamen Umbenennung von Spaltenüberschriften Sinnvoll bei Berechnungen - Spaltentitel Angabe direkt hinter Spaltennamen Optionale Angabe zwischen Spalten- und Aliasnamen - das Schlüsselwort AS Bei Angabe von Leer- oder Sonderzeichen oder Groß-/ Kleinschreibung - doppelte Anführungszeichen (" ") Standardmäßig werden Aliasnamen in Überschriften in Großbuchstaben angezeigt. Greenberg 2002, S. 66 15 Spaltenreihenfolge und Alias Modifizierte Spaltenauswahl SELECT pers_nr personalnr, abt_nr abteilungsnr, name FROM mitarbeiter; PERSONALNR 101001 101002 101003 101004 101005 ……. 101046 101047 101048 101049 101050 ABTEILUNGSNR NAME 260F Büchner 260D Martens 210E Dost 260D Fuchs 510L Rösch ……. 610A Neike 610A Rohloff 630E Ludwig 630E Fritzsche 630E Bode ……. Die Reihenfolge und Spaltennamen können je nach Bedarf modifiziert werden. 16 Angabe von Spalten-Aliasnamen SELECT name AS Familienname, gehalt*12*provision AS Jahresgehalt FROM mitarbeiter; FAMILIENNAME Schulze ….. Probst Gast JAHRESGEHALT ….. 41400 41400 SELECT pers_nr Personalnr, abt_nr Abteilungsnr, name FROM mitarbeiter; PERSONALNR ABTEILUNGSNR 101001 ……. NAME 260F Büchner ……. ……. Das Schlüsselwort AS weist explizit auf den Alias hin. Greenberg 2002, S. 67 17 Alias mit Groß-/Kleinschreibung Alternative bei Groß-/Kleinschreibung über Anführungszeichen "" Notwendig bei Auftreten von Leerzeichen im Alias SELECT pers_nr AS "Personalnummer", abt_nr, name AS "Familienname" FROM mitarbeiter; Personalnummer 101001 ……. ABT_NR Familienname 260F Büchner ……. ……. SELECT name "Familienname", gehalt*12*provision "jährliches Einkommen" FROM mitarbeiter; Familienname Büchner jährliches Einkommen ….. Probst Gast ….. 41400 41400 18 Abfragen mit SELECT Operatoren und Ausdrücke Datumsfunktionen 19 Arithmetische Ausdrücke Erstellen von Ausdrücken mit Hilfe arithmetischer Operatoren Zulässig in Werten sind nur Daten vom Typ NUMBER und DATE Operator + * / Beschreibung Addieren Subtrahieren Multiplizieren Dividieren SELECT attribut, attribut * Wert FROM tabelle; Operatoren können in jeder Klausel einer SQL-Anweisung mit Ausnahme der FROM-Klausel verwendet werden. Greenberg 2002, S. 59 20 Arithmetische Operatoren Zusätzliche Spalte mit Berechnungsergebnis Existiert nicht in der Tabelle "mitarbeiter" SELECT name, gehalt, gehalt * 1.02 Gehaltserhöhung NAME GEHALT Büchner Martens Dost Fuchs Rösch 10430 2400 3100 3600 ….. Neike Rohloff Ludwig Fritzsche Bode GEHALTSERHÖHUNG 6590 ….. 4000 3200 3100 2910 2550 10638,6 2448 3162 3672 6721,8 ….. 4080 3264 3162 2968,2 2601 Zur besseren Lesbarkeit können Leerzeichen vor und nach dem arithmetischen Operator eingefügt werden. 21 Operatorpriorität Punkt- vor Strichrechnung Multiplikationen und Divisionen vor Additionen und Subtraktionen Auswertung von Operatoren derselben Priorität von links nach rechts Einsatz von Klammern Auswertungen erhalten Prioritäten Anweisungen sind besser lesbar */+a + b * c <> (a + b) * c Die Prioritätsregel für Operatoren entspricht der mathematischen Regel: "Punkt- vor Strichrechnung". Greenberg 2002, S. 61 22 Berechnung mit priorisierten Operatoren Berechnung des Jahresgehaltes plus Einmalzahlung SELECT name, gehalt, 50 + gehalt * 12 FROM mitarbeiter; oder alternativ SELECT name, gehalt, 50 + (gehalt * 12) FROM mitarbeiter; NAME Büchner Martens Dost Fuchs Rösch ….. Neike Rohloff Ludwig Fritzsche Bode GEHALT 10430 2400 3100 3600 6590 ….. 4000 3200 3100 2910 2550 50+GEHALT*12 125210 28850 37250 43250 79130 ….. 48050 38450 37250 34970 30650 23 NULL-Werte in Feldern NULL-Wert steht für nicht verfügbaren, nicht zugewiesenen, unbekannten oder nicht anwendbaren Wert NULL-Wert ist nicht dasselbe wie 0 (Zahl Null) oder Leerzeichen SELECT name, proj_nr FROM mitarbeiter; NAME PROJ_NR Büchner Martens Dost P120 Fuchs Rösch ….. ….. Neike P150 Rohloff Ludwig Fritzsche P150 Bode Leerwerte: Felder ohne Inhalte Greenberg 2002, S. 64 24 NULL-Werte in Feldern NULL-Wert steht für nicht verfügbaren, nicht zugewiesenen, unbekannten oder nicht anwendbaren Wert NULL-Wert ist nicht dasselbe wie 0 (Zahl Null) oder Leerzeichen SELECT name, proj_nr FROM mitarbeiter; NAME PROJ_NR Büchner Martens Dost P120 Fuchs Rösch ….. ….. Neike P150 Rohloff Ludwig Fritzsche P150 Bode Leerwerte: Felder ohne Inhalte Greenberg 2002, S. 64 24 NULL-Werte in arithmetischen Ausdrücken Berechnung des Jahreseinkommens aus Bestandteilen Gehalt und Provision SELECT name, gehalt*12*provision FROM mitarbeiter; NAME Büchner Martens Dost Fuchs GEHALT*12*PROVISION Feld PROVISION ist leer --> Ergebnis ist nicht gleich 0, sondern leer (NULL) ….. Probst Gast Engel ….. ….. 41400 41400 43560 ….. Greenberg 2002, S. 65 25 NULL-Werte in arithmetischen Ausdrücken Berechnung des Jahreseinkommens aus Bestandteilen Gehalt und Provision SELECT name, gehalt*12*provision FROM mitarbeiter; NAME Büchner Martens Dost Fuchs GEHALT*12*PROVISION Feld PROVISION ist leer --> Ergebnis ist nicht gleich 0, sondern leer (NULL) ….. Probst Gast Engel ….. ….. 41400 41400 43560 ….. Greenberg 2002, S. 65 25 Verkettungsoperator Verkettet Spalten oder Zeichenfolgen mit anderen Spalten Darstellung durch zwei senkrechte Striche (||) Erstellt Ergebnisspalte mit einem Zeichenausdruck Ausgabe der Zeichenkette ohne einem Leerzeichen zwischen verketteten Elementen Hinweis: Im weiteren Verlauf wird statt Attribut synonym der Begriff Spalte genutzt. Greenberg 2002, S. 68 26 Text über Verkettungsoperatoren verbinden SELECT anrede || vorname || name AS "Mitarbeiter" FROM mitarbeiter; NAME Plenk Engel Roth Riekhoff Groß Eckert Schulze Grothe John VORNAME Karl Lothar Katharina Monika Hildegard Hans Sylvia Franziska Peter ANREDE H H F F F H F F H Die Spalten können in beliebiger Reihenfolge verkettet werden Ergebnis liefert noch keine befriedigende Ausgabe Das Schlüsselwort AS vor dem Aliasnamen verbessert die Lesbarkeit der SELECT-Klausel. 27 Text über Verkettungsoperatoren verbinden SELECT anrede || vorname || name AS "Mitarbeiter" FROM mitarbeiter; NAME Plenk Engel Roth Riekhoff Groß Eckert Schulze Grothe John VORNAME Karl Lothar Katharina Monika Hildegard Hans Sylvia Franziska Peter ANREDE H H F F F H F F H Die Spalten können in beliebiger Reihenfolge verkettet werden Mitarbeiter HKarlPlenk HLotharEngel FKatharinaRoth FMonikaRiekhoff FHildegardGroß HHansEckert FSylviaSchulze FFranziskaGrothe HPeterJohn Ergebnis liefert noch keine befriedigende Ausgabe Das Schlüsselwort AS vor dem Aliasnamen verbessert die Lesbarkeit der SELECT-Klausel. 27 Literale Zeichenfolgen Zeichen, Zahl oder Datum in der SELECT-Liste Literale Datums- und Zeichenwerte stehen in Hochkommata Ausgabe jeder Zeichenfolge einmal für jede zurückgegebene Zeile SELECT spalte1 || 'zeichen'|'datum'|zahl || spalte2 [...|| spalte_n] FROM tabelle; Verkettungsmöglichkeiten zwischen Spalten entweder über Zeichen oder Datumswert oder numerischen Wert Literale gestalten Spaltenüberschriften in besser lesbarer Form. Greenberg 2002, S. 70 28 Literale und Lesbarkeit von Felddaten SELECT anrede || '. ' || name || ' ist beschäftigt als ' || position "Beschäftigtenliste" FROM mitarbeiter; Beschäftigtenliste H. Plenk ist beschäftigt als Konstrukteur H. Engel ist beschäftigt als Buchhalter F. Roth ist beschäftigt als Controller F. Riekhoff ist beschäftigt als Chefsekretärin F. Groß ist beschäftigt als Sekretärin H. Eckert ist beschäftigt als Wirtschaftsingenieur F. Schulze ist beschäftigt als Arbeitsvorbereiterin F. Grothe ist beschäftigt als Sekretärin H. John ist beschäftigt als Controller 29 Sprachelemente - Daten abfragen (SELECT) Vollständige Form (Grundgerüst) einer SELECT-Anweisung: SELECT ......... DISTINCT ..... FROM ........... WHERE ........ GROUP BY .. ORDER BY ... INTO TEMP .. WAS (Auswahl verwendeter Attribute) Ignoriert Duplikate von Attributwerten WOHER (aus den Tabellen) WOBEI (mit der Bedingung / welche Zeilen) Gruppenbildung von Daten in einer Spalte WIE (Sortierung der Inhalte der Attribute) TEMPORÄR (Name der neuen temporären Tabelle) 30 Abfragen mit SELECT Operatoren und Ausdrücke Datumsfunktionen 31 Datumsfunktionen Möglichkeiten der Arbeit mit Datumswerten Eingabe der Datumswerte in Hochkommata Default-Anzeigeformat - DD.MM.YY DATE SYSDATE Einfachste Form Darstellung des Datums (Feldtyp DATE) als Zeichenkette SELECT SYSDATE FROM DUAL; SYSDATE 06.10.14 Alle Datumsfunktionen geben einen Wert vom Datentyp DATE zurück. 32 Rechnen mit Datumswerten Addition/Subtraktion einer Anzahl von Tagen von einem Datum Differenzbildung zweier Datumswerte - Anzahl der dazwischen liegenden Tage Operation Ergebnis Beschreibung Datum + Zahl Datum Addition Tage zu Datum Datum - Zahl Datum Subtraktion Tage von Datum Datum1 - Datum2 Anzahl von Tagen Subtraktion Datum2 von Datum1 Beispiel: Anzeige des aktuellen Alters der einzelnen Mitarbeiter SELECT name, vorname, (SYSDATE-geburtstag)/365 AS Alter FROM mitarbeiter; Greenberg 2002, S. 141 33 Zusammenfassung - Projektion Projektion SELECT mitarbeiter.name, mitarbeiter.vorname ... Name Vorname ... ... FROM mitarbeiter Primärschlüsselspalte Mit der Projektion werden alle Daten aus den „angesprochenen“ Spalten einer Datenbanktabelle in einer temporären Ausgabetabelle angezeigt. 34 Zusammenfassung - Projektion Projektion SELECT mitarbeiter.name, mitarbeiter.vorname ... Name Vorname ... ... FROM mitarbeiter Primärschlüsselspalte Mit der Projektion werden alle Daten aus den „angesprochenen“ Spalten einer Datenbanktabelle in einer temporären Ausgabetabelle angezeigt. 34 Kontrollfragen Wo finden deklarative Sprachen ihre Anwendung? Welche Merkmale besitzt SQL? Welche Aufgaben können mit DML-Operationen realisiert werden? Kann über DML-Sprachelemente ein neuer Datensatz erzeugt werden? Können Daten auch nach bestimmten Merkmalen abgefragt werden? 35 Literatur Heuer, A./Saake, G.: Datenbanken, Konzepte und Sprachen; 2. Auflage, 1995, Thomson Elmazri, R./Navathe, S. B.: Grundlagen von Datenbanksystemen; 3. Auflage, 2002, Addison-Wesley Greenberg. N./Nathan, P: Professioneller Einstieg in Oracle9i SQL - Band 1; 2002, Oracle 36 Zum Nachlesen Kontakt Univ.-Prof. Dr.-Ing. Norbert Gronau Universität Potsdam August-Bebel-Str. 89 | 14482 Potsdam Germany Tel. +49 331 977 3322 E-Mail [email protected] Gronau, N., Gäbler, A.: Einführung in die Wirtschaftsinformatik GITO Verlag Berlin, 5. Auflage 2014 ISBN 978-3942183901 37