SQL. Puzzles mampiala voly

Salama, Habr!

Efa 3 taona mahery izao aho no nampianatra SQL tany amin'ireo ivon-toeram-piofanana isan-karazany, ary anisan'ny tsikaritro ny maha-mahay sy mahazo tsara kokoa ny SQL ny mpianatra raha omena asa izy ireo, fa tsy lazaina fotsiny momba ny mety sy ny fototra teorika.

Ato amin'ity lahatsoratra ity dia hizara aminareo ny lisitry ny olana omeko ny mpianatra ho entimody aho ary itarihanay karazana brainstorming isan-karazany, izay mitarika amin'ny fahatakarana lalina sy mazava ny SQL.

SQL. Puzzles mampiala voly

Ny SQL (ˈɛsˈkjuˈɛl; teny anglisy voarafitra amin'ny fanontaniana) dia tenim-pandaharana fanambaràna ampiasaina hamoronana, hanovana ary hitantana ny angona ao amin'ny angon-drakitra mifandraika izay tantanan'ny rafitra fitantanana angona mifanaraka amin'izany. Mianara bebe kokoa

Azonao atao ny mamaky momba ny SQL avy amin'ny isan-karazany loharanom-baovao.
Ity lahatsoratra ity dia tsy natao hampianatra anao SQL hatrany am-boalohany.

Ka ndao handeha.

Hampiasa ny fanta-daza isika HR diagram ao amin'ny Oracle miaraka amin'ny latabatra (More):

SQL. Puzzles mampiala voly
Marihiko fa ny asa SELECT ihany no hodinihintsika. Tsy misy asa DML na DDL eto.

asa

Famerana sy fanasokajiana ny angona

Latabatra mpiasa. Makà lisitra misy fampahalalana momba ny mpiasa rehetra
fanapahan-kevitra

SELECT * FROM employees

Latabatra mpiasa. Makà lisitry ny mpiasa rehetra antsoina hoe 'David'
fanapahan-kevitra

SELECT *
  FROM employees
 WHERE first_name = 'David';

Latabatra mpiasa. Mahazoa lisitry ny mpiasa rehetra manana job_id mitovy amin'ny 'IT_PROG'
fanapahan-kevitra

SELECT *
  FROM employees
 WHERE job_id = 'IT_PROG'

Latabatra mpiasa. Mahazoa lisitry ny mpiasa rehetra avy amin'ny departemanta faha-50 (department_id) manana karama (karama) mihoatra ny 4000
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitry ny mpiasa rehetra avy amin'ny departemanta faha-20 sy faha-30 (department_id)
fanapahan-kevitra

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

Latabatra mpiasa. Makà lisitr'ireo mpiasa rehetra manana ny litera farany amin'ny anarany dia 'a'
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitr'ireo mpiasa rehetra ao amin'ny departemanta faha-50 sy faha-80 (department_id) izay manana bonus (tsy foana ny sanda ao amin'ny tsanganana commission_pct)
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitr'ireo mpiasa rehetra izay misy litera 2 farafahakeliny 'n' ny anarany
fanapahan-kevitra

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

Latabatra mpiasa. Makà lisitr'ireo mpiasa rehetra manana litera mihoatra ny 4 ny anarany
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitr'ireo mpiasa rehetra izay manana karama eo anelanelan'ny 8000 ka hatramin'ny 9000 (ao anatin'izany)
fanapahan-kevitra

SELECT *
  FROM employees
 WHERE salary BETWEEN 8000 AND 9000;

Latabatra mpiasa. Mahazoa lisitr'ireo mpiasa rehetra izay misy marika '%' ny anarany
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitry ny ID mpitantana rehetra
fanapahan-kevitra

SELECT DISTINCT manager_id
  FROM employees
 WHERE manager_id IS NOT NULL;

Latabatra mpiasa. Makà lisitry ny mpiasa miaraka amin'ny toerany amin'ny endrika: Donald(sh_clerk)
fanapahan-kevitra

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

Mampiasa Fampiasa andalana tokana mba hanamboarana ny Output

Latabatra mpiasa. Makà lisitr'ireo mpiasa rehetra manana litera mihoatra ny 10 ny anarany
fanapahan-kevitra

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

Latabatra mpiasa. Makà lisitry ny mpiasa rehetra manana ny litera 'b' amin'ny anarany (tsy misy dikany)
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitr'ireo mpiasa rehetra izay ahitana litera 2 farafahakeliny 'a' ny anarany
fanapahan-kevitra

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

Latabatra mpiasa. Makà lisitr'ireo mpiasa rehetra manana karama 1000
fanapahan-kevitra

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

Latabatra mpiasa. Alao ny laharana 3 isa voalohany amin'ny nomeraon-telefaon'ny mpiasa raha toa amin'ny endrika XXX.XXX.XXXX ny laharany.
fanapahan-kevitra

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

latabatra sampan-draharaha. Raiso ny teny voalohany avy amin'ny anaran'ny departemanta ho an'ireo izay manana teny mihoatra ny iray amin'ny anarana
fanapahan-kevitra

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

Latabatra mpiasa. Makà anaran'ny mpiasa tsy misy litera voalohany sy farany amin'ny anarana
fanapahan-kevitra

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

Latabatra mpiasa. Makà lisitr'ireo mpiasa rehetra manana ny litera farany amin'ny anarany dia 'm' ary manana ny anarany mihoatra ny 5
fanapahan-kevitra

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

Table Dual. Makà daty zoma manaraka
fanapahan-kevitra

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

Latabatra mpiasa. Makà lisitry ny mpiasa rehetra niasa tao amin'ny orinasa nandritra ny 17 taona mahery
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitr'ireo mpiasa rehetra izay tsy mitovy ny isa farany amin'ny laharan-telefaonany ary misy isa 3 misaraka amin'ny teboka
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitr'ireo mpiasa rehetra izay manana sanda job_id aorian'ny famantarana '_' manana tarehintsoratra 3 farafahakeliny, fa ity sanda manaraka ny '_' ity dia tsy mitovy amin'ny 'CLERK'
fanapahan-kevitra

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

Latabatra mpiasa. Makà lisitry ny mpiasa rehetra amin'ny fanoloana ny '.' rehetra amin'ny sanda PHONE_NUMBER amin'ny '-'
fanapahan-kevitra

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

Fampiasana Fampiasana Fiovam-po sy Fitenenana misy fepetra

Latabatra mpiasa. Mahazoa lisitr'ireo mpiasa rehetra tonga niasa tamin'ny andro voalohan'ny volana (na inona)
fanapahan-kevitra

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

Latabatra mpiasa. Makà lisitry ny mpiasa rehetra tonga niasa tamin'ny taona 2008
fanapahan-kevitra

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

Tabilao DUAL. Asehoy ny daty rahampitso amin'ny endrika: Andro faharoan'ny Janoary rahampitso
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitr'ireo mpiasa rehetra sy ny daty nahatongavan'ny mpiasa tsirairay tao am-piasana amin'ny endrika: 21 Jona 2007
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitr'ireo mpiasa manana karama avoakan'ny 20%. Asehoy ny karama misy marika dolara
fanapahan-kevitra

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

Latabatra mpiasa. Makà lisitry ny mpiasa rehetra nanomboka niasa tamin'ny Febroary 2007.
fanapahan-kevitra

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

Tabilao DUAL. Avoahy ny daty ankehitriny, + segondra, + minitra, + ora, + andro, + volana, + taona
fanapahan-kevitra

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;

Latabatra mpiasa. Mahazoa lisitry ny mpiasa rehetra manana karama feno (karama + commission_pct(%)) amin'ny endrika: $24,000.00
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitr'ireo mpiasa rehetra sy fampahalalana momba ny fisian'ny tambin-karama (Eny/Tsia)
fanapahan-kevitra

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

Latabatra mpiasa. Raiso ny karaman'ny mpiasa tsirairay: Latsaky ny 5000 dia heverina ho ambany, mihoatra na mitovy amin'ny 5000 ary latsaky ny 10000 dia heverina ho normal, mihoatra na mitovy amin'ny 10000 dia heverina ho avo lenta
fanapahan-kevitra

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;

Firenena latabatra. Ho an'ny firenena tsirairay, asehoy ny faritra misy azy: 1-Europe, 2-Amerika, 3-Asia, 4-Afrika (tsy misy Join)
fanapahan-kevitra

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;

Mitatitra ny angona mitambatra amin'ny fampiasana ny asan'ny vondrona

Latabatra mpiasa. Mahazoa tatitra avy amin'ny department_id miaraka amin'ny karama farany ambany sy ambony indrindra, ny daty tonga aloha sy tara any am-piasana ary ny isan'ny mpiasa. Alaharo araka ny isan'ny mpiasa (midina)
fanapahan-kevitra

  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;

Latabatra mpiasa. Firy ny mpiasa izay manomboka amin'ny litera mitovy ny anarany? Alaharo araka ny habeny. Asehoy afa-tsy ireo izay mihoatra ny 1 ny isany
fanapahan-kevitra

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;

Latabatra mpiasa. Firy ny mpiasa miasa ao amin’ny sampana iray ary mitovy karama?
fanapahan-kevitra

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

Latabatra mpiasa. Makà tatitra momba ny isan'ny mpiasa nokaramaina isan'andro isan-kerinandro. Alaharo araka ny habeny
fanapahan-kevitra

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

Latabatra mpiasa. Makà tatitra momba ny isan'ny mpiasa noraisina isan-taona. Alaharo araka ny habeny
fanapahan-kevitra

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

Latabatra mpiasa. Alao ny isan'ny sampana manana mpiasa
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitry ny department_id izay manana mpiasa mihoatra ny 30
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitr'ireo department_id sy ny karama salan'isa boribory ho an'ny mpiasa isaky ny departemanta.
fanapahan-kevitra

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

Firenena latabatra. Raiso ny lisitry ny faritra_id ny fitambaran'ny litera rehetra amin'ny anarana_firenena rehetra misy 60 mahery
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitr'ireo department_id izay iasan'ny mpiasa amin'ny (>1) job_ids maromaro
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitr'ireo manager_id izay mihoatra ny 5 ny isan'ny mpiasany ary mihoatra ny 50000 ny fitambaran'ny karaman'ny mpiasany rehetra.
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitr'ireo manager_id izay manana karama antonony ho an'ny mpiara-miasa aminy rehetra eo anelanelan'ny 6000 ka hatramin'ny 9000 ary tsy mahazo bonus (foana ny commission_pct)
fanapahan-kevitra

  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;

Latabatra mpiasa. Raiso ny karama farany indrindra amin'ny mpiasa rehetra job_id izay mifarana amin'ny teny hoe 'CLERK'
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa karama ambony indrindra amin'ireo karama antonony rehetra ho an'ny departemanta
fanapahan-kevitra

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

Latabatra mpiasa. Alao ny isan'ny mpiasa manana litera mitovy amin'ny anarany. Amin'izay fotoana izay ihany koa dia asehoy ireo manana ny halavan'ny anarany mihoatra ny 5 ary ny isan'ny mpiasa mitovy anarana dia mihoatra ny 20. Alaharo araka ny halavan'ny anarana.
fanapahan-kevitra

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

Fampisehoana angona avy amin'ny tabilao maromaro amin'ny fampiasana Joins

Mpiasan'ny latabatra, Departemanta, Toerana, Firenena, Faritra. Mahazoa lisitry ny faritra sy ny isan'ny mpiasa isaky ny faritra
fanapahan-kevitra

  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;

Mpiasan'ny latabatra, Departemanta, Toerana, Firenena, Faritra. Makà fampahalalana amin'ny antsipiriany momba ny mpiasa tsirairay:
Anarana_voalohany, Anarana_anarana, Departemanta, Asa, Lalana, Firenena, Faritra
fanapahan-kevitra

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

Latabatra mpiasa. Asehoy ny mpitantana rehetra izay manana mpiasa mihoatra ny 6 eo ambany fahefany
fanapahan-kevitra

  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;

Latabatra mpiasa. Asehoy ny mpiasa rehetra tsy manao tatitra amin'iza na iza
fanapahan-kevitra

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;

Mpiasan'ny latabatra, Job_history. Ny latabatra mpiasa dia mitahiry ny mpiasa rehetra. Ny latabatra Job_history dia mitahiry ireo mpiasa nandao ny orinasa. Mahazoa tatitra momba ny mpiasa rehetra sy ny toerana misy azy ao amin'ny orinasa (Miasa na miala amin'ny orinasa miaraka amin'ny daty iaingana)
ohatra:
anarana_voalohany | sata
Jennifer | Niala tamin'ny orinasa tamin'ny 31 Desambra 2006
Clara | Miasa ankehitriny
fanapahan-kevitra

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

Mpiasan'ny latabatra, Departemanta, Toerana, Firenena, Faritra. Mahazoa lisitr'ireo mpiasa monina any Eoropa (anarana_faritra)
fanapahan-kevitra

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

Mpiasan'ny latabatra, Departemanta. Asehoy ny departemanta rehetra misy mpiasa maherin'ny 30
fanapahan-kevitra

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

Mpiasan'ny latabatra, Departemanta. Asehoy ny mpiasa rehetra izay tsy ao amin'ny departemanta rehetra
fanapahan-kevitra

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;

Mpiasan'ny latabatra, Departemanta. Asehoy ny departemanta rehetra izay tsy misy mpiasa
fanapahan-kevitra

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

Latabatra mpiasa. Asehoy ny mpiasa rehetra izay tsy manana olona eo ambany fahefany
fanapahan-kevitra

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

Mpiasan'ny latabatra, Asa, Departemanta. Asehoy ny mpiasa amin'ny endrika: First_name, Job_title, Department_name.
ohatra:
Anarana_voalohany | Job_title | Anaran'ny departemanta
Donald | Fandefasana | Clerk Shipping
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitr'ireo mpiasa izay nahazo asa tamin'ny 2005 ny mpitantana, saingy tamin'izany fotoana izany dia nahazo asa talohan'ny taona 2005 ireo mpiasa ireo.
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitr'ireo mpiasa manana mpitantana nahazo asa tamin'ny Janoary isan-taona ary mihoatra ny 15 ny halavan'ny job_title an'ireo mpiasa ireo
fanapahan-kevitra

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;

Mampiasa Subqueries hamahana fanontaniana

Latabatra mpiasa. Makà lisitry ny mpiasa manana anarana lava indrindra.
fanapahan-kevitra

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

Latabatra mpiasa. Makà lisitr'ireo mpiasa manana karama lehibe kokoa noho ny karama antonony ho an'ny mpiasa rehetra.
fanapahan-kevitra

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

Mpiasa, Departemanta, Toerana latabatra. Alao ny tanàna izay ahitana mpiasa amin'ny fitambarany mahazo kely indrindra.
fanapahan-kevitra

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

Latabatra mpiasa. Makà lisitr'ireo mpiasa manana karama mihoatra ny 15000 ny mpitantana azy.
fanapahan-kevitra

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

Mpiasan'ny latabatra, Departemanta. Asehoy ny departemanta rehetra izay tsy misy mpiasa
fanapahan-kevitra

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

Latabatra mpiasa. Asehoy ny mpiasa rehetra tsy mpitantana
fanapahan-kevitra

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

Latabatra mpiasa. Asehoy ny mpitantana rehetra izay manana mpiasa mihoatra ny 6 eo ambany fahefany
fanapahan-kevitra

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

Mpiasan'ny latabatra, Departemanta. Asehoy ireo mpiasa miasa ao amin'ny departemanta IT
fanapahan-kevitra

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

Mpiasan'ny latabatra, Asa, Departemanta. Asehoy ny mpiasa amin'ny endrika: First_name, Job_title, Department_name.
ohatra:
Anarana_voalohany | Job_title | Anaran'ny departemanta
Donald | Fandefasana | Clerk Shipping
fanapahan-kevitra

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;

Latabatra mpiasa. Mahazoa lisitr'ireo mpiasa izay nahazo asa tamin'ny 2005 ny mpitantana, saingy tamin'izany fotoana izany dia nahazo asa talohan'ny taona 2005 ireo mpiasa ireo.
fanapahan-kevitra

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

Latabatra mpiasa. Mahazoa lisitr'ireo mpiasa manana mpitantana nahazo asa tamin'ny Janoary isan-taona ary mihoatra ny 15 ny halavan'ny job_title an'ireo mpiasa ireo
fanapahan-kevitra

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;

Izay ihany aloha izao.

Manantena aho fa nahaliana sy nahafinaritra ny asa.
Hanampy amin'ity lisitry ny asa ity aho araka izay azo atao.
Ho faly koa aho handray ny fanehoan-kevitra sy soso-kevitra.

PS: Raha misy olona tonga amin'ny asa SELECT mahaliana dia manorata ao amin'ny fanehoan-kevitra dia ampiako ao anaty lisitra.

Спасибо.

Source: www.habr.com

Add a comment