Single Row-Funktionen - Lehrstuhl für Wirtschaftsinformatik und

Werbung
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
Herunterladen