Ahoj Habr!
Už viac ako 3 roky učím SQL v rôznych školiacich strediskách a jedným z mojich postrehov je, že študenti lepšie ovládajú a rozumejú SQL, ak dostanú zadanie a nie len rozprávanie o možnostiach a teoretických základoch.
V tomto článku sa s vami podelím o môj zoznam problémov, ktoré dávam študentom ako domácu úlohu a pri ktorých vedieme rôzne typy brainstormov, čo vedie k hlbokému a jasnému pochopeniu SQL.
SQL (ˈɛsˈkjuˈɛl; anglický štruktúrovaný dotazovací jazyk) je deklaratívny programovací jazyk, ktorý sa používa na vytváranie, úpravu a správu údajov v relačnej databáze spravovanej vhodným systémom správy databáz.
O SQL si môžete prečítať z rôznych
Cieľom tohto článku nie je naučiť vás SQL od začiatku.
Tak poďme.
Použijeme dobre známe
Podotýkam, že budeme brať do úvahy iba VYBRANÉ úlohy. Nie sú tu žiadne úlohy DML ani DDL.
úlohy
Obmedzenie a triedenie údajov
Tabuľka zamestnancov. Získajte zoznam s informáciami o všetkých zamestnancoch
rozhodnutie
SELECT * FROM employees
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov s názvom 'David'
rozhodnutie
SELECT *
FROM employees
WHERE first_name = 'David';
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov s job_id rovným 'IT_PROG'
rozhodnutie
SELECT *
FROM employees
WHERE job_id = 'IT_PROG'
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov z 50. oddelenia (department_id) s platom (platom) vyšším ako 4000
rozhodnutie
SELECT *
FROM employees
WHERE department_id = 50 AND salary > 4000;
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov z 20. a 30. oddelenia (department_id)
rozhodnutie
SELECT *
FROM employees
WHERE department_id = 20 OR department_id = 30;
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov, ktorých posledné písmeno v ich mene je „a“
rozhodnutie
SELECT *
FROM employees
WHERE first_name LIKE '%a';
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov z 50. a 80. oddelenia (department_id), ktorí majú bonus (hodnota v stĺpci Commission_pct nie je prázdna)
rozhodnutie
SELECT *
FROM employees
WHERE (department_id = 50 OR department_id = 80)
AND commission_pct IS NOT NULL;
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov, ktorých mená obsahujú aspoň 2 písmená „n“
rozhodnutie
SELECT *
FROM employees
WHERE first_name LIKE '%n%n%';
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov, ktorých mená sú dlhšie ako 4 písmená
rozhodnutie
SELECT *
FROM employees
WHERE first_name LIKE '%_____%';
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov, ktorých plat je v rozmedzí od 8000 do 9000 (vrátane)
rozhodnutie
SELECT *
FROM employees
WHERE salary BETWEEN 8000 AND 9000;
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov, ktorých meno obsahuje symbol '%'
rozhodnutie
SELECT *
FROM employees
WHERE first_name LIKE '%%%' ESCAPE '';
Tabuľka zamestnancov. Získajte zoznam všetkých ID manažérov
rozhodnutie
SELECT DISTINCT manager_id
FROM employees
WHERE manager_id IS NOT NULL;
Tabuľka zamestnancov. Získajte zoznam zamestnancov s ich pozíciami vo formáte: Donald(sh_clerk)
rozhodnutie
SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;
Použitie jednoriadkových funkcií na prispôsobenie výstupu
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov, ktorých mená sú dlhšie ako 10 písmená
rozhodnutie
SELECT *
FROM employees
WHERE LENGTH (first_name) > 10;
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov, ktorí majú vo svojom mene písmeno „b“ (nerozlišujú sa malé a veľké písmená)
rozhodnutie
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name), 'b') > 0;
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov, ktorých mená obsahujú aspoň 2 písmená „a“
rozhodnutie
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name),'a',1,2) > 0;
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov, ktorých plat je násobkom 1000
rozhodnutie
SELECT *
FROM employees
WHERE MOD (salary, 1000) = 0;
Tabuľka zamestnancov. Získajte prvé 3-miestne číslo telefónneho čísla zamestnanca, ak je jeho číslo vo formáte XXX.XXX.XXXX
rozhodnutie
SELECT phone_number, SUBSTR (phone_number, 1, 3) new_phone_number
FROM employees
WHERE phone_number LIKE '___.___.____';
Tabuľka oddelení. Získajte prvé slovo z názvu oddelenia pre tých, ktorí majú v názve viac ako jedno slovo
rozhodnutie
SELECT department_name,
SUBSTR (department_name, 1, INSTR (department_name, ' ')-1)
first_word
FROM departments
WHERE INSTR (department_name, ' ') > 0;
Tabuľka zamestnancov. Získajte mená zamestnancov bez prvého a posledného písmena v mene
rozhodnutie
SELECT first_name, SUBSTR (first_name, 2, LENGTH (first_name) - 2) new_name
FROM employees;
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov, ktorých posledné písmeno v mene je „m“ a ktorých meno je dlhšie ako 5
rozhodnutie
SELECT *
FROM employees
WHERE SUBSTR (first_name, -1) = 'm' AND LENGTH(first_name)>5;
Tabuľka Dual. Získajte budúci piatok dátum
rozhodnutie
SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov, ktorí pre spoločnosť pracujú viac ako 17 rokov
rozhodnutie
SELECT *
FROM employees
WHERE MONTHS_BETWEEN (SYSDATE, hire_date) / 12 > 17;
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov, ktorých posledná číslica ich telefónneho čísla je nepárna a pozostáva z 3 čísel oddelených bodkou
rozhodnutie
SELECT *
FROM employees
WHERE MOD (SUBSTR (phone_number, -1), 2) != 0
AND INSTR (phone_number,'.',1,3) = 0;
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov, ktorých hodnota job_id za znakom '_' má aspoň 3 znaky, ale táto hodnota za znakom '_' sa nerovná 'CLERK'
rozhodnutie
SELECT *
FROM employees
WHERE LENGTH (SUBSTR (job_id, INSTR (job_id, '_') + 1)) > 3
AND SUBSTR (job_id, INSTR (job_id, '_') + 1) != 'CLERK';
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov nahradením všetkých „.“ v hodnote PHONE_NUMBER na '-'
rozhodnutie
SELECT phone_number, REPLACE (phone_number, '.', '-') new_phone_number
FROM employees;
Používanie konverzných funkcií a podmienených výrazov
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov, ktorí prišli do práce v prvý deň v mesiaci (akýkoľvek)
rozhodnutie
SELECT *
FROM employees
WHERE TO_CHAR (hire_date, 'DD') = '01';
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov, ktorí prišli do práce v roku 2008
rozhodnutie
SELECT *
FROM employees
WHERE TO_CHAR (hire_date, 'YYYY') = '2008';
Stôl DUAL. Zobraziť zajtrajší dátum vo formáte: Zajtra je druhý januárový deň
rozhodnutie
SELECT TO_CHAR (SYSDATE, 'fm""Tomorrow is ""Ddspth ""day of"" Month') info
FROM DUAL;
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov a dátum príchodu každého zamestnanca do práce vo formáte: 21. jún 2007
rozhodnutie
SELECT first_name, TO_CHAR (hire_date, 'fmddth ""of"" Month, YYYY') hire_date
FROM employees;
Tabuľka zamestnancov. Získajte zoznam zamestnancov so zvýšenými platmi o 20%. Ukážte plat znakom dolára
rozhodnutie
SELECT first_name, TO_CHAR (salary + salary * 0.20, 'fm$999,999.00') new_salary
FROM employees;
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov, ktorí začali pracovať vo februári 2007.
rozhodnutie
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';
Stôl DUAL. Zobrazte aktuálny dátum, + sekundu, + minútu, + hodinu, + deň, + mesiac, + rok
rozhodnutie
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;
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov s plnými platmi (plat + provízia_pct(%)) vo formáte: 24,000.00 XNUMX USD
rozhodnutie
SELECT first_name, salary, TO_CHAR (salary + salary * NVL (commission_pct, 0), 'fm$99,999.00') full_salary
FROM employees;
Tabuľka zamestnancov. Získajte zoznam všetkých zamestnancov a informácie o dostupnosti mzdových bonusov (Áno/Nie)
rozhodnutie
SELECT first_name, commission_pct, NVL2 (commission_pct, 'Yes', 'No') has_bonus
FROM employees;
Tabuľka zamestnancov. Získajte úroveň platu každého zamestnanca: menej ako 5000 5000 sa považuje za nízku úroveň, vyššia alebo rovná 10000 10000 a menej ako XNUMX XNUMX sa považuje za normálnu úroveň, viac ako XNUMX XNUMX sa považuje za vysokú úroveň
rozhodnutie
SELECT first_name,
salary,
CASE
WHEN salary < 5000 THEN 'Low'
WHEN salary >= 5000 AND salary < 10000 THEN 'Normal'
ELSE 'High'
END salary_level
FROM employees;
Tabuľkové krajiny. Pre každú krajinu uveďte región, v ktorom sa nachádza: 1-Európa, 2-Amerika, 3-Ázia, 4-Afrika (bez pripojenia)
rozhodnutie
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;
Vykazovanie agregovaných údajov pomocou skupinových funkcií
Tabuľka zamestnancov. Dostávajte správu podľa department_id s minimálnym a maximálnym platom, skorými a neskorými dátumami príchodu do práce a počtom zamestnancov. Zoradiť podľa počtu zamestnancov (zostupne)
rozhodnutie
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;
Tabuľka zamestnancov. Koľko zamestnancov, ktorých mená začínajú na rovnaké písmeno? Zoradiť podľa množstva. Zobrazte len tie, ktorých množstvo je väčšie ako 1
rozhodnutie
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;
Tabuľka zamestnancov. Koľko zamestnancov pracuje na rovnakom oddelení a dostáva rovnakú mzdu?
rozhodnutie
SELECT department_id, salary, COUNT (*)
FROM employees
GROUP BY department_id, salary
HAVING COUNT (*) > 1;
Tabuľka zamestnancov. Získajte prehľad o tom, koľko zamestnancov bolo prijatých na každý deň v týždni. Zoradiť podľa množstva
rozhodnutie
SELECT TO_CHAR (hire_Date, 'Day') day, COUNT (*)
FROM employees
GROUP BY TO_CHAR (hire_Date, 'Day')
ORDER BY 2 DESC;
Tabuľka zamestnancov. Získajte prehľad o tom, koľko zamestnancov bolo prijatých za rok. Zoradiť podľa množstva
rozhodnutie
SELECT TO_CHAR (hire_date, 'YYYY') year, COUNT (*)
FROM employees
GROUP BY TO_CHAR (hire_date, 'YYYY');
Tabuľka zamestnancov. Zistite počet oddelení, ktoré majú zamestnancov
rozhodnutie
SELECT COUNT (COUNT (*)) department_count
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id;
Tabuľka zamestnancov. Získajte zoznam oddelení, ktoré majú viac ako 30 zamestnancov
rozhodnutie
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (*) > 30;
Tabuľka zamestnancov. Získajte zoznam ID_oddelí a zaokrúhlenú priemernú mzdu zamestnancov v každom oddelení.
rozhodnutie
SELECT department_id, ROUND (AVG (salary)) avg_salary
FROM employees
GROUP BY department_id;
Tabuľkové krajiny. Získajte zoznam region_id súčet všetkých písmen všetkých názvov krajín, v ktorých je viac ako 60
rozhodnutie
SELECT region_id
FROM countries
GROUP BY region_id
HAVING SUM (LENGTH (country_name)) > 60;
Tabuľka zamestnancov. Získajte zoznam department_ids, v ktorých pracujú zamestnanci niekoľkých (>1) job_ids
rozhodnutie
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (DISTINCT job_id) > 1;
Tabuľka zamestnancov. Získajte zoznam manažérov, ktorých počet podriadených je väčší ako 5 a súčet všetkých platov jeho podriadených je väčší ako 50000 XNUMX
rozhodnutie
SELECT manager_id
FROM employees
GROUP BY manager_id
HAVING COUNT (*) > 5 AND SUM (salary) > 50000;
Tabuľka zamestnancov. Získajte zoznam manažérov, ktorých priemerný plat všetkých jeho podriadených je v rozmedzí od 6000 do 9000 a nedostávajú bonusy (provízia_pct je prázdna)
rozhodnutie
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;
Tabuľka zamestnancov. Získajte maximálnu mzdu od všetkých zamestnancov job_id, ktorá končí slovom CLERK
rozhodnutie
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';
Tabuľka zamestnancov. Získajte maximálny plat spomedzi všetkých priemerných platov za oddelenie
rozhodnutie
SELECT MAX (AVG (salary))
FROM employees
GROUP BY department_id;
Tabuľka zamestnancov. Získajte počet zamestnancov s rovnakým počtom písmen v ich mene. Zároveň zobraziť len tých, ktorých dĺžka mena je väčšia ako 5 a počet zamestnancov s rovnakým menom je väčší ako 20. Zoradiť podľa dĺžky mena
rozhodnutie
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);
Zobrazenie údajov z viacerých tabuliek pomocou spojení
Tabuľka Zamestnanci, oddelenia, miesta, krajiny, regióny. Získajte zoznam regiónov a počet zamestnancov v každom regióne
rozhodnutie
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;
Tabuľka Zamestnanci, oddelenia, miesta, krajiny, regióny. Získajte podrobné informácie o každom zamestnancovi:
Krstné_meno, Priezvisko, Oddelenie, Práca, Ulica, Krajina, Región
rozhodnutie
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);
Tabuľka zamestnancov. Zobraziť všetkých manažérov, ktorí majú podriadených viac ako 6 zamestnancov
rozhodnutie
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;
Tabuľka zamestnancov. Ukážte všetkým zamestnancom, ktorí sa nikomu nehlásia
rozhodnutie
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;
Tabuľka Zamestnanci, Job_history. Tabuľka Zamestnanec obsahuje všetkých zamestnancov. Tabuľka Job_history ukladá zamestnancov, ktorí odišli zo spoločnosti. Získajte prehľad o všetkých zamestnancoch a ich statuse v spoločnosti (Pracujú alebo odišli zo spoločnosti s dátumom odchodu)
Príklad:
krstné_meno | postavenie
Jennifer | Spoločnosť opustila 31. decembra 2006
Clara | Práve pracujem
rozhodnutie
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);
Tabuľka Zamestnanci, oddelenia, miesta, krajiny, regióny. Získajte zoznam zamestnancov, ktorí žijú v Európe (region_name)
rozhodnutie
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';
Tabuľka Zamestnanci, oddelenia. Zobraziť všetky oddelenia s viac ako 30 zamestnancami
rozhodnutie
SELECT department_name, COUNT (*)
FROM employees e JOIN departments d ON (e.department_id = d.department_id)
GROUP BY department_name
HAVING COUNT (*) > 30;
Tabuľka Zamestnanci, oddelenia. Zobraziť všetkých zamestnancov, ktorí nie sú v žiadnom oddelení
rozhodnutie
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;
Tabuľka Zamestnanci, oddelenia. Zobraziť všetky oddelenia, v ktorých nie sú žiadni zamestnanci
rozhodnutie
SELECT department_name
FROM employees e
RIGHT JOIN departments d ON (e.department_id = d.department_id)
WHERE first_name IS NULL;
Tabuľka zamestnancov. Ukážte všetkým zamestnancom, ktorí nemajú nikoho podriadeného
rozhodnutie
SELECT man.first_name
FROM employees emp
RIGHT JOIN employees man ON (emp.manager_id = man.employee_id)
WHERE emp.FIRST_NAME IS NULL;
Tabuľka Zamestnanci, Pracovné miesta, Oddelenia. Zobrazte zamestnancov vo formáte: Krstné_meno, Pracovný_názov, Názov_oddelenia.
Príklad:
Krstné_meno | Job_title | Názov oddelenia
Donald | Doprava | Úradník prepravy
rozhodnutie
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);
Tabuľka zamestnancov. Získajte zoznam zamestnancov, ktorých manažéri získali prácu v roku 2005, ale zároveň títo zamestnanci sami získali prácu pred rokom 2005
rozhodnutie
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');
Tabuľka zamestnancov. Získajte zoznam zamestnancov, ktorých manažéri dostali prácu v januári ktoréhokoľvek roka a dĺžka job_title týchto zamestnancov je viac ako 15 znakov
rozhodnutie
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;
Použitie poddotazov na riešenie dotazov
Tabuľka zamestnancov. Získajte zoznam zamestnancov s najdlhším menom.
rozhodnutie
SELECT *
FROM employees
WHERE LENGTH (first_name) =
(SELECT MAX (LENGTH (first_name)) FROM employees);
Tabuľka zamestnancov. Získajte zoznam zamestnancov s platom vyšším ako je priemerný plat všetkých zamestnancov.
rozhodnutie
SELECT *
FROM employees
WHERE salary > (SELECT AVG (salary) FROM employees);
Tabuľka Zamestnanci, Oddelenia, Miesta. Získajte mesto, v ktorom zamestnanci celkovo zarábajú najmenej.
rozhodnutie
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);
Tabuľka zamestnancov. Získajte zoznam zamestnancov, ktorých manažér poberá plat vyšší ako 15000-tisíc.
rozhodnutie
SELECT *
FROM employees
WHERE manager_id IN (SELECT employee_id
FROM employees
WHERE salary > 15000)
Tabuľka Zamestnanci, oddelenia. Zobraziť všetky oddelenia, v ktorých nie sú žiadni zamestnanci
rozhodnutie
SELECT *
FROM departments
WHERE department_id NOT IN (SELECT department_id
FROM employees
WHERE department_id IS NOT NULL);
Tabuľka zamestnancov. Zobraziť všetkých zamestnancov, ktorí nie sú manažérmi
rozhodnutie
SELECT *
FROM employees
WHERE employee_id NOT IN (SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL)
Tabuľka zamestnancov. Zobraziť všetkých manažérov, ktorí majú podriadených viac ako 6 zamestnancov
rozhodnutie
SELECT *
FROM employees e
WHERE (SELECT COUNT (*)
FROM employees
WHERE manager_id = e.employee_id) > 6;
Tabuľka Zamestnanci, oddelenia. Ukážte zamestnancov, ktorí pracujú v IT oddelení
rozhodnutie
SELECT *
FROM employees
WHERE department_id = (SELECT department_id
FROM departments
WHERE department_name = 'IT');
Tabuľka Zamestnanci, Pracovné miesta, Oddelenia. Zobrazte zamestnancov vo formáte: Krstné_meno, Pracovný_názov, Názov_oddelenia.
Príklad:
Krstné_meno | Job_title | Názov oddelenia
Donald | Doprava | Úradník prepravy
rozhodnutie
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;
Tabuľka zamestnancov. Získajte zoznam zamestnancov, ktorých manažéri získali prácu v roku 2005, ale zároveň títo zamestnanci sami získali prácu pred rokom 2005
rozhodnutie
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');
Tabuľka zamestnancov. Získajte zoznam zamestnancov, ktorých manažéri dostali prácu v januári ktoréhokoľvek roka a dĺžka job_title týchto zamestnancov je viac ako 15 znakov
rozhodnutie
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;
To je zatiaľ všetko.
Dúfam, že úlohy boli zaujímavé a vzrušujúce.
Tento zoznam úloh doplním čo najviac.
Budem tiež rád, ak dostanem akékoľvek pripomienky a návrhy.
PS: Ak niekoho napadne zaujímavá SELECT úloha, napíšte do komentárov a ja ju pridám do zoznamu.
Ďakujem.
Zdroj: hab.com