Hallo Habr!
Seit ĂŒber 3 Jahren unterrichte ich SQL in verschiedenen Schulungszentren. Eine meiner Beobachtungen ist, dass die SchĂŒler SQL besser beherrschen und verstehen, wenn sie eine Aufgabe festlegen, und nicht nur ĂŒber die Möglichkeiten und theoretischen Grundlagen sprechen.
In diesem Artikel werde ich Ihnen meine Liste von Aufgaben mitteilen, die ich den SchĂŒlern als Hausaufgaben gebe und ĂŒber die wir verschiedene Arten von Brainstorms durchfĂŒhren, was zu einem tiefen und klaren VerstĂ€ndnis von SQL fĂŒhrt.

SQL (ËÉsËkjuËÉl; englische strukturierte Abfragesprache) ist eine deklarative Programmiersprache, mit der Daten in einer relationalen Datenbank erstellt, geĂ€ndert und verwaltet werden, die von einem geeigneten Datenbankverwaltungssystem verwaltet wird.
Erfahren Sie mehrSie können SQL aus verschiedenen
Quellen lesen.
Dieser Artikel soll Ihnen SQL nicht von Grund auf beibringen.
Also lass uns gehen.
Wir werden das bekannte
HR-Schema in Oracle mit seinen Tabellen verwenden (
mehr ):

Ich stelle fest, dass wir nur SELECT-Aufgaben berĂŒcksichtigen werden. Es gibt keine Probleme mit DML und DDL.
Die Aufgaben
Daten einschrÀnken und sortierenMitarbeitertabelle. Holen Sie sich eine Liste mit Informationen zu allen Mitarbeitern
Mitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter mit dem Namen "David"
Lösung SELECT * FROM employees WHERE first_name = 'David';
Mitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter mit job_id gleich 'IT_PROG'
Lösung SELECT * FROM employees WHERE job_id = 'IT_PROG'
Mitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter aus der 50. Abteilung (department_id) mit einem Gehalt (Gehalt) von mehr als 4000
Lösung SELECT * FROM employees WHERE department_id = 50 AND salary > 4000;
Mitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter der 20. und 30. Abteilung (abteilungs_id)
Lösung SELECT * FROM employees WHERE department_id = 20 OR department_id = 30;
Mitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter, deren letzter Buchstabe im Namen "a" ist.
Lösung SELECT * FROM employees WHERE first_name LIKE '%a';
Mitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter der 50. und 80. Abteilung (department_id), die einen Bonus haben (der Wert in der Spalte Commission_Pct ist nicht leer).
Lösung SELECT * FROM employees WHERE (department_id = 50 OR department_id = 80) AND commission_pct IS NOT NULL;
Mitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter, deren Name mindestens 2 Buchstaben 'n' enthÀlt.
Lösung SELECT * FROM employees WHERE first_name LIKE '%n%n%';
Mitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter, deren Name lÀnger als 4 Buchstaben ist
Lösung SELECT * FROM employees WHERE first_name LIKE '%_____%';
Mitarbeitertabelle. Erhalten Sie eine Liste aller Mitarbeiter, deren Gehalt im Bereich von 8000 bis 9000 (einschlieĂlich) liegt.
Lösung SELECT * FROM employees WHERE salary BETWEEN 8000 AND 9000;
Mitarbeitertabelle. Rufen Sie eine Liste aller Mitarbeiter ab, deren Name das Zeichen '%' enthÀlt.
Lösung SELECT * FROM employees WHERE first_name LIKE '%\%%' ESCAPE '\';
Mitarbeitertabelle. Holen Sie sich eine Liste aller ID-Manager
Lösung SELECT DISTINCT manager_id FROM employees WHERE manager_id IS NOT NULL;
Mitarbeitertabelle. Holen Sie sich eine Liste der Mitarbeiter mit ihren Positionen im Format: Donald (sh_clerk)
Lösung SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;
Verwenden einzeiliger Funktionen zum Anpassen der AusgabeMitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter, deren Name lÀnger als 10 Buchstaben ist
Lösung SELECT * FROM employees WHERE LENGTH (first_name) > 10;
Mitarbeitertabelle. Erhalten Sie eine Liste aller Mitarbeiter, deren Name den Buchstaben "b" enthĂ€lt (GroĂ- und Kleinschreibung wird nicht berĂŒcksichtigt).
Lösung SELECT * FROM employees WHERE INSTR (LOWER (first_name), 'b') > 0;
Mitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter, deren Name mindestens 2 Buchstaben 'a' enthÀlt.
Lösung SELECT * FROM employees WHERE INSTR (LOWER (first_name),'a',1,2) > 0;
Mitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter, deren Gehalt ein Vielfaches von 1000 ist
Lösung SELECT * FROM employees WHERE MOD (salary, 1000) = 0;
Mitarbeitertabelle. Rufen Sie die erste dreistellige Nummer der Telefonnummer des Mitarbeiters ab, wenn seine Nummer das Format XXXX.XXX.XXXX hat
Lösung SELECT phone_number, SUBSTR (phone_number, 1, 3) new_phone_number FROM employees WHERE phone_number LIKE '___.___.____';
Abteilungstabelle. Holen Sie sich das erste Wort aus dem Namen der Abteilung fĂŒr diejenigen mit mehr als einem Wort im Namen
Lösung SELECT department_name, SUBSTR (department_name, 1, INSTR (department_name, ' ')-1) first_word FROM departments WHERE INSTR (department_name, ' ') > 0;
Mitarbeitertabelle. Holen Sie sich die Namen der Mitarbeiter ohne den ersten und letzten Buchstaben im Namen
Lösung SELECT first_name, SUBSTR (first_name, 2, LENGTH (first_name) - 2) new_name FROM employees;
Mitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter, deren letzter Buchstabe im Namen 'm' und ein langer Name gröĂer als 5 ist
Lösung SELECT * FROM employees WHERE SUBSTR (first_name, -1) = 'm' AND LENGTH(first_name)>5;
Doppeltisch. Holen Sie sich nÀchsten Freitag Datum
Lösung SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;
Mitarbeitertabelle. Erhalten Sie eine Liste aller Mitarbeiter, die seit ĂŒber 17 Jahren im Unternehmen tĂ€tig sind
Lösung SELECT * FROM employees WHERE MONTHS_BETWEEN (SYSDATE, hire_date) / 12 > 17;
Mitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter, deren letzte Ziffer der Telefonnummer ungerade ist und aus 3 durch einen Punkt getrennten Zahlen besteht
Lösung SELECT * FROM employees WHERE MOD (SUBSTR (phone_number, -1), 2) != 0 AND INSTR (phone_number,'.',1,3) = 0 AND INSTR (phone_number,'.',1,2) > 0;
Mitarbeitertabelle. Rufen Sie eine Liste aller Mitarbeiter ab, deren Job_id-Wert nach dem Zeichen '_' mindestens 3 Zeichen enthÀlt. Dieser Wert nach '_' entspricht jedoch nicht 'CLERK'.
Lösung SELECT * FROM employees WHERE LENGTH (SUBSTR (job_id, INSTR (job_id, '_') + 1)) > 3 AND SUBSTR (job_id, INSTR (job_id, '_') + 1) != 'CLERK';
Mitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter, indem Sie alle '.' Im Wert PHONE_NUMBER ersetzen. auf '-'
Lösung SELECT phone_number, REPLACE (phone_number, '.', '-') new_phone_number FROM employees;
Verwenden von Konvertierungsfunktionen und bedingten AusdrĂŒckenMitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter, die am ersten Tag des Monats zur Arbeit gekommen sind (beliebig)
Lösung SELECT * FROM employees WHERE TO_CHAR (hire_date, 'DD') = '01';
Mitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter, die 2008 zur Arbeit kamen
Lösung SELECT * FROM employees WHERE TO_CHAR (hire_date, 'YYYY') = '2008';
DUAL Tabelle. Zeigen Sie das Datum von morgen im Format an: Morgen ist der zweite Tag im Januar
Lösung SELECT TO_CHAR (SYSDATE, 'fm""Tomorrow is ""Ddspth ""day of"" Month') info FROM DUAL;
Mitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter und das Datum, an dem alle zur Arbeit kamen, im Format: 21. Juni 2007
Lösung SELECT first_name, TO_CHAR (hire_date, 'fmddth ""of"" Month, YYYY') hire_date FROM employees;
Mitarbeitertabelle. Holen Sie sich eine Liste der Mitarbeiter mit um 20% höheren GehÀltern. Gehalt mit Dollarzeichen anzeigen
Lösung SELECT first_name, TO_CHAR (salary + salary * 0.20, 'fm$999,999.00') new_salary FROM employees;
Mitarbeitertabelle. Holen Sie sich eine Liste aller Mitarbeiter, die im Februar 2007 zur Arbeit kommen.
Lösung SELECT * FROM employees WHERE hire_date BETWEEN TO_DATE ('01.02.2007', 'DD.MM.YYYY') AND LAST_DAY (TO_DATE ('01.02.2007', 'DD.MM.YYYY')); SELECT * FROM employees WHERE to_char(hire_date,'MM.YYYY') = '02.2007';
DUAL Tabelle. Nehmen Sie das aktuelle Datum, + Sekunde, + Minute, + Stunde, + Tag, + Monat, + Jahr heraus
Lösung SELECT SYSDATE now, SYSDATE + 1 / (24 * 60 * 60) plus_second, SYSDATE + 1 / (24 * 60) plus_minute, SYSDATE + 1 / 24 plus_hour, SYSDATE + 1 plus_day, ADD_MONTHS (SYSDATE, 1) plus_month, ADD_MONTHS (SYSDATE, 12) plus_year FROM DUAL;
Mitarbeitertabelle. Erhalten Sie eine Liste aller Mitarbeiter mit vollem Gehalt (Gehalt + Provision_Pkt (%)) im Format: 24.000,00 USD
Lösung SELECT first_name, salary, TO_CHAR (salary + salary * NVL (commission_pct, 0), 'fm$99,999.00') full_salary FROM employees;
Mitarbeitertabelle. Erhalten Sie eine Liste aller Mitarbeiter und Informationen zur VerfĂŒgbarkeit von GehaltsprĂ€mien (Ja / Nein)
Lösung SELECT first_name, commission_pct, NVL2 (commission_pct, 'Yes', 'No') has_bonus FROM employees;
Mitarbeitertabelle. Ermitteln Sie das Gehaltsniveau jedes Mitarbeiters: Weniger als 5000 gelten als niedrig, mehr als oder gleich 5000 und weniger als 10000 als normal, mehr als oder gleich 10000 als hoch
Lösung SELECT first_name, salary, CASE WHEN salary < 5000 THEN 'Low' WHEN salary >= 5000 AND salary < 10000 THEN 'Normal' WHEN salary >= 10000 THEN 'High' ELSE 'Unknown' END salary_level FROM employees;
LĂ€ndertabelle. Zeigen Sie fĂŒr jedes Land die Region an, in der es sich befindet: 1-Europa, 2-Amerika, 3-Asien, 4-Afrika (ohne Beitritt)
Lösung SELECT country_name country, DECODE (region_id, 1, 'Europe', 2, 'America', 3, 'Asia', 4, 'Africa', 'Unknown') region FROM countries; SELECT country_name country, CASE region_id WHEN 1 THEN 'Europe' WHEN 2 THEN 'America' WHEN 3 THEN 'Asia' WHEN 4 THEN 'Africa' ELSE 'Unknown' END region FROM countries;
Aggregierte Daten mithilfe der Gruppenfunktionen meldenMitarbeitertabelle. Erhalten Sie einen Bericht ĂŒber department_id mit einem Mindest- und Höchstgehalt, einem frĂŒhen und spĂ€ten Ankunftsdatum bei der Arbeit und der Anzahl der Mitarbeiter. Sortieren nach Anzahl der Mitarbeiter (absteigend)
Lösung SELECT department_id, MIN (salary) min_salary, MAX (salary) max_salary, MIN (hire_date) min_hire_date, MAX (hire_date) max_hire_Date, COUNT (*) count FROM employees GROUP BY department_id order by count(*) desc;
Mitarbeitertabelle. Wie viele Mitarbeiter, deren Namen mit demselben Buchstaben beginnen? Nach Menge sortieren. Zeigen Sie nur, wo die Menge gröĂer als 1 ist
Lösung SELECT SUBSTR (first_name, 1, 1) first_char, COUNT (*) FROM employees GROUP BY SUBSTR (first_name, 1, 1) HAVING COUNT (*) > 1 ORDER BY 2 DESC;
Mitarbeitertabelle. Wie viele Mitarbeiter arbeiten in derselben Abteilung und erhalten dasselbe Gehalt?
Lösung SELECT department_id, salary, COUNT (*) FROM employees GROUP BY department_id, salary HAVING COUNT (*) > 1;
Mitarbeitertabelle. Erhalten Sie einen Bericht darĂŒber, wie viele Mitarbeiter an jedem Wochentag eingestellt wurden. Nach Menge sortieren
Lösung SELECT TO_CHAR (hire_Date, 'Day') day, COUNT (*) FROM employees GROUP BY TO_CHAR (hire_Date, 'Day') ORDER BY 2 DESC;
Mitarbeitertabelle. Erhalten Sie einen Bericht darĂŒber, wie viele Mitarbeiter pro Jahr eingestellt wurden. Nach Menge sortieren
Lösung SELECT TO_CHAR (hire_date, 'YYYY') year, COUNT (*) FROM employees GROUP BY TO_CHAR (hire_date, 'YYYY');
Mitarbeitertabelle. Ermitteln Sie die Anzahl der Abteilungen, in denen Mitarbeiter beschÀftigt sind
Lösung SELECT COUNT (COUNT (*)) department_count FROM employees WHERE department_id IS NOT NULL GROUP BY department_id;
Mitarbeitertabelle. Holen Sie sich eine Liste von department_id mit mehr als 30 Mitarbeitern
Lösung SELECT department_id FROM employees GROUP BY department_id HAVING COUNT (*) > 30;
Mitarbeitertabelle. Holen Sie sich eine Liste von department_id und ein gerundetes Durchschnittsgehalt fĂŒr Mitarbeiter in jeder Abteilung.
Lösung SELECT department_id, ROUND (AVG (salary)) avg_salary FROM employees GROUP BY department_id;
LĂ€ndertabelle. Holen Sie sich eine Liste von region_id die Summe aller Buchstaben aller country_name, in denen mehr als 60
Lösung SELECT region_id FROM countries GROUP BY region_id HAVING SUM (LENGTH (country_name)) > 60;
Mitarbeitertabelle. Rufen Sie eine Liste der Abteilungs-ID ab, in der Mitarbeiter mehrerer (> 1) Job-ID arbeiten
Lösung SELECT department_id FROM employees GROUP BY department_id HAVING COUNT (DISTINCT job_id) > 1;
Mitarbeitertabelle. Holen Sie sich eine Liste von manager_id, deren Anzahl der Untergebenen mehr als 5 betrÀgt und deren Summe aller GehÀlter seiner Untergebenen mehr als 50.000 betrÀgt
Lösung SELECT manager_id FROM employees GROUP BY manager_id HAVING COUNT (*) > 5 AND SUM (salary) > 50000;
Mitarbeitertabelle. Holen Sie sich eine Liste von manager_id, fĂŒr die das durchschnittliche Gehalt aller seiner Untergebenen im Bereich von 6000 bis 9000 liegt, die keine Boni erhalten (Commission_pct ist leer).
Lösung SELECT manager_id, AVG (salary) avg_salary FROM employees WHERE commission_pct IS NULL GROUP BY manager_id HAVING AVG (salary) BETWEEN 6000 AND 9000;
Mitarbeitertabelle. Holen Sie sich das maximale Gehalt von allen Mitarbeitern job_id, die mit dem Wort "CLERK" enden.
Lösung SELECT MAX (salary) max_salary FROM employees WHERE job_id LIKE '%CLERK'; SELECT MAX (salary) max_salary FROM employees WHERE SUBSTR (job_id, -5) = 'CLERK';
Mitarbeitertabelle. Holen Sie sich das maximale Gehalt unter allen DurchschnittsgehÀltern in der Abteilung
Lösung SELECT MAX (AVG (salary)) FROM employees GROUP BY department_id;
Mitarbeitertabelle. Ermitteln Sie die Anzahl der Mitarbeiter mit der gleichen Anzahl von Buchstaben im Namen. Zeigen Sie gleichzeitig nur diejenigen mit einer NamenslÀnge von mehr als 5 und einer Anzahl von Mitarbeitern mit diesem Namen von mehr als 20 an. Sortieren Sie nach NamenslÀnge
Lösung SELECT LENGTH (first_name), COUNT (*) FROM employees GROUP BY LENGTH (first_name) HAVING LENGTH (first_name) > 5 AND COUNT (*) > 20 ORDER BY LENGTH (first_name); SELECT LENGTH (first_name), COUNT (*) FROM employees WHERE LENGTH (first_name) > 5 GROUP BY LENGTH (first_name) HAVING COUNT (*) > 20 ORDER BY LENGTH (first_name);
Anzeigen von Daten aus mehreren Tabellen mithilfe von VerknĂŒpfungenTabelle Mitarbeiter, Abteilungen, Standorte, LĂ€nder, Regionen. Holen Sie sich eine Liste der Regionen und die Anzahl der Mitarbeiter in jeder Region
Lösung SELECT region_name, COUNT (*) FROM employees e JOIN departments d ON (e.department_id = d.department_id) JOIN locations l ON (d.location_id = l.location_id) JOIN countries c ON (l.country_id = c.country_id) JOIN regions r ON (c.region_id = r.region_id) GROUP BY region_name;
Tabelle Mitarbeiter, Abteilungen, Standorte, LĂ€nder, Regionen. Erhalten Sie detaillierte Informationen zu jedem Mitarbeiter:
Vorname, Nachname, Abteilung, Job, StraĂe, Land, Region
Lösung SELECT First_name, Last_name, Department_name, Job_id, street_address, Country_name, Region_name FROM employees e JOIN departments d ON (e.department_id = d.department_id) JOIN locations l ON (d.location_id = l.location_id) JOIN countries c ON (l.country_id = c.country_id) JOIN regions r ON (c.region_id = r.region_id);
Mitarbeitertabelle. Zeigen Sie alle Manager mit mehr als 6 Mitarbeitern
Lösung SELECT man.first_name, COUNT (*) FROM employees emp JOIN employees man ON (emp.manager_id = man.employee_id) GROUP BY man.first_name HAVING COUNT (*) > 6;
Mitarbeitertabelle. Zeigen Sie alle Mitarbeiter an, die niemandem Bericht erstatten
Lösung SELECT emp.first_name FROM employees emp LEFT JOIN employees man ON (emp.manager_id = man.employee_id) WHERE man.FIRST_NAME IS NULL; SELECT first_name FROM employees WHERE manager_id IS NULL;
Mitarbeitertabelle, Job_history. In der Mitarbeitertabelle werden alle Mitarbeiter gespeichert. In der Tabelle Job_history werden die Mitarbeiter gespeichert, die das Unternehmen verlassen haben. Erhalten Sie einen Bericht ĂŒber alle Mitarbeiter und ihren Status im Unternehmen (arbeitet oder verlĂ€sst das Unternehmen mit dem Datum der Abreise)
Ein Beispiel:
Vorname | Status
Jennifer | Hat das Unternehmen am 31. Dezember 2006 verlassen
Clara | Derzeit arbeitet
Lösung SELECT first_name, NVL2 ( end_date, TO_CHAR (end_date, 'fm""Left the company at"" DD ""of"" Month, YYYY'), 'Currently Working') status FROM employees e LEFT JOIN job_history j ON (e.employee_id = j.employee_id);
Tabelle Mitarbeiter, Abteilungen, Standorte, LĂ€nder, Regionen. Holen Sie sich eine Liste der Mitarbeiter, die in Europa leben (region_name)
Lösung SELECT first_name FROM employees JOIN departments USING (department_id) JOIN locations USING (location_id) JOIN countries USING (country_id) JOIN regions USING (region_id) WHERE region_name = 'Europe'; SELECT first_name FROM employees e JOIN departments d ON (e.department_id = d.department_id) JOIN locations l ON (d.location_id = l.location_id) JOIN countries c ON (l.country_id = c.country_id) JOIN regions r ON (c.region_id = r.region_id) WHERE region_name = 'Europe';
Mitarbeitertabelle, Abteilungen. Zeigen Sie alle Abteilungen mit mehr als 30 Mitarbeitern
Lösung SELECT department_name, COUNT (*) FROM employees e JOIN departments d ON (e.department_id = d.department_id) GROUP BY department_name HAVING COUNT (*) > 30;
Mitarbeitertabelle, Abteilungen. Zeigen Sie alle Mitarbeiter an, die keiner Abteilung angehören
Lösung SELECT first_name FROM employees e LEFT JOIN departments d ON (e.department_id = d.department_id) WHERE d.department_name IS NULL; SELECT first_name FROM employees WHERE department_id IS NULL;
Mitarbeitertabelle, Abteilungen. Alle Abteilungen ohne einen Mitarbeiter anzeigen
Lösung SELECT department_name FROM employees e RIGHT JOIN departments d ON (e.department_id = d.department_id) WHERE first_name IS NULL;
Mitarbeitertabelle. Zeigen Sie alle Mitarbeiter an, die keine Untergebenen haben
Lösung SELECT man.first_name FROM employees emp RIGHT JOIN employees man ON (emp.manager_id = man.employee_id) WHERE emp.FIRST_NAME IS NULL;
Tischangestellte, Jobs, Abteilungen. Zeigen Sie Mitarbeiter im Format: Vorname, Jobtitel, Abteilungsname.
Ein Beispiel:
Vorname | Job_title | Abteilungsname
Donald | Versand | Sachbearbeiter Versand
Lösung SELECT first_name, job_title, department_name FROM employees e JOIN jobs j ON (e.job_id = j.job_id) JOIN departments d ON (d.department_id = e.department_id);
Mitarbeitertabelle. Holen Sie sich eine Liste der Mitarbeiter, deren Manager 2005 einen Job bekommen haben, aber gleichzeitig haben diese Mitarbeiter selbst vor 2005 einen Job bekommen
Lösung SELECT emp.* FROM employees emp JOIN employees man ON (emp.manager_id = man.employee_id) WHERE TO_CHAR (man.hire_date, 'YYYY') = '2005' AND emp.hire_date < TO_DATE ('01012005', 'DDMMYYYY');
Mitarbeitertabelle. Holen Sie sich eine Liste der Mitarbeiter, deren Manager im Januar eines jeden Jahres einen Job bekommen haben, und die LÀnge des job_title dieser Mitarbeiter betrÀgt mehr als 15 Zeichen
Lösung SELECT emp.* FROM employees emp JOIN employees man ON (emp.manager_id = man.employee_id) JOIN jobs j ON (emp.job_id = j.job_id) WHERE TO_CHAR (man.hire_date, 'MM') = '01' AND LENGTH (j.job_title) > 15;
Verwenden von Unterabfragen zum Lösen von AbfragenMitarbeitertabelle. Holen Sie sich eine Liste der Mitarbeiter mit dem lÀngsten Namen.
Lösung SELECT * FROM employees WHERE LENGTH (first_name) = (SELECT MAX (LENGTH (first_name)) FROM employees);
Mitarbeitertabelle. Holen Sie sich eine Liste der Mitarbeiter mit einem Gehalt, das ĂŒber dem Durchschnittsgehalt aller Mitarbeiter liegt.
Lösung SELECT * FROM employees WHERE salary > (SELECT AVG (salary) FROM employees);
Tabelle Mitarbeiter, Abteilungen, Standorte. Holen Sie sich eine Stadt, in der Mitarbeiter insgesamt weniger verdienen.
Lösung SELECT city FROM employees e JOIN departments d ON (e.department_id = d.department_id) JOIN locations l ON (d.location_id = l.location_id) GROUP BY city HAVING SUM (salary) = ( SELECT MIN (SUM (salary)) FROM employees e JOIN departments d ON (e.department_id = d.department_id) JOIN locations l ON (d.location_id = l.location_id) GROUP BY city);
Mitarbeitertabelle. Holen Sie sich eine Liste der Mitarbeiter, deren Manager ein Gehalt von mehr als 15.000 erhÀlt.
Lösung SELECT * FROM employees WHERE manager_id IN (SELECT employee_id FROM employees WHERE salary > 15000)
Mitarbeitertabelle, Abteilungen. Alle Abteilungen ohne einen Mitarbeiter anzeigen
Lösung SELECT * FROM departments WHERE department_id NOT IN (SELECT department_id FROM employees WHERE department_id IS NOT NULL);
Mitarbeitertabelle. Zeigen Sie alle Mitarbeiter, die keine Manager sind
Lösung SELECT * FROM employees WHERE employee_id NOT IN (SELECT manager_id FROM employees WHERE manager_id IS NOT NULL)
Mitarbeitertabelle. Zeigen Sie alle Manager mit mehr als 6 Mitarbeitern
Lösung SELECT * FROM employees e WHERE (SELECT COUNT (*) FROM employees WHERE manager_id = e.employee_id) > 6;
Mitarbeitertabelle, Abteilungen. Zeigen Sie Mitarbeitern, die in der IT-Abteilung arbeiten
Lösung SELECT * FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'IT');
Tischangestellte, Jobs, Abteilungen. Zeigen Sie Mitarbeiter im Format: Vorname, Jobtitel, Abteilungsname.
Ein Beispiel:
Vorname | Job_title | Abteilungsname
Donald | Versand | Sachbearbeiter Versand
Lösung SELECT first_name, (SELECT job_title FROM jobs WHERE job_id = e.job_id) job_title, (SELECT department_name FROM departments WHERE department_id = e.department_id) department_name FROM employees e;
Mitarbeitertabelle. Holen Sie sich eine Liste der Mitarbeiter, deren Manager 2005 einen Job bekommen haben, aber gleichzeitig haben diese Mitarbeiter selbst vor 2005 einen Job bekommen
Lösung SELECT * FROM employees WHERE manager_id IN (SELECT employee_id FROM employees WHERE TO_CHAR (hire_date, 'YYYY') = '2005') AND hire_date < TO_DATE ('01012005', 'DDMMYYYY');
Mitarbeitertabelle. Holen Sie sich eine Liste der Mitarbeiter, deren Manager im Januar eines jeden Jahres einen Job bekommen haben, und die LÀnge des job_title dieser Mitarbeiter betrÀgt mehr als 15 Zeichen
Lösung SELECT * FROM employees e WHERE manager_id IN (SELECT employee_id FROM employees WHERE TO_CHAR (hire_date, 'MM') = '01') AND (SELECT LENGTH (job_title) FROM jobs WHERE job_id = e.job_id) > 15;
Das ist alles fĂŒr jetzt.Ich hoffe, die Aufgaben waren interessant und faszinierend.
Wenn möglich, werde ich diese Aufgabenliste ergÀnzen.
Ich freue mich auch ĂŒber Kommentare und VorschlĂ€ge.
PS: Wenn jemand eine interessante SELECT-Aufgabe hat, schreibe in die Kommentare und fĂŒge sie der Liste hinzu.
Vielen Dank.