SQL Aufgabe
Markus
- datenbank
1 Frank (no reg)0 Markus1 Frank (no reg)0 Ilja0 Frank (no reg)0 Ilja
0 Markus
0 Ilja0 Markus
Hallo!
Ich mache gerade eine Einschulung in SQL. Und hänge bei einem Beispiel.
Könnt Ihr mir da vielleicht weiterhelfen?
Aufgabe:
Schreiben Sie eine zusammengesetzte Abfrage, um eine Angestelltenliste zu erstellen, die Prozentsätze von Gehaltserhöhungen, Angestellten-IDs sowie altes und neues Gehalt angibt. Angestellte in den Abteilungen 20, 60 und 90 erhalten eine Gehaltserhöhung von 6 %, Angestellte in Abteilung 50 eine Gehaltserhöhung von 11 %, Angestellte in den Abteilungen 10 und 80 eine Gehaltserhöhung von 14 %, und Angestellte in Abteilung 110 erhalten keine Gehaltserhöhung.
======
Folgendes habe ich schon geschafft, aber jetzt weiß ich nicht mehr weiter.
select employee_id,salary
from employees
where department_id in (20, 60, 90)
Liebe Grüße
Markus
Möchtest du einfach das Ergebnis hingeknallt bekommen, oder möchtest du den Weg lernen?
In Abhängigkeit deines Datenbanksystems und dessen SQL Features:
Also für dich:
1. Schritt: Mit welchem Datenbanksystem in welcher Version arbeite ich
2. Schritt: Wo finde ich dazu die Dokumentation
3. Schritt: Beschräftige dich mit den Basisoperatoren wie + und speziell *
4. Schritt: Suche in der Doku nach dem UNION Operator und probier die Beispiele aus, alternativ für den CASE Operator (steht sicher irgendwo in der näheren Umgebung von IF)
5. Schritt: Baue das gelernte in deine Abfrage ein
Gruss, Frank
Hallo!
Du würdest mir schon Helfen wenn Du mir einfach dass Ergebnis zeigen würdest.
Ich habe ja eine SQL Mappe mit Grundlagen wo alles beschrieben steht, aber bei diesem Beispiel sitze ich irgendwie auf der Leitung.
Liebe Grüße
Markus
Hoi,
SQL Mappe mit Grundlagen wo alles beschrieben steht
Alles, ja? Ich meinte sicher nicht deine Schulungsmappe, sondern die Dokumentation (oder auch Onlinehilfe) deines Datenbankservers.
Du würdest mir schon Helfen wenn Du mir einfach dass Ergebnis zeigen würdest.
Das hab ich mir schon fast gedacht.
SELECT name,
salary as SalaryOld,
0.06 AS SalaryRaise,
((salary*0.06)+salary) AS SalaryNew
FROM employees
WHERE department_id IN (20, 60, 90)
UNION
SELECT name,
salary as SalaryOld,
0.04 AS SalaryRaise,
((salary*0.04)+salary) AS SalaryNew
FROM employees
WHERE department_id IN (50, 70)
UNION
SELECT name,
salary as SalaryOld,
0.00 AS SalaryRaise,
((salary*0.00)+salary) AS SalaryNew
FROM employees
WHERE department_id IN (110)
alternativ
SELECT name
salary AS SalaryOld,
case department_id
WHEN 20 THEN ((salary*0.06)+salary)
WHEN 60 THEN ((salary*0.06)+salary)
-- und so weiter
end AS SalaryNew
FROM employees
Wo ist jetzt der Lerneffekt?
Grüsse
Frank
yo Frank,
UNION ALL ist hier besser.
Ilja
Hi Ilya,
könntest du bitte auch erklären warum?
Danke, Frank
yo,
könntest du bitte auch erklären warum?
ein UNION wird immer auf doppelte ausgabe-werte prüfen und sie rausfiltern, eine UNION ALL macht genau das nicht, was hier auch nicht gewünscht ist.
MeisterEder
Schön und gut, Meister Eder!
ein UNION wird immer auf doppelte ausgabe-werte prüfen
Und wie sollten doppelte Ausgabewerte denn bei dieser Abfrage und dem Datenmodell zu Stande kommen?
Employee (Name, Salary, DepartmentId)
Ein Angestellter ist also direkt einer DepartmentId zugeordnet. Von einem komplizierteren Datenmodell (mit Joints und so ;)) war bislang nicht die Rede.
Also UNION ALL ist an der Stelle sicher nicht falsch. :L
Gruss, Frank
Hallo!
Weil du nach dem Datenbanksystem gefragt hast. Ich arbeite gerade mit dem PL/SQL Developer von Allroundautomations v 7.0 auf einer Oracle Database 10g Enterprise Edition Release 10.2.0.3.0
Liebe Grüße
Markus
yo,
ich habe den begriff "zusammengesetzte Abfrage" so noch nicht gehört, vielleicht soll damit UNION gemeint sein, halte ich aber für fragwürdig, zumal hier auch eher UNION ALL in anwendung kommen sollte. ich würde da noch mal nachfragen, ob du wirklich UNION ALL anwenden sollst oder ob du es eben auch mit anderen mitteln lösen kannst. frank hat da ja schon CASE verzweigung angesprochen.
Ilja
Hallo!
SO!
Ich bin jetzt, durch die Hilfe eines Kollegen, zu einem Ergebnis gekommen.
Die Abfrage geht folgendermaßen:
Liebe Grüße
Markus