Zdravo, Habr!
Već više od 3 godine predajem SQL u različitim trening centrima, a jedno od mojih zapažanja je da studenti bolje savladaju i razumeju SQL kada im postavimo zadatak, a ne kada im samo pričamo o mogućnostima i teorijskim osnovama.
U ovom članku ću podeliti sa vama svoj spisak zadataka koje dajem studentima kao domaći zadatak i o kojima vršimo različite brainstorming sesije, što dovodi do dubokog i jasnog razumevanja SQL-a.

SQL (ˈɛsˈkjuˈɛl; eng. structured query language — „jezik strukturiranih upita“) — deklarativni programski jezik, koji se koristi za kreiranje, modifikaciju i upravljanje podacima u relacijskim bazama podataka, kojima upravlja odgovarajući sistem za upravljanje bazama podataka.
O SQL-u se može čitati na različite .
Ovaj članak nije usmeren na to da vas nauči SQL od nule.
Izogibajte se na kilometrsko oddaljenosti državnim in pol državnim podjetjem ter podobnim ustanovam.
Koristićemo svima poznatu u Oracle-u sa njenim tabelama ():

Napominjem da ćemo razmatrati samo zadatke na SELECT. Ovdje nema zadataka na DML i DDL.
Zadaci
Ograničavanje i sortiranje podataka
Tabela Employees. Dobiti spisak sa informacijama o svim zaposlenima
Solution
SELECT * FROM employees
Tabela Employees. Dobiti spisak svih zaposlenih sa imenom 'David'
Solution
SELECT *
FROM employees
WHERE first_name = 'David';
Tabela Employees. Dobiti spisak svih zaposlenih čiji je job_id 'IT_PROG'
Solution
SELECT *
FROM employees
WHERE job_id = 'IT_PROG'
Tabela Employees. Dobiti spisak svih zaposlenih iz 50. odeljenja (department_id) sa platom (salary) većom od 4000
Solution
SELECT *
FROM employees
WHERE department_id = 50 AND salary > 4000;
Tabela Employees. Dobiti spisak svih zaposlenih iz 20. i 30. odeljenja (department_id)
Solution
SELECT *
FROM employees
WHERE department_id = 20 OR department_id = 30;
Tabela Employees. Dobiti spisak svih zaposlenih čija poslednja slova u imenu su 'a'
Solution
SELECT *
FROM employees
WHERE first_name LIKE '%a';
Tabela Employees. Dobiti spisak svih zaposlenih iz 50. i 80. odeljenja (department_id) koji imaju bonus (vrednost u koloni commission_pct nije prazna)
Solution
SELECT *
FROM employees
WHERE (department_id = 50 OR department_id = 80)
AND commission_pct IS NOT NULL;
Tabela Employees. Dobiti spisak svih zaposlenih čije ime sadrži minimum 2 slova 'n'
Solution
SELECT *
FROM employees
WHERE first_name LIKE '%n%n%';
Tabela Employees. Dobiti spisak svih zaposlenih čije ime ima više od 4 slova
Solution
SELECT *
FROM employees
WHERE first_name LIKE '%_____%';
Tabela Employees. Dobiti spisak svih zaposlenih čija plata se kreće između 8000 i 9000 (uključivo)
Solution
SELECT *
FROM employees
WHERE salary BETWEEN 8000 AND 9000;
Tabela Employees. Pridobite seznam vseh zaposlenih, katerih ime vsebuje simbol ‘%’
Solution
SELECT *
FROM employees
WHERE first_name LIKE '%%%' ESCAPE '';
Tabela Employees. Pridobite seznam vseh ID-jev managerjev
Solution
SELECT DISTINCT manager_id
FROM employees
WHERE manager_id IS NOT NULL;
Tabela Employees. Pridobite seznam delavcev s pozicijami v formatu: Donald(sh_clerk)
Solution
SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;
Uporaba enovrstičnih funkcij za prilagoditev izhoda
Tabela Employees. Pridobite seznam vseh zaposlenih, katerih dolžina imena je večja od 10 črk
Solution
SELECT *
FROM employees
WHERE LENGTH (first_name) > 10;
Tabela Employees. Pridobite seznam vseh zaposlenih, katerih ime vsebuje črko ‘b’ (neobčutno za velike/majhne črke)
Solution
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name), 'b') > 0;
Tabela Employees. Pridobite seznam vseh zaposlenih, katerih ime vsebuje vsaj 2 črki ‘a’
Solution
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name),'a',1,2) > 0;
Tabela Employees. Pridobite seznam vseh zaposlenih, katerih plača je deljiva z 1000
Solution
SELECT *
FROM employees
WHERE MOD (salary, 1000) = 0;
Tabela Employees. Pridobite prvih 3 številke telefonske številke zaposlenega, če je njegov številka v formatu XXX.XXX.XXXX
Solution
SELECT phone_number, SUBSTR (phone_number, 1, 3) new_phone_number
FROM employees
WHERE phone_number LIKE '___.___.____';
Tabela Departments. Pridobite prvo besedo iz imena oddelka za tiste, katerih ime vsebuje več kot eno besedo
Solution
SELECT department_name,
SUBSTR (department_name, 1, INSTR (department_name, ' ')-1)
first_word
FROM departments
WHERE INSTR (department_name, ' ') > 0;
Tabela Employees. Pridobite imena zaposlenih brez prve in zadnje črke v imenu
Solution
SELECT first_name, SUBSTR (first_name, 2, LENGTH (first_name) - 2) new_name
FROM employees;
Tabela Employees. Pridobite seznam vseh zaposlenih, katerih zadnja črka v imenu je ‘m’ in dolžina imena je večja od 5
Solution
SELECT *
FROM employees
WHERE SUBSTR (first_name, -1) = 'm' AND LENGTH(first_name) > 5;
Tabela Dual. Pridobite datum naslednjega petka
Solution
SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;
Tabela Employees. Pridobite seznam vseh zaposlenih, ki delajo v podjetju več kot 17 let
Solution
SELECT *
FROM employees
WHERE MONTHS_BETWEEN (SYSDATE, hire_date) / 12 > 17;
Tabela Employees. Pridobite seznam vseh zaposlenih, katerih zadnja cifra telefonske številke je liha in je sestavljena iz 3 številk, ločenih s piko
Solution
SELECT *
FROM employees
WHERE MOD (SUBSTR (phone_number, -1), 2) != 0
AND INSTR (phone_number,'.',1,3) = 0;
Tabela Employees. Pridobite seznam vseh zaposlenih, katerih vrednost job_id po znaku ‘_’ vsebuje vsaj 3 simbole, vendar ta vrednost po ‘_’ ni ‘CLERK’
Solution
IZABERITE *
IZ zaposlenici
GDE DUŽINA (SUBSTR (job_id, INSTR (job_id, '_') + 1)) > 3
I SUBSTR (job_id, INSTR (job_id, '_') + 1) != 'CLERK';
Tabela Zaposlenici. Prikazati spisak svih zaposlenih menjajući u vrednosti PHONE_NUMBER sve ‘.’ u ‘-‘
Solution
IZABERITE telefon_broj, ZAMENITI (telefon_broj, '.', '-') novi_telefon_broj
IZ zaposlenici;
Korišćenje funkcija konverzije i uslovnih izraza
Tabela Zaposlenici. Prikazati spisak svih zaposlenih koji su počeli da rade prvog dana meseca (bilo kog)
Solution
IZABERITE *
IZ zaposlenici
GDE TO_CHAR (datum_zapošljavanja, 'DD') = '01';
Tabela Zaposlenici. Prikazati spisak svih zaposlenih koji su počeli da rade 2008. godine
Solution
IZABERITE *
IZ zaposlenici
GDE TO_CHAR (datum_zapošljavanja, 'YYYY') = '2008';
Tabela DUAL. Prikazati sutrašnji datum u formatu: Sutra je Drugi dan Januara
Solution
IZABERITE TO_CHAR (SYSDATE, 'fm""Sutra je ""Ddspth ""dan od"" Mesec') info
IZ DUAL;
Tabela Zaposlenici. Prikazati spisak svih zaposlenih i datum početka rada svakog u formatu: 21. jun 2007.
Solution
IZABERITE ime, TO_CHAR (datum_zapošljavanja, 'fmddth ""od"" Mesec, YYYY') datum_zapošljavanja
IZ zaposlenici;
Tabela Zaposlenici. Prikazati spisak zaposlenih sa povećanjem plata od 20%. Platu prikazati sa znakom dolara
Solution
IZABERITE ime, TO_CHAR (plata + plata * 0.20, 'fm$999,999.00') nova_plata
IZ zaposlenici;
Tabela Zaposlenici. Prikazati spisak svih zaposlenih koji su počeli da rade u februaru 2007. godine.
Solution
IZABERITE *
IZ zaposlenici
GDE datum_zapošljavanja BETWEEN TO_DATE ('01.02.2007', 'DD.MM.YYYY')
I POSLEDNJI_DAN (TO_DATE ('01.02.2007', 'DD.MM.YYYY'));
IZABERITE *
IZ zaposlenici
GDE to_char(datum_zapošljavanja,'MM.YYYY') = '02.2007';
Tabela DUAL. Prikazati trenutni datum, + sekunda, + minuta, + sat, + dan, + mesec, + godina
Solution
IZABERITE SYSDATE sada,
SYSDATE + 1 / (24 * 60 * 60) plus_sekunda,
SYSDATE + 1 / (24 * 60) plus_minuta,
SYSDATE + 1 / 24 plus_sati,
SYSDATE + 1 plus_dan,
ADD_MONTHS (SYSDATE, 1) plus_mesec,
ADD_MONTHS (SYSDATE, 12) plus_godina
IZ DUAL;
Tabela Zaposlenici. Prikazati spisak svih zaposlenih sa ukupnim platama (plata + commission_pct(%)) u formatu: $24,000.00
Solution
IZABERITE ime, plata, TO_CHAR (plata + plata * NVL (commission_pct, 0), 'fm$99,999.00') puna_plata
IZ zaposlenici;
Tabela Zaposlenici. Prikazati spisak svih zaposlenih i informaciju o prisutnosti bonusa na platu (Da/Ne)
Solution
IZABERITE ime, commission_pct, NVL2 (commission_pct, 'Da', 'Ne') ima_bonus
IZ zaposlenici;
Tabela Zaposlenici. Prikazati nivo plate svakog zaposlenog: Manje od 5000 smatra se Niskim nivoom, Veće ili jednako 5000 i manje od 10000 smatra se Normalnim nivoom, Veće ili jednako 10000 smatra se Visokim nivoom
Solution
IZABERITE ime,
plata,
SLUČAJ
KADA plata = 5000 I plata < 10000 THEN 'Normalan'
DRUGA 'Visok'
KRAJ nivo_plate
IZ zaposlenici;
Tabela Države. Za svaku zemlju prikazati region u kojem se nalazi: 1-Evropa, 2-Amerika, 3-Asija, 4-Afrika (bez Join)
Solution
SELECT country_name country,
DECODE (region_id,
1, 'Eвропа',
2, 'Америка',
3, 'Азия',
4, 'Африка',
'Неизвестно')
region
FROM countries;
SELECT country_name
country,
CASE region_id
WHEN 1 THEN 'Eвропа'
WHEN 2 THEN 'Америка'
WHEN 3 THEN 'Азия'
WHEN 4 THEN 'Африка'
ELSE 'Неизвестно'
END
region
FROM countries;
Отчет агрегированных данных, используя групповые функции
Таблица Сотрудники. Получить отчет по department_id с минимальной и максимальной зарплатой, с ранней и поздней датой приема на работу и с количеством сотрудников. Сортировать по количеству сотрудников (по убыванию)
Solution
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;
Таблица Сотрудники. Сколько сотрудников, имена которых начинаются с одной и той же буквы? Сортировать по количеству. Показывать только те, где количество больше 1
Solution
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;
Таблица Сотрудники. Сколько сотрудников, которые работают в одном и том же отделе и получают одинаковую зарплату?
Solution
SELECT department_id, salary, COUNT (*)
FROM employees
GROUP BY department_id, salary
HAVING COUNT (*) > 1;
Таблица Сотрудники. Получить отчет сколько сотрудников приняли на работу в каждый день недели. Сортировать по количеству
Solution
SELECT TO_CHAR (hire_Date, 'Day') day, COUNT (*)
FROM employees
GROUP BY TO_CHAR (hire_Date, 'Day')
ORDER BY 2 DESC;
Таблица Сотрудники. Получить отчет сколько сотрудников приняли на работу по годам. Сортировать по количеству
Solution
SELECT TO_CHAR (hire_date, 'YYYY') year, COUNT (*)
FROM employees
GROUP BY TO_CHAR (hire_date, 'YYYY');
Таблица Сотрудники. Получить количество департаментов, в которых есть сотрудники
Solution
SELECT COUNT (COUNT (*)) department_count
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id;
Таблица Сотрудники. Получить список department_id, в которых работают больше 30 сотрудников
Solution
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (*) > 30;
Таблица Сотрудники. Получить список department_id и округленную среднюю зарплату работников в каждом департаменте.
Solution
SELECT department_id, ROUND (AVG (salary)) avg_salary
FROM employees
GROUP BY department_id;
Таблица Страны. Получить список region_id, сумма всех букв всех country_name, в которых больше 60-ти
Solution
SELECT region_id
FROM countries
GROUP BY region_id
HAVING SUM (LENGTH (country_name)) > 60;
Таблица Сотрудники. Получить список department_id, в которых работают работники нескольких (>1) job_id
Solution
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (DISTINCT job_id) > 1;
Tabela Zaposlenih. Pribavite listu manager_id koji imaju više od 5 podređenih i zbir svih plata njihovih podređenih veći od 50000
Solution
SELECT manager_id
FROM employees
GROUP BY manager_id
HAVING COUNT (*) > 5 AND SUM (salary) > 50000;
Tabela Zaposlenih. Pribavite listu manager_id čija prosečna plata svih podređenih nalazi se u opsegu od 6000 do 9000 i koji ne primaju bonuse (commission_pct je prazan)
Solution
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;
Tabela Zaposlenih. Pribavite maksimalnu platu svih zaposlenih čiji job_id se završava rečju ‘CLERK’
Solution
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';
Tabela Zaposlenih. Pribavite maksimalnu platu među svim prosečnim platama po departmanu
Solution
SELECT MAX (AVG (salary))
FROM employees
GROUP BY department_id;
Tabela Zaposlenih. Pribavite broj zaposlenih sa istim brojem slova u imenu. Prikazati samo one čije ime ima više od 5 slova i broj zaposlenih sa tim imenom veći od 20. Sortirati po dužini imena
Solution
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);
Prikazivanje podataka iz više tabela koristeći spoj
Tabela Zaposlenih, Departamenti, Lokacije, Države, Regioni. Pribavite listu regiona i broj zaposlenih u svakom regionu
Solution
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;
Tabela Zaposlenih, Departamenti, Lokacije, Države, Regioni. Pribavite detaljne informacije o svakom zaposlenom:
First_name, Last_name, Departament, Job, Ulica, Država, Region
Solution
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);
Tabela Zaposlenih. Prikazati sve menadžere koji imaju više od 6 zaposlenih podredjenih
Solution
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;
Tabela Zaposlenih. Prikazati sve zaposlene koji nikome ne podređuju
Solution
IZBERITE emp.first_name
IZ zaposleni emp
LEVO PRIDRUŽI zaposlenega man NA (emp.manager_id = man.employee_id)
KJER man.FIRST_NAME JE NULL;
IZBERITE first_name
IZ zaposleni
KJER manager_id JE NULL;
Tabela Zaposleni, Job_history. V tabeli Zaposleni so shranjeni vsi zaposleni. V tabeli Job_history so zaposleni, ki so zapustili podjetje. Pridobite poročilo o vseh zaposlenih in o njihovem statusu v podjetju (Aktivni ali zapustili podjetje z datumom odhoda).
Primer:
first_name | status
Jennifer | Zapustila podjetje 31. decembra 2006
Clara | Trenutno zaposleni
Solution
IZBERITE first_name,
NVL2 (
end_date,
TO_CHAR (end_date, 'fm""Zapustil podjetje na"" DD ""v"" Mesec, YYYY'),
'Trenutno zaposleni')
status
IZ zaposleni e LEVO PRIDRUŽI zgodovini dela j NA (e.employee_id = j.employee_id);
Tabela Zaposleni, Oddelki, Lokacije, Države, Regije. Pridobite seznam zaposlenih, ki živijo v Evropi (region_name).
Solution
IZBERITE first_name
IZ zaposleni
PRIDRUŽITE oddelki UPORABNI (department_id)
PRIDRUŽITE lokacije UPORABNI (location_id)
PRIDRUŽITE države UPORABNI (country_id)
PRIDRUŽITE regije UPORABNI (region_id)
KJER region_name = 'Evropa';
IZBERITE first_name
IZ zaposleni e
PRIDRUŽITE oddelki d NA (e.department_id = d.department_id)
PRIDRUŽITE lokacije l NA (d.location_id = l.location_id)
PRIDRUŽITE države c NA (l.country_id = c.country_id)
PRIDRUŽITE regije r NA (c.region_id = r.region_id)
KJER region_name = 'Evropa';
Tabela Zaposleni, Oddelki. Prikazati vse oddelke, v katerih dela več kot 30 zaposlenih.
Solution
IZBERITE department_name, COUNT (*)
IZ zaposleni e PRIDRUŽITE oddelki d NA (e.department_id = d.department_id)
GROUP BY department_name
IMATE COUNT (*) > 30;
Tabela Zaposleni, Oddelki. Prikazati vse zaposlene, ki niso povezani z nobenim oddelkom.
Solution
IZBERITE first_name
IZ zaposleni e
LEVO PRIDRUŽI oddelki d NA (e.department_id = d.department_id)
KJER d.department_name JE NULL;
IZBERITE first_name
IZ zaposleni
KJER department_id JE NULL;
Tabela Zaposleni, Oddelki. Prikazati vse oddelke, v katerih ni nobenega zaposlenega.
Solution
IZBERITE department_name
IZ zaposleni e
DESNO PRIDRUŽI oddelki d NA (e.department_id = d.department_id)
KJER first_name JE NULL;
Tabela Zaposleni. Prikazati vse zaposlene, ki nimajo nikogar v podrejenem položaju.
Solution
IZBERITE man.first_name
IZ zaposleni emp
DESNO PRIDRUŽI zaposleni man NA (emp.manager_id = man.employee_id)
KJER emp.FIRST_NAME JE NULL;
Tabela Zaposleni, Delovna mesta, Oddelki. Prikazati zaposlene v formatu: First_name, Job_title, Department_name.
Primer:
First_name | Job_title | Department_name
Donald | Pošiljanje | Ključavničar
Solution
IZBERITE first_name, job_title, department_name
IZ zaposleni e
PRIDRUŽITE delovna mesta j NA (e.job_id = j.job_id)
PRIDRUŽITE oddelki d NA (d.department_id = e.department_id);
Tabela Zaposleni. Pridobite seznam zaposlenih, katerih managerji so se zaposlili leta 2005, vendar so ti zaposleni začeli delati pred letom 2005.
Solution
IZBERITE emp.*
IZ zaposleni emp PRIDRUŽITE zaposlene man NA (emp.manager_id = man.employee_id)
KJER TO_CHAR (man.hire_date, 'YYYY') = '2005'
IN emp.hire_date < TO_DATE ('01012005', 'DDMMYYYY');
Tabela Zaposleni. Dobiti popis zaposlenika čiji su menadžeri zaposleni u januaru bilo koje godine i čija dužina job_title prelazi 15 karaktera
Solution
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;
Korišćenje podupita za rešavanje upita
Tabela Zaposleni. Dobiti popis zaposlenika sa najdužim imenom.
Solution
SELECT *
FROM employees
WHERE LENGTH (first_name) =
(SELECT MAX (LENGTH (first_name)) FROM employees);
Tabela Zaposleni. Dobiti popis zaposlenika čija plata je veća od prosečne plate svih zaposlenih.
Solution
SELECT *
FROM employees
WHERE salary > (SELECT AVG (salary) FROM employees);
Tabela Zaposleni, Odeljenja, Lokacije. Dobiti grad u kojem zaposleni ukupno zarađuju najmanje.
Solution
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);
Tabela Zaposleni. Dobiti popis zaposlenika čiji menadžer zarađuje više od 15000.
Solution
SELECT *
FROM employees
WHERE manager_id IN (SELECT employee_id
FROM employees
WHERE salary > 15000)
Tabela Zaposleni, Oddelki. Prikazati vse oddelke, v katerih ni nobenega zaposlenega.
Solution
SELECT *
FROM departments
WHERE department_id NOT IN (SELECT department_id
FROM employees
WHERE department_id IS NOT NULL);
Tabela Zaposleni. Prikazati sve zaposlene koji nisu menadžeri
Solution
SELECT *
FROM employees
WHERE employee_id NOT IN (SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL)
Tabela Zaposlenih. Prikazati sve menadžere koji imaju više od 6 zaposlenih podredjenih
Solution
SELECT *
FROM employees e
WHERE (SELECT COUNT (*)
FROM employees
WHERE manager_id = e.employee_id) > 6;
Tabela Zaposleni, Odeljenja. Prikazati zaposlenike koji rade u IT odeljenju
Solution
SELECT *
FROM employees
WHERE department_id = (SELECT department_id
FROM departments
WHERE department_name = 'IT');
Tabela Zaposleni, Delovna mesta, Oddelki. Prikazati zaposlene v formatu: First_name, Job_title, Department_name.
Primer:
First_name | Job_title | Department_name
Donald | Pošiljanje | Ključavničar
Solution
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;
Tabela Zaposleni. Pridobite seznam zaposlenih, katerih managerji so se zaposlili leta 2005, vendar so ti zaposleni začeli delati pred letom 2005.
Solution
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');
Tabela Zaposleni. Dobiti popis zaposlenika čiji su menadžeri zaposleni u januaru bilo koje godine i čija dužina job_title prelazi 15 karaktera
Solution
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 zasad sve.
Nadam se da su zadaci bili zanimljivi i uzbudljivi.
Nastaviću da dodajem ovaj spisak zadataka koliko budem mogao.
Tudi bom vesel vseh pripomb in predlogov.
P.S.: Če komu pade na pamet zanimiva naloga za SELECT, mi pišite v komentarjih, dodal bom na seznam.
Hvala.
Izvor: habr.com
