SQL. Puzzles siamsúil

Dia duit, Habr!

Le níos mó ná 3 bliana anois tá mé ag múineadh SQL in ionaid oiliúna éagsúla, agus ceann de mo thuairimí ná go bhfuil mic léinn máistreacht agus tuiscint níos fearr ar SQL má thugtar tasc dóibh, agus ní hamháin insint faoi na féidearthachtaí agus an dúshraith teoiriciúil.

San Airteagal seo, roinnfidh mé leat mo liosta fadhbanna a thugaim do mhic léinn mar obair bhaile agus ar a ndéanaimid cineálacha éagsúla tobsmaointeoireachta, as a dtagann tuiscint dhomhain agus shoiléir ar SQL.

SQL. Puzzles siamsúil

Is teanga ríomhchlárúcháin dhearbhaithe é SQL (ˈɛsˈkjuˈɛl; Béarla struchtúrtha ceiste) a úsáidtear chun sonraí a chruthú, a mhodhnú agus a bhainistiú i mbunachar sonraí coibhneasta arna bhainistiú ag córas bainistíochta bunachar sonraí cuí. Níos mó a fhoghlaim

Is féidir leat léamh faoi SQL ó éagsúla foinsí.
Níl an t-alt seo beartaithe chun SQL a mhúineadh duit ón tús.

Mar sin, déanaimis dul.

Bainfimid úsáid as an dea-aitheanta Léaráid AD in Oracle lena táblaí (Níos mó):

SQL. Puzzles siamsúil
Tugaim faoi deara nach ndéanfaimid ach tascanna SELECT a mheas. Níl aon tascanna DML nó DDL anseo.

tascanna

Sonraí a Shrianadh agus a Shórtáil

Tábla fostaithe. Faigh liosta le faisnéis faoi na fostaithe go léir
cinneadh

SELECT * FROM employees

Tábla fostaithe. Faigh liosta de na fostaithe go léir darb ainm ‘David’
cinneadh

SELECT *
  FROM employees
 WHERE first_name = 'David';

Tábla fostaithe. Faigh liosta de na fostaithe go léir a bhfuil job_id acu cothrom le 'IT_PROG'
cinneadh

SELECT *
  FROM employees
 WHERE job_id = 'IT_PROG'

Tábla fostaithe. Faigh liosta de na fostaithe go léir ón 50ú roinn (department_id) a bhfuil tuarastal (tuarastal) níos mó ná 4000 acu
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir ón 20ú agus 30ú roinn (department_id)
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir a bhfuil an litir dheireanach ina n-ainm 'a'
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir ón 50ú agus ón 80ú roinn (department_id) a bhfuil bónas acu (níl an luach sa cholún commission_pct folamh)
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir a bhfuil ar a laghad 2 litir 'n' ina n-ainmneacha
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir a bhfuil a n-ainmneacha níos faide ná 4 litir
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir a bhfuil a dtuarastal sa raon ó 8000 go 9000 (san áireamh)
cinneadh

SELECT *
  FROM employees
 WHERE salary BETWEEN 8000 AND 9000;

Tábla fostaithe. Faigh liosta de na fostaithe go léir a bhfuil an tsiombail '%' ina n-ainm
cinneadh

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

Tábla fostaithe. Faigh liosta de na haitheantais bainisteoirí go léir
cinneadh

SELECT DISTINCT manager_id
  FROM employees
 WHERE manager_id IS NOT NULL;

Tábla fostaithe. Faigh liosta fostaithe lena bpoist san fhormáid: Donald(sh_clerk)
cinneadh

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

Feidhmeanna Aonair a Úsáid chun Aschur a Shaincheapadh

Tábla fostaithe. Faigh liosta de na fostaithe go léir a bhfuil a n-ainmneacha níos faide ná 10 litir
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir a bhfuil an litir ‘b’ ina n-ainm (cás neamhíogair)
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir a bhfuil ar a laghad dhá litir 'a' ar a n-ainmneacha
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir a bhfuil a dtuarastal iolraí de 1000
cinneadh

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

Tábla fostaithe. Faigh an chéad uimhir 3-dhigit d'uimhir theileafóin fostaí má tá a uimhir san fhormáid XXX.XXX.XXXX
cinneadh

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

Ranna tábla. Faigh an chéad fhocal ó ainm na roinne dóibh siúd a bhfuil níos mó ná focal amháin san ainm
cinneadh

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

Tábla fostaithe. Faigh ainmneacha fostaithe gan an chéad litir agus an litir dheireanach in ainm
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir a bhfuil 'm' sa litir dheireanach ina n-ainm agus a bhfuil a n-ainm níos faide ná 5
cinneadh

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

Tábla Dual. Faigh dáta Dé hAoine seo chugainn
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir a d'oibrigh don chuideachta ar feadh níos mó ná 17 mbliana
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir a bhfuil a ndigit dheireanach dá n-uimhir theileafóin corr agus comhdhéanta de 3 uimhir scartha le ponc
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir a bhfuil ar a laghad 3 charachtar ar a luach post_id tar éis an chomhartha '_', ach níl an luach seo tar éis an '_' cothrom le 'CLERK'
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir trí '.' go léir a ionadú sa luach PHONE_NUMBER ar '-'
cinneadh

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

Feidhmeanna Tiontaithe agus Léirithe Coinníollacha a Úsáid

Tábla fostaithe. Faigh liosta de na fostaithe go léir a tháinig chun oibre ar an gcéad lá den mhí (ar bith)
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir a tháinig chun oibre in 2008
cinneadh

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

Tábla DUAL. Taispeáin dáta an lae amárach san fhormáid: Amárach an Dara lá de mhí Eanáir
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir agus an dáta ar tháinig gach fostaí ag obair san fhormáid: 21 Meitheamh, 2007
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe a bhfuil tuarastail méadaithe 20%. Taispeáin tuarastal le comhartha dollar
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir a thosaigh ag obair i mí Feabhra 2007.
cinneadh

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

Tábla DUAL. Tabhair amach an dáta reatha, + dara, + nóiméad, + uair, + lá, + mí, + bliain
cinneadh

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;

Tábla fostaithe. Faigh liosta de na fostaithe go léir a bhfuil tuarastail iomlána acu (tuarastal + commission_pct(%)) san fhormáid: $24,000.00
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe go léir agus faisnéis maidir le hinfhaighteacht bónais tuarastail (Tá/Níl)
cinneadh

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

Tábla fostaithe. Faigh leibhéal tuarastail gach fostaí: Meastar go bhfuil níos lú ná 5000 Íseal, Níos mó ná nó cothrom le 5000 agus níos lú ná 10000 meastar Gnáthleibhéal, Meastar go bhfuil níos mó ná nó cothrom le 10000 Ardleibhéal
cinneadh

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;

Tíortha Tábla. Do gach tír, taispeáin an réigiún ina bhfuil sé suite: 1-Eoraip, 2-Meiriceá, 3-Áise, 4-Afraic (gan Join)
cinneadh

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;

Sonraí Comhiomlánaithe a Thuairisciú ag Úsáid Feidhmeanna an Ghrúpa

Tábla fostaithe. Faigh tuairisc ó roinn_id leis an íostuarastal agus an t-uastuarastal, dátaí luatha agus déanacha teachta oibre agus líon na bhfostaithe. Sórtáil de réir líon na bhfostaithe (ag ísliú)
cinneadh

  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;

Tábla fostaithe. Cé mhéad fostaithe a dtosaíonn a n-ainmneacha leis an litir chéanna? Sórtáil de réir cainníochta. Ná taispeáin ach na cinn sin ina bhfuil an chainníocht níos mó ná 1
cinneadh

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;

Tábla fostaithe. Cé mhéad fostaithe a oibríonn sa roinn chéanna agus a fhaigheann an tuarastal céanna?
cinneadh

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

Tábla fostaithe. Faigh tuairisc ar cé mhéad fostaithe a fostaíodh gach lá den tseachtain. Sórtáil de réir cainníochta
cinneadh

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

Tábla fostaithe. Faigh tuairisc ar cé mhéad fostaithe a fostaíodh in aghaidh na bliana. Sórtáil de réir cainníochta
cinneadh

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

Tábla fostaithe. Faigh líon na ranna a bhfuil fostaithe acu
cinneadh

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

Tábla fostaithe. Faigh liosta de roinn_ids a bhfuil níos mó ná 30 fostaí acu
cinneadh

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

Tábla fostaithe. Faigh liosta de na roinne_ids agus meántuarastal cruinn na bhfostaithe i ngach roinn.
cinneadh

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

Tíortha Tábla. Faigh an liosta region_id suim gach litir de gach tír_ainm ina bhfuil níos mó ná 60
cinneadh

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

Tábla fostaithe. Faigh liosta de na roinne_id ina n-oibríonn fostaithe roinnt (>1) post_ids
cinneadh

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

Tábla fostaithe. Faigh liosta de na bainisteoirí_aids ar mó a líon fo-orduithe ná 5 agus suim thuarastail uile a fho-riaracháin níos mó ná 50000
cinneadh

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

Tábla fostaithe. Faigh liosta de na bainisteoirí_ids a bhfuil meántuarastal a fho-chomhaltaí go léir sa raon ó 6000 go 9000 agus nach bhfaigheann bónais (tá commission_pct folamh)
cinneadh

  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;

Tábla fostaithe. Faigh an t-uastuarastal ó na fostaithe go léir job_id a chríochnaíonn leis an bhfocal 'CLERK'
cinneadh

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

Tábla fostaithe. Faigh an t-uastuarastal i measc na meán-thuarastail ar fad don Roinn
cinneadh

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

Tábla fostaithe. Faigh an líon fostaithe leis an líon céanna litreacha ina n-ainm. Ag an am céanna, taispeáin ach iad siúd a bhfuil fad a n-ainm níos mó ná 5 agus líon na bhfostaithe leis an ainm céanna níos mó ná 20. Sórtáil de réir fad ainm
cinneadh

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

Ag Taispeánadh Sonraí ó Táblaí Iolracha Ag Úsáid Síntiúis

Fostaithe Tábla, Ranna, Láithreacha, Tíortha, Réigiúin. Faigh liosta de na réigiúin agus líon na bhfostaithe i ngach réigiún
cinneadh

  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;

Fostaithe Tábla, Ranna, Láithreacha, Tíortha, Réigiúin. Faigh faisnéis mhionsonraithe faoi gach fostaí:
Céadainm, Last_ainm, Roinn, Post, Sráid, Tír, Réigiún
cinneadh

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

Tábla fostaithe. Taispeáin na bainisteoirí go léir a bhfuil níos mó ná 6 fhostaí acu faoi réir
cinneadh

  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;

Tábla fostaithe. Taispeáin gach fostaí nach dtuairiscíonn duine ar bith
cinneadh

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;

Fostaithe Tábla, Job_history. Stórálann tábla na bhFostaithe na fostaithe go léir. Stórálann an tábla Job_history fostaithe a d’fhág an chuideachta. Faigh tuairisc ar gach fostaí agus a stádas sa chuideachta (Oibríonn nó d'fhág an chuideachta leis an dáta imeachta)
Sampla:
céad_ainm | stádas
Jennifer | D’fhág sé an chuideachta ar 31 Nollaig, 2006
Clara | Ag Obair faoi láthair
cinneadh

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

Fostaithe Tábla, Ranna, Láithreacha, Tíortha, Réigiúin. Faigh liosta fostaithe a bhfuil cónaí orthu san Eoraip (region_name)
cinneadh

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

Fostaithe Boird, Ranna. Taispeáin gach roinn a bhfuil níos mó ná 30 fostaí acu
cinneadh

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

Fostaithe Boird, Ranna. Taispeáin gach fostaí nach bhfuil in aon roinn
cinneadh

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;

Fostaithe Boird, Ranna. Taispeáin gach roinn ina bhfuil aon fostaithe
cinneadh

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

Tábla fostaithe. Taispeáin na fostaithe go léir nach bhfuil duine ar bith faoi réir acu
cinneadh

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

Fostaithe Tábla, Poist, Ranna. Taispeáin fostaithe san fhormáid: First_name, Job_title, Department_name.
Sampla:
Céad_ainm | Jab_teideal | Roinn_ainm
Domhnall | Loingseoireacht | Cléireach Loingseoireacht
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe a fuair a mbainisteoirí post i 2005, ach ag an am céanna fuair na fostaithe seo iad féin post roimh 2005
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe a fuair a mbainisteoirí post i mí Eanáir de bhliain ar bith agus tá fad poist_teidil na bhfostaithe seo níos mó ná 15 carachtar
cinneadh

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;

Ag Úsáid Subqueries chun Ceisteanna a Réiteach

Tábla fostaithe. Faigh liosta fostaithe leis an ainm is faide.
cinneadh

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

Tábla fostaithe. Faigh liosta d’fhostaithe a bhfuil tuarastal níos mó ná meántuarastal na bhfostaithe go léir acu.
cinneadh

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

Fostaithe, Ranna, Suímh tábla. Faigh an chathair ina dtuilleann fostaithe san iomlán an méid is lú.
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe a fhaigheann a mbainisteoir tuarastal níos mó ná 15000.
cinneadh

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

Fostaithe Boird, Ranna. Taispeáin gach roinn ina bhfuil aon fostaithe
cinneadh

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

Tábla fostaithe. Taispeáin gach fostaí nach bainisteoirí iad
cinneadh

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

Tábla fostaithe. Taispeáin na bainisteoirí go léir a bhfuil níos mó ná 6 fhostaí acu faoi réir
cinneadh

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

Fostaithe Boird, Ranna. Taispeáin fostaithe a oibríonn sa rannóg TF
cinneadh

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

Fostaithe Tábla, Poist, Ranna. Taispeáin fostaithe san fhormáid: First_name, Job_title, Department_name.
Sampla:
Céad_ainm | Jab_teideal | Roinn_ainm
Domhnall | Loingseoireacht | Cléireach Loingseoireacht
cinneadh

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;

Tábla fostaithe. Faigh liosta de na fostaithe a fuair a mbainisteoirí post i 2005, ach ag an am céanna fuair na fostaithe seo iad féin post roimh 2005
cinneadh

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

Tábla fostaithe. Faigh liosta de na fostaithe a fuair a mbainisteoirí post i mí Eanáir de bhliain ar bith agus tá fad poist_teidil na bhfostaithe seo níos mó ná 15 carachtar
cinneadh

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;

Sin go léir faoi láthair.

Tá súil agam go raibh na tascanna suimiúil agus spreagúil.
Cuirfidh mé leis an liosta tascanna seo oiread agus is féidir.
Beidh áthas orm freisin aon tuairimí agus moltaí a fháil.

PS: Má thagann duine suas le tasc SELECT suimiúil, scríobh isteach na tuairimí agus cuirfidh mé leis an liosta é.

Go raibh maith agat.

Foinse: will.com

Add a comment