Einführung in die Wirtschaftsinformatik Teil 10 - Erweiterte Funktionen 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 Inhalt Einschränkung der Datenausgabe Operatoren Sortierung von Ergebnissen Single Row-Funktionen Konvertierungsfunktionen Einschränkung der Datenausgabe Operatoren Sortierung von Ergebnissen Single Row-Funktionen Konvertierungsfunktionen Einschränkung von Zeilen durch Auswahl Einschränkung der zurückgegebenen Zeilen über die WHERE-Klausel WHERE-Klausel folgt grundsätzlich der FROM-Klausel SELECT *|{[DISTINCT]spalte|ausdruck [alias], ...} FROM tabelle WHERE Bedingung(en); Die Reihenfolge der Schlüsselworte ist durch die Syntax festgelegt und nicht änderbar. Anzeige und Ausblenden mehrfach vorhandener Werte Abfragen --> Anzeige aller Zeilen, auch mehrfach vorhandene SELECT position FROM mitarbeiter; Ausblenden mit Schlüsselwort DISTINCT (im Sinne von verschieden) SELECT DISTINCT position FROM mitarbeiter; Mehrere Mitarbeiterinnen sind als Sekretärin bzw. als Buchhalterin angestellt --> Anzeige redundanter Daten POSITION POSITION Geschäftsführer Sekretärin Abteilungsleiter Buchhalterin Abteilungsleiterin ….. Programmierer Sekretärin Monteur Auszubildender Praktikant Buchhalterin Geschäftsführer Sekretärin Abteilungsleiter Buchhalterin Abteilungsleiterin ….. Programmierer Sekretärin Monteur Monteur Auszubildender Auszubildender Praktikant Praktikant Meister Buchhalterin Controller Mit Hilfe von DISTINCT einmalige Ausgabe der Position "Sekretärin" bzw. Buchhalterin --> Ausblenden redundanter Daten Abfrageerweiterung mit DISTINCT Angabe mehrerer Spalten nach DISTINCT Auswirkung auf alle gewählten Spalten Ausgabe aller unterschiedlichen Kombinationen der Spalten SELECT DISTINCT position, abt_nr FROM mitarbeiter; POSITION ...... Techniker Dreher Dreher Maschinenschlosser Lackierer Maschinenschlosser Endkontrolleur Sekretärin Konstrukteurin ...... ABT_NR POSITION ...... ...... 260F 260D 260D 260K 260M 260M 260M 310T 320M ...... Techniker Dreher Maschinenschlosser Lackierer Maschinenschlosser Endkontrolleur Sekretärin Konstrukteurin Sekretärin ...... ABT_NR ...... 260F 260D 260K 260M 260M 260M 310T 320M 320M ...... Mehrfachausgabe von Zeilen mit den selben Wertekombinationen wird unterdrückt Anwendung der WHERE-Klausel Bedingung der WHERE-Klausel schränkt Ausgabe ein SELECT pers_nr, anrede, name, position, abt_nr FROM mitarbeiter WHERE anrede = 'H'; Beispiel: Nur Auswahl aller männlichen Mitarbeiter PERS_NR ANREDE NAME POSITION ABT_NR 101001 H Büchner Hauptabteilungsleiter 260F 101002 H Martens Dreher 260D 101003 H Dost Einkäufer 210E ... ... ... ... ... 101133 H Schulz Vertriebsbeauftragter 310V 101134 H Froese Vertriebsleiter 410V 101135 H Seljukow Vertriebsbeauftragter 410V Zeichenfolgen und Datumsangaben Unterscheidung bei Zeichenwerten in Groß-/Kleinschreibung SELECT pers_nr, name, position, abt_nr FROM mitarbeiter WHERE Position = 'Sekretärin'; Datumswerte sind formatabhängig Default-Ausgabeformat für Datumsangaben - DD.MM.YY SELECT pers_nr, name, position, abt_nr FROM mitarbeiter WHERE Geburtstag = '12.12.67'; Zeichenfolgen und Datumswerte werden prinzipiell in Hochkommata '...' gesetzt. Quelle: Greenberg 2002, S. 96 Einschränkung der Datenausgabe Operatoren Sortierung von Ergebnissen Single Row-Funktionen Konvertierungsfunktionen Vergleichsoperatoren Innerhalb der WHERE-Klausel - Vergleich für Zeichen sowie Zeichenketten, numerische und Datumswerte SELECT ... WHERE ausdruck operator wert; Operator = > >= < <= Bedeutung Gleich Größer als Größer/gleich Kleiner als Kleiner/gleich <> Ungleich SELECT name, gehalt FROM mitarbeiter WHERE gehalt >= 2500; Quelle: Greenberg 2002, S. 97 Spezielle Vergleichsoperatoren Operatoren mit stärkerer bzw. erweiterter Filterwirkung Explizite Erfassung leerer Felder über IS NULL-Operator Operator BETWEEN ...AND... IN(set) LIKE IS NULL Quelle: Greenberg 2002, S. 99 Bedeutung Zwischen zwei Werten (einschließlich dieser Werte) Entspricht einem oder mehreren Werte aus einer Werteliste Entspricht einem zu definierenden Zeichenmuster Ist ein NULL-Wert Einsatz der Operatoren (BETWEEN, IN) BETWEEN - Anzeigen von Zeilen basierend auf Wertebereich Zugehörigkeitsoperator IN - Prüfung einer Werteliste NAME Dost Brauer Petersen ... Bode Brauer SELECT name, gehalt FROM mitarbeiter WHERE gehalt BETWEEN 2500 AND 3500; GEHALT 3100 2570 2890 ... 2550 2570 NAME SELECT name, gehalt, abt_nr FROM mitarbeiter WHERE abt_nr IN ('230P','240P','107R'); GEHALT 2800 4270 Groß Eckert ..... Van Der Biest ..... Nograsek ..... Schröder ABT_NR 230P 230P ..... 5180 107R 3770 107R ..... ..... 4400 240P Einsatz der Operatoren (LIKE, IS NULL) LIKE für Zeichenfolgenwerte IS NULL als "Nullwerttester" = leere Zelle SELECT name, vorname, anrede FROM mitarbeiter WHERE name LIKE 'Sch%'; SELECT name, position FROM mitarbeiter WHERE proj_nr IS NULL; Hinweis: Bei Prüfung von Spalten mit NULL-Werten über Operator "=", Ausgabe: "data not found" Die Platzhalterzeichen in LIKE können kombiniert werden. NAME Schneider Schulz ... Schulz Schlank VORNAME Rainer Konrad ... Carola Nils NAME Büchner Martens Fuchs Rösch ANREDE H H ... F H POSITION Hauptabteilungsleiter Dreher Sekretärin Abteilungsleiter ….. Fleischer Durmaz Brauer ….. Projektingenieur Wirtschaftsingenieur Sekretärin Logische Operatoren Verknüpfen mehrerer Bedingungen Kombination von AND und OR in einer Abfrage Quelle: Greenberg 2002, S. 105 Operator Bedeutung AND Gibt TRUE zurück, wenn beide Komponentenbedingungen wahr sind OR Gibt TRUE zurück, wenn mindestens eine der beiden Komponentenbedingungen wahr ist NOT Gibt TRUE zurück, wenn die nachfolgende Bedingung falsch ist Operator AND (UND) AND - Erfüllung beider Bedingungen (wahr) SELECT pers_nr, name, position, gehalt FROM mitarbeiter WHERE gehalt >= 7800 AND position LIKE '%leiter'; PERS_NR AND-Wahrheitstabelle Quelle: Greenberg 2002, S. 106 NAME POSITION GEHALT 101001 Probst Hauptabteilungsleiter 101007 Kettler Abteilungsleiter 8080 101016 Klein Abteilungsleiter 7960 101026 Schulz-Niemeyer Abteilungsleiter 8900 101038 Michalke Abteilungsleiter 8440 AND WAHR FALSCH NULL WAHR WAHR FALSCH NULL FALSCH FALSCH FALSCH FALSCH 10430 NULL NULL FALSCH NULL Operator OR (ODER) OR - mindestens eine der beiden Bedingungen muss wahr sein SELECT pers_nr, name, position, gehalt FROM mitarbeiter WHERE gehalt >= 4500 OR position LIKE '%käufer'; PERS_NR ..... NAME POSITION 101001 Büchner Hauptabteilungsleiter 101003 Dost Einkäufer ..... GEHALT 10430 3100 ..... ..... 101115 Hartmann Entwicklungsingenieur 4580 101116 Gundermann Entwicklungsingenieurin 4700 101119 Schulz Entwicklungsingenieurin 4580 OR-Wahrheitstabelle OR WAHR FALSCH NULL Quelle: Greenberg 2002, S. 107 WAHR WAHR WAHR WAHR FALSCH WAHR FALSCH NULL NULL WAHR NULL NULL Operator NOT (NICHT) NOT - im Sinne von "keine Übereinstimmung" SELECT name, vorname, position FROM mitarbeiter WHERE position NOT IN ('Abteilungsleiterin','Abteilungsleiter','Hauptabteilungsleiter'); NAME VORNAME POSITION Martens Eugen Dreher Dost Alexander Einkäufer Fuchs Erna Sekretärin ..... ..... Fleischer Manfred Durmaz Akin Brauer Ulrike ..... Projektingenieur Wirtschaftsingenieur Sekretärin NOT - Wahrheitstabelle NOT Quelle: Greenberg 2002, S. 108 WAHR FALSCH FALSCH WAHR NULL NULL Prioritätsregeln der Operatoren Prioritätsregeln für Funktionen (analog zu mathematischen Regeln) Nur durch Verwenden von Klammern außer Kraft zu setzen Auswertungsreihenfolge Operator 1 Arithmetische Operatoren 2 Verkettungsoperator 3 Vergleichsoperatoren 4 IS [NOT] NULL, LIKE, [NOT] IN 5 [NOT] BETWEEN 6 Logischer Operator NOT 7 Logischer Operator AND 8 Logischer Operator OR Die Auswertungsreihenfolge lässt sich durch Setzen von Klammern ändern. Quelle: Greenberg 2002, S. 109 Zusammenfassung - Selektion und Projektion SELECT mitarbeiter.name, mitarbeiter.vorname Projektion FROM mitarbeiter WHERE abt_nr IS NOT 20 AND position = "Buchhalter“ Selektion Mit der Selektion werden die Zeilen einer Tabelle ausgewählt. Einschränkung der Datenausgabe Operatoren Sortierung von Ergebnissen Single Row-Funktionen Konvertierungsfunktionen Sortierung mit ORDER BY ORDER BY-Klausel - Sortierung von Ausgabezeilen Aufsteigende Reihenfolge (Grundeinstellung) - ASC (ascending) Absteigende Reihenfolge - DESC (descending) Klausel steht am Ende der SELECT-Anweisung SELECT ausdruck FROM tabelle [WHERE bedingung(en)] [ORDER BY {spalte|ausdruck} [ASC|DESC]]; Sortierung in auf- und absteigender Reihenfolge SELECT name, vorname, position FROM mitarbeiter ORDER BY position ASC; NAME Rösch Beyer Hartmann Müller ….. Schröder Müller-Eickhof Jürgens VORNAME Konrad Maximilian Jens Jörg ….. Robert Petra Maximilian SELECT name, vorname, gehalt FROM mitarbeiter ORDER BY gehalt DESC; POSITION Abteilungsleiter Abteilungsleiter Abteilungsleiter Z Abteilungsleiter ..... Wirtschaftsingenieur Wirtschaftsingenieurin Zeichner Aufsteigende Sortierung der Spalte POSITION Absteigende Sortierung ohne Beispiel Die aufsteigende Sortierung ist als Standard gesetzt. Identische Werte werden willkürlich sortiert. Sortierung nach Spalten-Aliasnamen SELECT name, vorname, gehalt * 12 Jahresgehalt FROM mitarbeiter ORDER BY Jahresgehalt DESC; NAME VORNAME JAHRESGEHALT Reinhard Bernd 672000 Johansson Grit 420000 Krajcsir Martin 384000 Klemm Ljudmilla 384000 Walker John A. 372000 ….. ….. ….. Cho Melanie 8400 Schuster Jens 8400 Schuster Anika 6000 Kohl Melanie 6000 Assmann Niels 6000 Sortierung nach mehreren Spalten Sortierungsreihenfolge bestimmt die Angabe nach ORDER BY Spaltensortierung auch ohne explizite Angabe nach SELECT möglich SELECT name, vorname, gehalt FROM mitarbeiter ORDER BY gehalt DESC, name ASC; NAME Reinhard Johansson Klemm Krajcsir Grauer VORNAME Bernd Grit Ljudmilla Martin Hertha ….. Junge Schuster Assmann Kohl Schuster Willi Jens Nils Melanie Anika GEHALT 56000 35000 32000 32000 6600 ….. 700 700 500 500 500 Sortierung erfolgt zuerst nach Gehalt und dann nach Name Einschränkung der Datenausgabe Operatoren Sortierung von Ergebnissen Single Row-Funktionen Konvertierungsfunktionen SQL-Funktionen Zeilen bearbeiten und Ausgabe von Ergebnissen aus diesen Funktion führt die entsprechende Aktion aus Eingabe Funktion Argument 1 Argument 2 Argument 2 ... ... ... Ausgabe Ergebniswert Argument n SQL-Funktionen enthalten manchmal Argumente und geben immer einen Wert zurück. Quelle: Greenberg 2002, S. 125 Einfügen von Datensätzen mit INSERT Single Row Funktion - Rückgabe - ein Ergebnis pro Zeile Multiple Row Funktion - Rückgabe - ein Ergebnis je Zeilengruppe Funktionen arg Single Row Funktionen UA: In welcher Antwort: Abteilung arbeitet abt_nr = 260D Frau Erna Fuchs? Quelle: Greenberg 2002, S. 126 ausg HA: Wer arbeitet in derselben Abteilung wie Frau Erna Fuchs? arg 1 .... arg n Multiple Row Funktionen ausg Antwort: Kettler Adam Beyer Kern Fuchs Adler Göbel HA - Hauptabfrage UA - Unterabfrage arg - Argument ausg - Ausgabe Merkmale von Single Row Funktionen Datenelemente Bearbeitung jeder zurückgegebenen Zeile aus einer Hauptabfrage Argumente und Werte Spalten oder Ausdrücke - als Argumente akzeptiert Rückgabe eines Ergebnisses als Wert je Zeile funktionsname [(argument1, argument2,...)]; Quelle: Greenberg 2002, S. 127 Erläuterung der Syntax funktionsname - Name der Funktion argument1, argument2 - die von der Funktion verwendeten Argumente (Spaltenname, Ausdruck) Übersicht Single Row Funktionen Zeichenfunktionen Rückgabe von Zeichen- oder numerischen Werten Numerische Funktionen Rückgabe numerischer Werte Konvertierungsfunktionen Konvertierung eines Wertes von einem Datentyp in einen anderen Datumsfunktionen Rückgabe eines Wertes vom Datentyp DATE Übersicht der Zeichenfunktionen Groß-/Kleinschreibung Bearbeitung von Zeichen UPPER CONCAT INITCAP SUBSTR LOWER LENGTH INSTR TRIM REPLACE LPAD RPAD Zeichenfunktionen ermöglichen vielfältige Zeichenmodifikationen und -manipulationen. Funktionen zur Umwandlung der Groß- bzw. Kleinschreibung Zeichenfolgen werden in Groß- oder Kleinbuchstaben gewandelt Komfortable Wandlung von Kleinschreibung mit INITCAP Funktion Ergebnis LOWER('SQL Anweisung') sql anweisung UPPER('SQL Anweisung') SQL ANWEISUNG INITCAP('SQL Anweisung') Sql Anweisung SELECT FUNKTION(ausdruck|'zeichenfolge') FROM tabelle; Quelle: Greenberg 2002, S. 131 Funktion zur Groß-/Kleinschreibung Problemstellung bei falscher Zeichensetzung (Groß-, Kleinschreibung nicht beachtet) - Ausgabe erfolglos SELECT name, vorname, gehalt FROM mitarbeiter WHERE position = 'chief executive officer' no rows selected SELECT name, vorname, gehalt FROM mitarbeiter WHERE position = INITCAP('chief executive officer'); NAME Reinhard VORNAME Bernd GEHALT 56000 Funktionen zum Bearbeiten von Zeichen Funktion Ausgabe CONCAT('Betriebsteil', 'Potsdam') BetriebsteilPotsdam SUBSTR('BetriebsteilPotsdam',1,12) Betriebsteil LENGTH('BetriebsteilPotsdam') 19 INSTR('Betriebsteil', 's') 8 LPAD(gehalt,10,'*') ******3500 RPAD(gehalt, 10, '*') 3500****** TRIM('P ' FROM 'Potsdam') otsdam Quelle: Greenberg 2002, S. 133 Bearbeiten von Zeichen für die Ausgabe SELECT pers_nr, 1 CONCAT(vorname, name) NAME, position, 2 LENGTH(name)LÄNGE, 3 INSTR(name, 'o') "Enthält 'o'?" FROM mitarbeiter WHERE 4 SUBSTR(position,4) = 'käufer'; PERS_NR NAME POSITION LÄNGE Enthält ,o‘? 101003 AlexanderDost Einkäufer 4 2 101025 HelmutPetersen Einkäufer 8 0 0 101056 Quelle: Greenberg 2002, S. 134 HugoHein Einkäufer 4 1 4 2 3 Numerische Funktionen ROUND - rundet Werte auf eine vorgegebene Dezimalstelle Beispiel: ROUND(232.667, 2) 232.67 TRUNC - schneidet Wert bis zu einer bestimmten Dezimalstelle ab Beispiel: TRUNC(232.667, 2) 232.66 MOD - gibt den Rest einer Division zurück Beispiel: MOD(232, 56) 8 Rechnung: 232 / 56 = 4 Rest 8 ROUND rundet nach dem mathematischen Prinzip auf oder ab (Stellenwert >=5 auf, <5 ab). Quelle: Greenberg 2002, S. 135 Numerische Funktionen Pseudospalten - "Spalten", die es in keiner Tabelle wirklich gibt Funktion - Ausgabe aktuelle interne Zeilennummer, aktuelles Datum Ausgabe von Werten grundsätzlich über SELECT-Anweisung DUAL - Dummy-Name als Platzhalter für eine Tabelle Dual-Tabelle - Datenlieferant für Ausgabe Besitzt eine Zeile - einmalige Ausgabe SELECT {wert|funktion} FROM DUAL; SELECT user FROM DUAL; SELECT sysdate FROM DUAL; DUAL ist eine Dummy-Tabelle, mit der Ergebnisse von Funktionen und Berechnungen angezeigt werden können. Einschränkung der Datenausgabe Operatoren Sortierung von Ergebnissen Single Row-Funktionen Konvertierungsfunktionen Übersicht Konvertierungsfunktionen Implizite Datentypkonvertierungen durch Server Explizite Datentypkonvertierungen durch Benutzer mit Hilfe der Konvertierungsfunktionen Datentypkonvertierung Implizite Datentypkonvertierung Explizite Datentypkonvertierung Explizite Datentypkonvertierungen bewirken zuverlässigere SQL-Anweisungen. Quelle: Greenberg 2002, S. 147 Implizite Datentypkonvertierung Konvertierung erfolgt durch Oracle-Server automatisch Konvertierung der Datentypen beim Zuweisen Ursprungsdatentyp VARCHAR2 oder CHAR VARCHAR2 oder CHAR NUMBER Date Zieldatentyp NUMBER DATE VARCHAR2 VARCHAR2 Konvertierung der Datentypen beim Auswerten von Ausdrücken Ursprungsdatentyp VARCHAR2 oder CHAR VARCHAR2 oder CHAR Zieldatentyp NUMBER DATE Konvertierungen von CHAR in NUMBER sind nur erfolgreich, wenn die Zeichenfolge eine gültige Zahl darstellt. Quelle: Greenberg 2002, S. 148f. Explizite Datentypkonvertierung Drei Funktionen für Umwandlung eines Wertes von einem Datentyp Numerischer Wert/Datumswert -> Zeichenkette TO_CHAR(number|date,[format]) Zeichenkette --> Numerischer Wert TO_NUMBER(char,[format]) Zeichenkette --> Datumswert TO_DATE(char,[format]) Funktion TO_CHAR mit Zahlenwerten Übersetzung eines Wertes vom Datentyp NUMBER in VARCHAR2 TO_CHAR(number,[format_model]) Formatelemente (format_model) Beschreibung Beispiel Ausgabe 999999 1234 0 Steht für eine Zahl (Anzahl der 9 bestimmt ErzwingtAnzeigebreite) die Anzeige einer Null ,099999‘ ‘001234‘ $ Setzt ein führendes Dollarzeichen ,$999999‘ ‘$1234‘ L Verwendet lokales Währungssymbol L999999 ‘€1234‘ . Druckt einen Dezimalpunkt 999999.99 1234.00 , Druckt ein Tausendertrennzeichen 1000 1 9 SELECT pers_nr, name, TO_CHAR(gehalt,'L99,999.00') Gehalt FROM mitarbeiter WHERE name = 'Genz'; Quelle: Greenberg 2002, S. 159 PERS_NR NAME 101014 Genz GEHALT €6,800.00 Funktionen verschachteln Beliebige Verschachtelungstiefe der Single Row-Funktionen Auswertung der Funktionen erfolgt von innen nach außen Fkt3(Fkt2 (Fkt1(spalte,argument1),argument2),argument3) Schritt 1 = Ergebnis 1 Schritt 2 = Ergebnis 2 Schritt 3 = Ergebnis 3 SELECT name, NVL(TO_CHAR(leiter), 'Ohne Vorgesetzten') FROM mitarbeiter WHERE leiter IS NULL; NAME Reinhard Fleischer Durmaz NVL(TO_CHAR(leiter), ‘Ohne Vorgesetzten‘) Ohne Vorgesetzten Ohne Vorgesetzten Ohne Vorgesetzten Verschachtelte Funktionen werden grundsätzlich durch runde Klammern getrennt. Quelle: Greenberg 2002, S. 165 Allgemeine Funktionen Einsatzmöglichkeit für alle Datentypen Bezug auf die Verwendung von NULL-Werten NVL (ausdruck1, ausdruck2|wert) NVL2 (ausdruck1, ausdruck2|wert1, ausdruck3|wert2) NULLIF (ausdruck1, ausdruck2) COALESCE (ausdruck1, ausdruck2, ..., ausdruckn) NVL, NVL2, COALESCE - Ausgabe sind konkrete Werte aus ausdruck NULLIF - Vergleich und Ausgabe von ausdruck oder NULL-Wert Alle in Klammern stehenden Ausdrücke enthalten konkrete Werte bzw. Spaltennamen. Quelle: Greenberg 2002, S. 167 Funktion NVL Konvertiert NULL-Werte in konkrete Werte bei folgenden Datentypen DATE, CHARACTER, NUMBER NVL-Konvertierungen für verschiedene Datentypen NVL (ausdruck1, ausdruck2) Forderung - Übereinstimmung der Datentypen Datentyp NUMBER: Beispiel 1: NVL(gehalt,3300) Beispiel 2: NVL(proj_kosten,0) Datentyp CHAR oder VARCHAR2: Beispiel 3: NVL(proj_name,'Nicht verfügbar') Beispiel 4: NVL(position,'Transportarbeiter')) Quelle: Greenberg 2002, S. 168f. Funktion NVL mit numerischem Rückgabewert 1 SELECT name, gehalt, NVL(provision,0), 2 (gehalt*12*NVL(provision,1)) Jahresgehalt FROM mitarbeiter; Berechnung Jahresgehalt aller Angestellten Multiplikation von Gehalt, Anzahl Monate und Provisionssatz Problemstellung: Provisionssatz nur für Verkäufer --> alle anderen Felder der Spalte sind leer NAME Schulze Lange Metz Kettler ... Probst Gast Engel Dost ... GEHALT 4500 7600 4000 6500 ... 3000 3000 3300 4600 ... NVL(PROVISION,0) 0 0 0 0 ... 1 1 1 0 1 ... JAHRESGEHALT 54000 91200 48000 78000 ... 41400 41400 43560 55200 2 ... ..... Anwendung der Funktion NVL2 Inhalt des ersten Ausdrucks legt Rückgabe fest Rückgabe eines NULL-Wertes - Ausgabe des dritten Ausdrucks von NVL2 Rückgabe von Werten - Ausgabe des zweiten Ausdrucks von NVL2 NVL2(ausdruck1, ausdruck2, ausdruck3) SELECT name, gehalt, abt_nr, provision, NVL2(provision, 'Gehalt + Provision','Gehalt') Einkommen FROM mitarbeiter WHERE abt_nr IN ('210E', '107R'); NAME Dost Brauer Petersen Nograsek Ernst Hein Van Der Biest GEHALT 3100 2570 2890 3770 6500 2600 5180 ABT_NR 210E 210E 210E 107R 210E 210E 107R NVL(PROVISION,0) 1 1 1 JAHRESGEHALT Gehalt Gehalt + Provision Gehalt + Provision Gehalt + Provision Gehalt Gehalt Gehalt Funktion NULLIF Vergleich von zwei Ausdrücken Bei Gleichheit - Ausgabe NULL-Wert Bei Ungleichheit - Ausgabe ausdruck1 NULLIF (ausdruck1, ausdruck2) Beispiel: Nur zur Erläuterung der Funktion SELECT name, 1 NULLIF(position, 'Abteilungsleiter') "Nicht leitende Angestellte" FROM mitarbeiter; NAME Schulze Lange Metz Kettler Probst ... Nicht leitende Angestellte Assistent Geschäftsführer Sekretärin NULL-Wert Verkäufer ... 1 Funktion COALESCE Dient der Vermeidung von NULL-Werten Liefert aus variabel langer Parameterliste Wert eines Parameters zurück, der nicht NULL ist Wenn erster Ausdruck kein NULL-Wert - Rückgabe dieses Ausdrucks Rückgabe von ausdruck2,...,n dann, wenn vorhergehender Ausdruck NULL-Wert enthält COALESCE (ausdruck1, ausdruck2, ... ausdruckn) Vorteil der Funktion COALESCE gegenüber der Funktion NVL ist die Angabe von mehr als zwei alternativen Werten. Anwendung der Funktion COALESCE Alternative Anzeige in der Spalte "Jahreseinkommen" Je Zeile nur Auswahl des ersten Ausdrucks ungleich NULL Problem: Berechnung Jahreseinkommen bei mehr als einer Einkommensart nicht möglich SELECT ... COALESCE(12*lohn, 12*gehalt, umsatz*provision) "Jahreseinkommen" FROM ...; LOHN GEHALT UMSATZ PROVISION JAHRESEINKOMMEN 33600 2800 3100 37200 3600 43200 650000 7 42250 41400 3450 740000 7 48100 Kontrollfragen Welche Aufgabe erfüllt die WHERE-Klausel? Welche Bedeutung kommt der Einschränkung der Ausgabe redundanter Daten zu? Mit Hilfe welcher Operatoren kann eine Verknüpfung mehrerer Bedingungen erfolgen? Wie kann eine Liste nach einer bestimmten Spalte sortiert werden? Welches wesentliche Merkmal zeichnet Single Row-Funktionen aus? Literatur Vossen, G.: Datenbankmodelle, Datenbanksprachen und Datenbank- managementsysteme. - 4. Aufl. - Oldenbourg Verlag München 2000 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 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-3-95545-096-0