Hallo Habr!
Ik geef al meer dan 3 jaar les in SQL in verschillende trainingscentra, en een van mijn observaties is dat studenten SQL beter beheersen en begrijpen als ze een taak krijgen, en niet alleen praten over de mogelijkheden en theoretische onderbouwingen.
In dit artikel deel ik mijn lijst met taken die ik studenten als huiswerk geef en waarover we verschillende soorten brainstormsessies houden, wat leidt tot een diep en duidelijk begrip van SQL.
SQL (ΛΙskjuΛΙl; eng. Structured Query Language) is een declaratieve programmeertaal die wordt gebruikt voor het maken, wijzigen en beheren van gegevens in een relationele database die wordt beheerd door een geschikt databasebeheersysteem.
U kunt op verschillende manieren over SQL lezen
Dit artikel is niet bedoeld om u vanaf het begin SQL te leren.
Dus laten we gaan.
We zullen de bekende gebruiken
Ik merk op dat we alleen taken op SELECT zullen overwegen. Er zijn geen taken op DML en DDL.
taken
Gegevens beperken en sorteren
Medewerkers tafel. Ontvang een lijst met informatie over alle werknemers
beslissing
SELECT * FROM employees
Medewerkers tafel. Krijg een lijst van alle werknemers met de naam 'David'
beslissing
SELECT *
FROM employees
WHERE first_name = 'David';
Medewerkers tafel. Krijg een lijst van alle werknemers met job_id gelijk aan 'IT_PROG'
beslissing
SELECT *
FROM employees
WHERE job_id = 'IT_PROG'
Medewerkers tafel. Krijg een lijst van alle werknemers van de 50e afdeling (department_id) met een salaris (salaris) hoger dan 4000
beslissing
SELECT *
FROM employees
WHERE department_id = 50 AND salary > 4000;
Medewerkers tafel. Krijg een lijst van alle medewerkers van de 20e en van de 30e afdeling (department_id)
beslissing
SELECT *
FROM employees
WHERE department_id = 20 OR department_id = 30;
Medewerkers tafel. Krijg een lijst van alle werknemers waarvan de laatste letter in hun naam een ββ'a' is
beslissing
SELECT *
FROM employees
WHERE first_name LIKE '%a';
Medewerkers tafel. Krijg een lijst van alle werknemers van de 50e en van de 80e afdeling (department_id) die een bonus hebben (de waarde in de kolom commission_pct is niet leeg)
beslissing
SELECT *
FROM employees
WHERE (department_id = 50 OR department_id = 80)
AND commission_pct IS NOT NULL;
Medewerkers tafel. Krijg een lijst van alle werknemers waarvan de naam minstens 2 letters 'n' bevat
beslissing
SELECT *
FROM employees
WHERE first_name LIKE '%n%n%';
Medewerkers tafel. Krijg een lijst van alle werknemers waarvan de naam langer is dan 4 letters
beslissing
SELECT *
FROM employees
WHERE first_name LIKE '%_____%';
Medewerkers tafel. Krijg een lijst van alle werknemers met een salaris tussen 8000 en 9000 (inclusief)
beslissing
SELECT *
FROM employees
WHERE salary BETWEEN 8000 AND 9000;
Medewerkers tafel. Krijg een lijst van alle werknemers waarvan de naam het symbool '%' bevat
beslissing
SELECT *
FROM employees
WHERE first_name LIKE '%%%' ESCAPE '';
Medewerkers tafel. Krijg een lijst met alle manager-ID's
beslissing
SELECT DISTINCT manager_id
FROM employees
WHERE manager_id IS NOT NULL;
Medewerkers tafel. Krijg een lijst van werknemers met hun posities in het formaat: Donald(sh_clerk)
beslissing
SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;
Functies met één rij gebruiken om de uitvoer aan te passen
Medewerkers tafel. Krijg een lijst van alle werknemers waarvan de naam langer is dan 10 letters
beslissing
SELECT *
FROM employees
WHERE LENGTH (first_name) > 10;
Medewerkers tafel. Krijg een lijst van alle werknemers die de letter 'b' in hun naam hebben (niet hoofdlettergevoelig)
beslissing
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name), 'b') > 0;
Medewerkers tafel. Krijg een lijst van alle werknemers waarvan de naam minstens 2 letters 'a' bevat
beslissing
SELECT *
FROM employees
WHERE INSTR (LOWER (first_name),'a',1,2) > 0;
Medewerkers tafel. Krijg een lijst van alle werknemers van wie het salaris een veelvoud is van 1000
beslissing
SELECT *
FROM employees
WHERE MOD (salary, 1000) = 0;
Medewerkers tafel. Ontvang het eerste 3-cijferige nummer van het telefoonnummer van de werknemer als zijn nummer de notatie Π₯Π₯Π₯.Π₯Π₯Π₯.Π₯Π₯Π₯Π₯ heeft
beslissing
SELECT phone_number, SUBSTR (phone_number, 1, 3) new_phone_number
FROM employees
WHERE phone_number LIKE '___.___.____';
Afdelingen tabel. Haal het eerste woord uit de afdelingsnaam voor degenen met meer dan één woord in de naam
beslissing
SELECT department_name,
SUBSTR (department_name, 1, INSTR (department_name, ' ')-1)
first_word
FROM departments
WHERE INSTR (department_name, ' ') > 0;
Medewerkers tafel. Krijg werknemersnamen zonder de eerste en laatste letter in de naam
beslissing
SELECT first_name, SUBSTR (first_name, 2, LENGTH (first_name) - 2) new_name
FROM employees;
Medewerkers tafel. Krijg een lijst van alle werknemers waarvan de laatste letter in de naam gelijk is aan 'm' en de lengte van de naam groter is dan 5
beslissing
SELECT *
FROM employees
WHERE SUBSTR (first_name, -1) = 'm' AND LENGTH(first_name)>5;
Dubbele tafel. Ontvang de datum van aanstaande vrijdag
beslissing
SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;
Medewerkers tafel. Ontvang een lijst van alle werknemers die al meer dan 17 jaar bij het bedrijf werken
beslissing
SELECT *
FROM employees
WHERE MONTHS_BETWEEN (SYSDATE, hire_date) / 12 > 17;
Medewerkers tafel. Krijg een lijst van alle werknemers waarvan het laatste cijfer van het telefoonnummer oneven is en bestaat uit 3 cijfers gescheiden door een punt
beslissing
SELECT *
FROM employees
WHERE MOD (SUBSTR (phone_number, -1), 2) != 0
AND INSTR (phone_number,'.',1,3) = 0;
Medewerkers tafel. Krijg een lijst van alle werknemers wiens job_id waarde na het '_' teken minstens 3 karakters heeft, maar deze waarde na de '_' is niet gelijk aan 'CLERK'
beslissing
SELECT *
FROM employees
WHERE LENGTH (SUBSTR (job_id, INSTR (job_id, '_') + 1)) > 3
AND SUBSTR (job_id, INSTR (job_id, '_') + 1) != 'CLERK';
Medewerkers tafel. Krijg een lijst van alle werknemers door alle '.' in de waarde PHONE_NUMBER te vervangen op '-'
beslissing
SELECT phone_number, REPLACE (phone_number, '.', '-') new_phone_number
FROM employees;
Conversiefuncties en voorwaardelijke uitdrukkingen gebruiken
Medewerkers tafel. Krijg een lijst van alle werknemers die op de eerste dag van de maand (willekeurig) zijn komen werken
beslissing
SELECT *
FROM employees
WHERE TO_CHAR (hire_date, 'DD') = '01';
Medewerkers tafel. Krijg een lijst van alle werknemers die in 2008 zijn komen werken
beslissing
SELECT *
FROM employees
WHERE TO_CHAR (hire_date, 'YYYY') = '2008';
DUBBELE tafel. Toon de datum van morgen in het formaat: Morgen is de tweede dag van januari
beslissing
SELECT TO_CHAR (SYSDATE, 'fm""Tomorrow is ""Ddspth ""day of"" Month') info
FROM DUAL;
Medewerkers tafel. Krijg een lijst van alle werknemers en hun startdatum in het formaat: 21 juni 2007
beslissing
SELECT first_name, TO_CHAR (hire_date, 'fmddth ""of"" Month, YYYY') hire_date
FROM employees;
Medewerkers tafel. Ontvang een lijst met werknemers met een salarisverhoging van 20%. Toon salaris met dollarteken
beslissing
SELECT first_name, TO_CHAR (salary + salary * 0.20, 'fm$999,999.00') new_salary
FROM employees;
Medewerkers tafel. Krijg een lijst van alle werknemers die in februari 2007 zijn komen werken.
beslissing
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';
DUBBELE tafel. Exporteer huidige datum, + seconde, + minuut, + uur, + dag, + maand, + jaar
beslissing
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;
Medewerkers tafel. Krijg een lijst van alle werknemers met volledige salarissen (salaris + commissie_pct(%)) in het formaat: $ 24,000.00
beslissing
SELECT first_name, salary, TO_CHAR (salary + salary * NVL (commission_pct, 0), 'fm$99,999.00') full_salary
FROM employees;
Medewerkers tafel. Krijg een lijst van alle werknemers en informatie over de beschikbaarheid van salarisbonussen (Ja/Nee)
beslissing
SELECT first_name, commission_pct, NVL2 (commission_pct, 'Yes', 'No') has_bonus
FROM employees;
Medewerkers tafel. Krijg het salarisniveau van elke werknemer: minder dan 5000 wordt beschouwd als laag niveau, groter dan of gelijk aan 5000 en minder dan 10000 wordt beschouwd als normaal niveau, groter dan of gelijk aan 10000 wordt beschouwd als hoog niveau
beslissing
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;
Landen tabel. Toon voor elk land de regio waarin het zich bevindt: 1-Europa, 2-Amerika, 3-AziΓ«, 4-Afrika (zonder Join)
beslissing
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;
Geaggregeerde gegevens rapporteren met behulp van de groepsfuncties
Medewerkers tafel. Krijg een rapport van department_id met minimum en maximum salaris, vroege en late aankomstdata en aantal werknemers. Sorteren op aantal medewerkers (desc)
beslissing
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;
Medewerkers tafel. Hoeveel werknemers waarvan de naam met dezelfde letter begint? Sorteer op aantal. Toon alleen die waarvan het getal groter is dan 1
beslissing
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;
Medewerkers tafel. Hoeveel werknemers werken op dezelfde afdeling en ontvangen hetzelfde salaris?
beslissing
SELECT department_id, salary, COUNT (*)
FROM employees
GROUP BY department_id, salary
HAVING COUNT (*) > 1;
Medewerkers tafel. Ontvang een rapport van het aantal werknemers dat op elke dag van de week is aangenomen. Sorteer op aantal
beslissing
SELECT TO_CHAR (hire_Date, 'Day') day, COUNT (*)
FROM employees
GROUP BY TO_CHAR (hire_Date, 'Day')
ORDER BY 2 DESC;
Medewerkers tafel. Ontvang een rapport over het aantal werknemers dat per jaar is aangenomen. Sorteer op aantal
beslissing
SELECT TO_CHAR (hire_date, 'YYYY') year, COUNT (*)
FROM employees
GROUP BY TO_CHAR (hire_date, 'YYYY');
Medewerkers tafel. Krijg het aantal afdelingen dat werknemers heeft
beslissing
SELECT COUNT (COUNT (*)) department_count
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id;
Medewerkers tafel. Krijg een lijst van department_id met meer dan 30 werknemers
beslissing
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (*) > 30;
Medewerkers tafel. Krijg een lijst met department_ids en het afgeronde gemiddelde salaris van werknemers in elke afdeling.
beslissing
SELECT department_id, ROUND (AVG (salary)) avg_salary
FROM employees
GROUP BY department_id;
Landen tabel. Krijg een lijst van region_id som van alle letters van alle country_names waarin meer dan 60
beslissing
SELECT region_id
FROM countries
GROUP BY region_id
HAVING SUM (LENGTH (country_name)) > 60;
Medewerkers tafel. Krijg een lijst met department_id waarin medewerkers van meerdere (>1) job_id werken
beslissing
SELECT department_id
FROM employees
GROUP BY department_id
HAVING COUNT (DISTINCT job_id) > 1;
Medewerkers tafel. Krijg een lijst van manager_id waarvan het aantal ondergeschikten groter is dan 5 en de som van alle salarissen van zijn ondergeschikten groter is dan 50000
beslissing
SELECT manager_id
FROM employees
GROUP BY manager_id
HAVING COUNT (*) > 5 AND SUM (salary) > 50000;
Medewerkers tafel. Krijg een lijst van manager_id wiens gemiddelde salaris van al zijn ondergeschikten tussen de 6000 en 9000 ligt die geen bonussen ontvangen (commission_pct is leeg)
beslissing
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;
Medewerkers tafel. Haal het maximale salaris van alle werknemers job_id die eindigt op het woord 'CLERK'
beslissing
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';
Medewerkers tafel. Haal het maximale salaris op van alle gemiddelde salarissen voor de afdeling
beslissing
SELECT MAX (AVG (salary))
FROM employees
GROUP BY department_id;
Medewerkers tafel. Krijg het aantal werknemers met hetzelfde aantal letters in hun naam. Toon tegelijkertijd alleen degenen wiens naam langer is dan 5 en het aantal werknemers met dezelfde naam is meer dan 20. Sorteer op naamlengte
beslissing
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);
Gegevens uit meerdere tabellen weergeven met behulp van joins
Tabel Medewerkers, Afdelingen, Locaties, Landen, Regio's. Krijg een lijst met regio's en het aantal werknemers in elke regio
beslissing
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;
Tabel Medewerkers, Afdelingen, Locaties, Landen, Regio's. Krijg gedetailleerde informatie over elke werknemer:
Voornaam, Achternaam, Afdeling, Functie, Straat, Land, Regio
beslissing
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);
Medewerkers tafel. Toon alle managers die meer dan 6 medewerkers hebben
beslissing
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;
Medewerkers tafel. Toon alle medewerkers die aan niemand rapporteren
beslissing
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;
Werknemerstabel, Job_history. In de tabel Werknemer worden alle werknemers opgeslagen. In de tabel Job_history worden werknemers opgeslagen die het bedrijf hebben verlaten. Ontvang een rapport over alle werknemers en hun status in het bedrijf (in dienst of verliet het bedrijf met de datum van vertrek)
Voorbeeld:
voornaam | toestand
Jennifer | Verliet het bedrijf op 31 december 2006
Klara | Momenteel aan het werk
beslissing
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);
Tabel Medewerkers, Afdelingen, Locaties, Landen, Regio's. Krijg een lijst van werknemers die in Europa wonen (region_name)
beslissing
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';
Tafelmedewerkers, Afdelingen. Toon alle afdelingen met meer dan 30 medewerkers
beslissing
SELECT department_name, COUNT (*)
FROM employees e JOIN departments d ON (e.department_id = d.department_id)
GROUP BY department_name
HAVING COUNT (*) > 30;
Tafelmedewerkers, Afdelingen. Toon alle medewerkers die niet op een afdeling zitten
beslissing
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;
Tafelmedewerkers, Afdelingen. Toon alle afdelingen zonder medewerkers
beslissing
SELECT department_name
FROM employees e
RIGHT JOIN departments d ON (e.department_id = d.department_id)
WHERE first_name IS NULL;
Medewerkers tafel. Toon alle medewerkers die geen ondergeschikten hebben
beslissing
SELECT man.first_name
FROM employees emp
RIGHT JOIN employees man ON (emp.manager_id = man.employee_id)
WHERE emp.FIRST_NAME IS NULL;
Tafelmedewerkers, Banen, Afdelingen. Toon werknemers in het formaat: First_name, Job_title, Department_name.
Voorbeeld:
voornaam | functietitel | Afdelingsnaam
Donald | verzending | Bediende verzending
beslissing
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);
Medewerkers tafel. Krijg een lijst van werknemers waarvan de managers in 2005 een baan kregen, maar tegelijkertijd kregen deze werknemers zelf een baan voor 2005
beslissing
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');
Medewerkers tafel. Krijg een lijst van werknemers wiens managers een baan hebben gekregen in de maand januari van een willekeurig jaar en de lengte van de functietitel van deze werknemers is meer dan 15 tekens
beslissing
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;
Subquery's gebruiken om query's op te lossen
Medewerkers tafel. Krijg een lijst met werknemers met de langste naam.
beslissing
SELECT *
FROM employees
WHERE LENGTH (first_name) =
(SELECT MAX (LENGTH (first_name)) FROM employees);
Medewerkers tafel. Krijg een lijst van werknemers met een salaris dat hoger is dan het gemiddelde salaris van alle werknemers.
beslissing
SELECT *
FROM employees
WHERE salary > (SELECT AVG (salary) FROM employees);
Tabel Medewerkers, Afdelingen, Locaties. Verkrijg de stad waarin werknemers in totaal het minst verdienen.
beslissing
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);
Medewerkers tafel. Krijg een lijst van werknemers waarvan de manager een salaris van meer dan 15000 ontvangt.
beslissing
SELECT *
FROM employees
WHERE manager_id IN (SELECT employee_id
FROM employees
WHERE salary > 15000)
Tafelmedewerkers, Afdelingen. Toon alle afdelingen zonder medewerkers
beslissing
SELECT *
FROM departments
WHERE department_id NOT IN (SELECT department_id
FROM employees
WHERE department_id IS NOT NULL);
Medewerkers tafel. Toon alle medewerkers die geen leidinggevende zijn
beslissing
SELECT *
FROM employees
WHERE employee_id NOT IN (SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL)
Medewerkers tafel. Toon alle managers die meer dan 6 medewerkers hebben
beslissing
SELECT *
FROM employees e
WHERE (SELECT COUNT (*)
FROM employees
WHERE manager_id = e.employee_id) > 6;
Tafelmedewerkers, Afdelingen. Laat medewerkers zien die op de IT-afdeling werken
beslissing
SELECT *
FROM employees
WHERE department_id = (SELECT department_id
FROM departments
WHERE department_name = 'IT');
Tafelmedewerkers, Banen, Afdelingen. Toon werknemers in het formaat: First_name, Job_title, Department_name.
Voorbeeld:
voornaam | functietitel | Afdelingsnaam
Donald | verzending | Bediende verzending
beslissing
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;
Medewerkers tafel. Krijg een lijst van werknemers waarvan de managers in 2005 een baan kregen, maar tegelijkertijd kregen deze werknemers zelf een baan voor 2005
beslissing
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');
Medewerkers tafel. Krijg een lijst van werknemers wiens managers een baan hebben gekregen in de maand januari van een willekeurig jaar en de lengte van de functietitel van deze werknemers is meer dan 15 tekens
beslissing
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;
Dat is het voor nu.
Ik hoop dat de taken interessant en opwindend waren.
Ik zal deze lijst zoveel mogelijk aanvullen.
Ik zal ook blij zijn met eventuele opmerkingen en suggesties.
PS: Als iemand met een interessante taak op SELECT komt, schrijf dan in de comments, ik zal het aan de lijst toevoegen.
Dank u.
Bron: www.habr.com