SQL. Муаммоҳои шавқовар

Салом, Хабр!

Зиёда аз 3 сол мешавад, ки ман дар марказҳои гуногуни таълимӣ аз SQL дарс медиҳам ва яке аз мушоҳидаҳои ман ин аст, ки донишҷӯён SQL-ро дар сурати додани супориш беҳтар аз худ мекунанд ва мефаҳманд, на танҳо дар бораи имконот ва асосҳои назариявӣ.

Дар ин мақола, ман бо шумо рӯйхати мушкилотеро, ки ман ба донишҷӯён ҳамчун вазифаи хонагӣ медиҳам ва мо намудҳои гуногуни ҳамлаҳои майна мегузаронем, ки ба фаҳмиши амиқ ва равшани SQL оварда мерасонад.

SQL. Муаммоҳои шавқовар

SQL (ˈɛsˈkjuˈɛl; забони сохтории дархости англисӣ) як забони барномасозии декларативист, ки барои эҷод, тағир додан ва идоракунии додаҳо дар пойгоҳи додаҳои релятсионӣ, ки аз ҷониби системаи мувофиқи идоракунии пойгоҳи додаҳо идора мешавад, истифода мешавад. Маълумоти бештар

Шумо метавонед дар бораи SQL аз гуногун хонед сарчашмаҳо.
Ин мақола барои таълим додани SQL аз сифр пешбинӣ нашудааст.

Пас биёед биравем.

Мо ба ҳама маълум истифода хоҳем кард Диаграммаи HR дар Oracle бо ҷадвалҳои он (зиёдтар):

SQL. Муаммоҳои шавқовар
Ман қайд мекунам, ки мо танҳо вазифаҳои SELECT-ро баррасӣ хоҳем кард. Дар ин ҷо ягон вазифаи DML ё DDL вуҷуд надорад.

вазифаҳо

Маҳдудият ва ҷудокунии маълумот

Ҷадвали кормандон. Рӯйхати маълумотро дар бораи ҳамаи кормандон гиред
ҳалли

SELECT * FROM employees

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонро бо номи 'Дэвид' гиред
ҳалли

SELECT *
  FROM employees
 WHERE first_name = 'David';

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонро бо job_id баробар ба 'IT_PROG' гиред
ҳалли

SELECT *
  FROM employees
 WHERE job_id = 'IT_PROG'

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонро аз шӯъбаи 50 (department_id) бо маош (маош) аз 4000 зиёд гиред
ҳалли

SELECT *
  FROM employees
 WHERE department_id = 50 AND salary > 4000;

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонро аз шӯъбаи 20 ва 30 (department_id) гиред
ҳалли

SELECT *
  FROM employees
 WHERE department_id = 20 OR department_id = 30;

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонеро, ки ҳарфи охиринашон дар номи онҳо 'a' аст, гиред
ҳалли

SELECT *
  FROM employees
 WHERE first_name LIKE '%a';

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонро аз шӯъбаи 50 ва 80 (department_id), ки мукофот доранд, гиред (қимат дар сутуни komissiya_pct холӣ нест)
ҳалли

SELECT *
  FROM employees
 WHERE     (department_id = 50 OR department_id = 80)
       AND commission_pct IS NOT NULL;

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонеро, ки номашон ҳадди аққал 2 ҳарфи "n" дорад, гиред
ҳалли

SELECT *
  FROM employees
 WHERE first_name LIKE '%n%n%';

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонеро, ки номашон аз 4 ҳарф зиёд аст, гиред
ҳалли

SELECT *
  FROM employees
 WHERE first_name LIKE '%_____%';

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонеро гиред, ки маошашон аз 8000 то 9000 аст (бо назардошти)
ҳалли

SELECT *
  FROM employees
 WHERE salary BETWEEN 8000 AND 9000;

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонеро, ки номашон аломати '%' дорад, гиред
ҳалли

SELECT *
  FROM employees
 WHERE first_name LIKE '%%%' ESCAPE '';

Ҷадвали кормандон. Рӯйхати ҳамаи ID-ҳои мудирро гиред
ҳалли

SELECT DISTINCT manager_id
  FROM employees
 WHERE manager_id IS NOT NULL;

Ҷадвали кормандон. Рӯйхати кормандонро бо мавқеъашон дар формат гиред: Donald(sh_clerk)
ҳалли

SELECT first_name || '(' || LOWER (job_id) || ')' employee FROM employees;

Истифодаи Функсияҳои якқатор барои танзими натиҷа

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонеро, ки номашон аз 10 ҳарф зиёд аст, гиред
ҳалли

SELECT *
  FROM employees
 WHERE LENGTH (first_name) > 10;

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонеро, ки дар номашон ҳарфи 'b' доранд, гиред (ҳассос ба ҳарф)
ҳалли

SELECT *
  FROM employees
 WHERE INSTR (LOWER (first_name), 'b') > 0;

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонеро, ки номашон ҳадди аққал 2 ҳарфи "а" дорад, гиред
ҳалли

SELECT *
  FROM employees
 WHERE INSTR (LOWER (first_name),'a',1,2) > 0;

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонеро, ки маоши онҳо ба 1000 баробар аст, гиред
ҳалли

SELECT *
  FROM employees
 WHERE MOD (salary, 1000) = 0;

Ҷадвали кормандон. Рақами аввалини 3-рақамаи рақами телефони кормандро гиред, агар рақами ӯ дар формати XXX.XXX.XXXXX бошад
ҳалли

SELECT phone_number, SUBSTR (phone_number, 1, 3) new_phone_number
  FROM employees
 WHERE phone_number LIKE '___.___.____';

Ҷадвали кафедраҳо. Калимаи аввалро аз номи кафедра барои онҳое, ки дар ном зиёда аз як калима доранд, гиред
ҳалли

SELECT department_name,
       SUBSTR (department_name, 1, INSTR (department_name, ' ')-1)
           first_word
  FROM departments
 WHERE INSTR (department_name, ' ') > 0;

Ҷадвали кормандон. Номҳои кормандонро бидуни ҳарфи аввал ва охирин дар ном гиред
ҳалли

SELECT first_name, SUBSTR (first_name, 2, LENGTH (first_name) - 2) new_name
  FROM employees;

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонеро гиред, ки ҳарфи охиринашон дар номи онҳо 'm' ва номи онҳо аз 5 дарозтар аст
ҳалли

SELECT *
  FROM employees
 WHERE SUBSTR (first_name, -1) = 'm' AND LENGTH(first_name)>5;

Ҷадвали дугона. Рӯзи ҷумъаи ояндаро гиред
ҳалли

SELECT NEXT_DAY (SYSDATE, 'FRIDAY') next_friday FROM DUAL;

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонеро, ки дар ширкат зиёда аз 17 сол кор кардаанд, гиред
ҳалли

SELECT *
  FROM employees
 WHERE MONTHS_BETWEEN (SYSDATE, hire_date) / 12 > 17;

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонеро гиред, ки рақами охирини рақами телефонашон тоқ аст ва аз 3 рақами бо нуқта ҷудошуда иборат аст
ҳалли

SELECT *
  FROM employees
 WHERE     MOD (SUBSTR (phone_number, -1), 2) != 0
       AND INSTR (phone_number,'.',1,3) = 0;

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонеро гиред, ки арзиши job_id пас аз аломати '_' на камтар аз 3 аломат дорад, аммо ин арзиш пас аз '_' ба 'CLERK' баробар нест
ҳалли

SELECT *
  FROM employees
 WHERE     LENGTH (SUBSTR (job_id, INSTR (job_id, '_') + 1)) > 3
       AND SUBSTR (job_id, INSTR (job_id, '_') + 1) != 'CLERK';

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонро бо иваз кардани ҳама '.' дар арзиши PHONE_NUMBER гиред дар '-'
ҳалли

SELECT phone_number, REPLACE (phone_number, '.', '-') new_phone_number
  FROM employees;

Истифодаи функсияҳои табдилдиҳӣ ва ифодаҳои шартӣ

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонеро, ки дар рӯзи аввали моҳ ба кор омадаанд, гиред (ҳар як)
ҳалли

SELECT *
  FROM employees
 WHERE TO_CHAR (hire_date, 'DD') = '01';

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонеро, ки соли 2008 ба кор омадаанд, гиред
ҳалли

SELECT *
  FROM employees
 WHERE TO_CHAR (hire_date, 'YYYY') = '2008';

Ҷадвали DUAL. Санаи фардоро дар формат нишон диҳед: Фардо рӯзи дуюми моҳи январ аст
ҳалли

SELECT TO_CHAR (SYSDATE, 'fm""Tomorrow is ""Ddspth ""day of"" Month')     info
  FROM DUAL;

Ҷадвали кормандон. Рӯйхати ҳамаи кормандон ва санаи ба кор омадани ҳар як кормандро дар формати зерин гиред: 21 июни 2007
ҳалли

SELECT first_name, TO_CHAR (hire_date, 'fmddth ""of"" Month, YYYY') hire_date
  FROM employees;

Ҷадвали кормандон. Рӯйхати коргаронеро, ки музди меҳнаташон 20% зиёд шудааст, гиред. Маошро бо аломати доллар нишон диҳед
ҳалли

SELECT first_name, TO_CHAR (salary + salary * 0.20, 'fm$999,999.00') new_salary
  FROM employees;

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонеро, ки моҳи феврали соли 2007 ба кор шурӯъ кардаанд, гиред.
ҳалли

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. Сана, + сония, + дақиқа, + соат, + рӯз, + моҳ, + солро берун кунед
ҳалли

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;

Ҷадвали кормандон. Рӯйхати ҳамаи кормандонро бо маоши пурра (маош + komissiya_pct (%) дар формати: $24,000.00 гиред.
ҳалли

SELECT first_name, salary, TO_CHAR (salary + salary * NVL (commission_pct, 0), 'fm$99,999.00') full_salary
  FROM employees;

Ҷадвали кормандон. Рӯйхати ҳамаи кормандон ва маълумот дар бораи мавҷудияти мукофотпулӣ (Ҳа / Не)
ҳалли

SELECT first_name, commission_pct, NVL2 (commission_pct, 'Yes', 'No') has_bonus
  FROM employees;

Ҷадвали кормандон. Сатҳи музди меҳнати ҳар як кормандро гиред: Камтар аз 5000 Сатҳи паст ҳисобида мешавад, Зиёда ё баробар ба 5000 ва камтар аз 10000 Сатҳи муқаррарӣ ҳисобида мешавад, Зиёда ё баробар ба 10000 Сатҳи баланд ҳисобида мешавад.
ҳалли

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;

Кишварҳои ҷадвал. Барои ҳар як кишвар минтақаеро, ки дар он ҷойгир аст, нишон диҳед: 1-Аврупо, 2-Амрико, 3-Осиё, 4-Африка (бе ҳамроҳшавӣ)
ҳалли

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;

Гузориши маълумотҳои ҷамъшуда бо истифода аз функсияҳои гурӯҳ

Ҷадвали кормандон. Ҳисоботро аз departament_id бо ҳадди ақал ва ҳадди аксар, санаи барвақт ва дер ба кор омадан ва шумораи кормандон қабул кунед. Аз рӯи шумораи кормандон гурӯҳбандӣ кунед (камшаванда)
ҳалли

  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 зиёд аст
ҳалли

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;

Ҷадвали кормандон. Чанд нафар коргарон дар як шуъба кор мекунанду як хел маош мегиранд?
ҳалли

SELECT department_id, salary, COUNT (*)
    FROM employees
GROUP BY department_id, salary
  HAVING COUNT (*) > 1;

Ҷадвали кормандон. Ҳисобот гиред, ки дар ҳар рӯзи ҳафта чанд корманд ба кор гирифта шудааст. Аз рӯи миқдор ҷудо кунед
ҳалли

SELECT TO_CHAR (hire_Date, 'Day') day, COUNT (*)
    FROM employees
GROUP BY TO_CHAR (hire_Date, 'Day')
ORDER BY 2 DESC;

Ҷадвали кормандон. Ҳисобот гиред, ки дар давоми сол чанд нафар коргарон ба кор қабул карда шудаанд. Аз рӯи миқдор ҷудо кунед
ҳалли

SELECT TO_CHAR (hire_date, 'YYYY') year, COUNT (*)
    FROM employees
GROUP BY TO_CHAR (hire_date, 'YYYY');

Ҷадвали кормандон. Шумораи шӯъбаҳоеро, ки кормандон доранд, гиред
ҳалли

SELECT COUNT (COUNT (*))     department_count
    FROM employees
   WHERE department_id IS NOT NULL
GROUP BY department_id;

Ҷадвали кормандон. Рӯйхати department_ids, ки зиёда аз 30 корманд доранд, гиред
ҳалли

  SELECT department_id
    FROM employees
GROUP BY department_id
  HAVING COUNT (*) > 30;

Ҷадвали кормандон. Рӯйхати шӯъбаҳои_ids ва музди миёнаи мудавваршудаи кормандонро дар ҳар як шӯъба гиред.
ҳалли

  SELECT department_id, ROUND (AVG (salary)) avg_salary
    FROM employees
GROUP BY department_id;

Кишварҳои ҷадвал. Рӯйхати region_id ҷамъи ҳамаи ҳарфҳои ҳамаи номҳои кишварро, ки дар онҳо зиёда аз 60 адад мавҷуд аст, гиред
ҳалли

  SELECT region_id
    FROM countries
GROUP BY region_id
  HAVING SUM (LENGTH (country_name)) > 60;

Ҷадвали кормандон. Рӯйхати шӯъбаҳои_ids-ро гиред, ки дар онҳо кормандони якчанд (>1) job_id кор мекунанд
ҳалли

  SELECT department_id
    FROM employees
GROUP BY department_id
  HAVING COUNT (DISTINCT job_id) > 1;

Ҷадвали кормандон. Рӯйхати мудир_идиҳоро гиред, ки шумораи тобеонашон аз 5 зиёд ва маблағи тамоми маоши зердастонаш аз 50000 XNUMX зиёд аст
ҳалли

  SELECT manager_id
    FROM employees
GROUP BY manager_id
  HAVING COUNT (*) > 5 AND SUM (salary) > 50000;

Ҷадвали кормандон. Рӯйхати менеҷерҳоро гиред, ки маоши миёнаи ҳамаи тобеонаш аз 6000 то 9000 аст ва мукофотпулӣ намегиранд (commission_pct холӣ аст)
ҳалли

  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;

Ҷадвали кормандон. Музди ҳадди аксарро аз ҳамаи кормандон job_id гиред, ки бо калимаи 'CLERK' тамом мешавад
ҳалли

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';

Ҷадвали кормандон. Музди ҳадди аксарро дар байни ҳамаи маоши миёнаи кафедра гиред
ҳалли

  SELECT MAX (AVG (salary))
    FROM employees
GROUP BY department_id;

Ҷадвали кормандон. Шумораи коргаронеро, ки дар номи онҳо якхела ҳарф доранд, гиред. Ҳамзамон, танҳо онҳоеро нишон диҳед, ки дарозии номашон аз 5 нафар ва шумораи коргарони якхела аз 20 нафар зиёд аст. Аз рӯи дарозии ном ҷудо кунед.
ҳалли

  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);

Намоиши маълумот аз ҷадвалҳои сершумор бо истифода аз пайвастҳо

Кормандони ҷадвал, шӯъбаҳо, ҷойҳо, кишварҳо, минтақаҳо. Рӯйхати минтақаҳо ва шумораи кормандонро дар ҳар як минтақа гиред
ҳалли

  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;

Кормандони ҷадвал, шӯъбаҳо, ҷойҳо, кишварҳо, минтақаҳо. Дар бораи ҳар як корманд маълумоти муфассал гиред:
Ном_ном, Насаб, Раёсат, Ҷой, Кӯча, Кишвар, Минтақа
ҳалли

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);

Ҷадвали кормандон. Ҳама менеҷеронеро нишон диҳед, ки тобеи онҳо зиёда аз 6 корманд доранд
ҳалли

  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;

Ҷадвали кормандон. Ҳама кормандонеро нишон диҳед, ки ба касе ҳисобот намедиҳанд
ҳалли

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;

Кормандони ҷадвал, Job_history. Ҷадвали кормандон ҳамаи кормандонро нигоҳ медорад. Ҷадвали Job_history кормандонеро, ки ширкатро тарк кардаанд, нигоҳ медорад. Дар бораи ҳамаи кормандон ва вазъи онҳо дар ширкат ҳисобот гиред (кор мекунад ё аз ширкат бо санаи рафтан)
Мисол:
аввал_ном | мақом
Ҷенифер | 31 декабри соли 2006 ширкатро тарк кард
Клара | Айни замон кор мекунад
ҳалли

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);

Кормандони ҷадвал, шӯъбаҳо, ҷойҳо, кишварҳо, минтақаҳо. Рӯйхати кормандонеро, ки дар Аврупо зиндагӣ мекунанд, гиред (номи минтақа)
ҳалли

 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';

Кормандони миз, шуъбахо. Ҳама шӯъбаҳоро бо зиёда аз 30 корманд нишон диҳед
ҳалли

SELECT department_name, COUNT (*)
    FROM employees e JOIN departments d ON (e.department_id = d.department_id)
GROUP BY department_name
  HAVING COUNT (*) > 30;

Кормандони миз, шуъбахо. Ҳама кормандонеро, ки дар ягон шӯъба нестанд, нишон диҳед
ҳалли

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;

Кормандони миз, шуъбахо. Ҳама шӯъбаҳоро нишон диҳед, ки дар онҳо корманд нестанд
ҳалли

SELECT department_name
  FROM employees  e
       RIGHT JOIN departments d ON (e.department_id = d.department_id)
 WHERE first_name IS NULL;

Ҷадвали кормандон. Хамаи коркунонеро нишон дихед, ки ба онхо каси тобеъ надоранд
ҳалли

SELECT man.first_name
  FROM employees  emp
       RIGHT JOIN employees man ON (emp.manager_id = man.employee_id)
 WHERE emp.FIRST_NAME IS NULL;

Кормандони ҷадвал, ҷойҳои корӣ, шӯъбаҳо. Кормандонро дар формат нишон диҳед: Номи_ном, унвони_ҷой, шӯъба_номи.
Мисол:
Номи_ном | Унвони_кор | кафедра_номи
Доналд | Интиқол | Корманди интиқол
ҳалли

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);

Ҷадвали кормандон. Рӯйхати кормандонеро гиред, ки роҳбаронашон дар соли 2005 ба кор даромаданд, аммо дар айни замон худи ин кормандон то соли 2005 ба кор даромаданд.
ҳалли

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');

Ҷадвали кормандон. Рӯйхати кормандонеро гиред, ки роҳбаронашон дар моҳи январи ҳар сол кор гирифтаанд ва дарозии кор_унвони ин кормандон аз 15 аломат зиёд аст
ҳалли

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;

Истифодаи зергурӯҳҳо барои ҳалли дархостҳо

Ҷадвали кормандон. Рӯйхати кормандонро бо номи дарозтарин гиред.
ҳалли

SELECT *
  FROM employees
 WHERE LENGTH (first_name) =
       (SELECT MAX (LENGTH (first_name)) FROM employees);

Ҷадвали кормандон. Рӯйхати кормандонеро гиред, ки маошашон аз маоши миёнаи ҳамаи кормандон зиёд аст.
ҳалли

SELECT *
  FROM employees
 WHERE salary > (SELECT AVG (salary) FROM employees);

Кормандон, шӯъбаҳо, ҷадвали ҷойгиршавӣ. Шаҳреро гиред, ки дар он коргарон дар маҷмӯъ камтар маош мегиранд.
ҳалли

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);

Ҷадвали кормандон. Рӯйхати кормандонеро гиред, ки мудири онҳо аз 15000 XNUMX зиёд маош мегирад.
ҳалли

SELECT *
  FROM employees
 WHERE manager_id IN (SELECT employee_id
                        FROM employees
                       WHERE salary > 15000)

Кормандони миз, шуъбахо. Ҳама шӯъбаҳоро нишон диҳед, ки дар онҳо корманд нестанд
ҳалли

SELECT *
  FROM departments
 WHERE department_id NOT IN (SELECT department_id
                               FROM employees
                              WHERE department_id IS NOT NULL);

Ҷадвали кормандон. Ҳама кормандонеро, ки менеҷер нестанд, нишон диҳед
ҳалли

SELECT *
  FROM employees
 WHERE employee_id NOT IN (SELECT manager_id
                             FROM employees
                            WHERE manager_id IS NOT NULL)

Ҷадвали кормандон. Ҳама менеҷеронеро нишон диҳед, ки тобеи онҳо зиёда аз 6 корманд доранд
ҳалли

SELECT *
  FROM employees e
 WHERE (SELECT COUNT (*)
          FROM employees
         WHERE manager_id = e.employee_id) > 6;

Кормандони миз, шуъбахо. Кормандонеро, ки дар шӯъбаи IT кор мекунанд, нишон диҳед
ҳалли

SELECT *
  FROM employees
 WHERE department_id = (SELECT department_id
                          FROM departments
                         WHERE department_name = 'IT');

Кормандони ҷадвал, ҷойҳои корӣ, шӯъбаҳо. Кормандонро дар формат нишон диҳед: Номи_ном, унвони_ҷой, шӯъба_номи.
Мисол:
Номи_ном | Унвони_кор | кафедра_номи
Доналд | Интиқол | Корманди интиқол
ҳалли

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;

Ҷадвали кормандон. Рӯйхати кормандонеро гиред, ки роҳбаронашон дар соли 2005 ба кор даромаданд, аммо дар айни замон худи ин кормандон то соли 2005 ба кор даромаданд.
ҳалли

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');

Ҷадвали кормандон. Рӯйхати кормандонеро гиред, ки роҳбаронашон дар моҳи январи ҳар сол кор гирифтаанд ва дарозии кор_унвони ин кормандон аз 15 аломат зиёд аст
ҳалли

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;

Ҳамааш ҳамин аст.

Умедворам, ки супоришҳо ҷолиб ва ҷолиб буданд.
Ман ба ин рӯйхати вазифаҳо то ҳадди имкон илова мекунам.
Ман инчунин аз гирифтани ҳама гуна шарҳу пешниҳодҳо хушҳолам.

PS: Агар касе вазифаи ҷолиби SELECT пайдо кунад, дар шарҳҳо нависед ва ман онро ба рӯйхат илова мекунам.

Спасибо.

Манбаъ: will.com

Илова Эзоҳ