SQLред рд░рдорд╛рдЗрд▓реЛ рдкрдЬрд▓рд╣рд░реВ

рдирдорд╕реНрддреЗ Habr!

рей рд╡рд░реНрд╖рднрдиреНрджрд╛ рдмрдвреА рд╕рдордпрджреЗрдЦрд┐ рдореИрд▓реЗ рд╡рд┐рднрд┐рдиреНрди рддрд╛рд▓рд┐рдо рдХреЗрдиреНрджреНрд░рд╣рд░реВрдорд╛ SQL рдкрдврд╛рдЙрдБрджреИ рдЖрдПрдХреЛ рдЫреБ, рд░ рдореЗрд░реЛ рдПрдЙрдЯрд╛ рдЕрд╡рд▓реЛрдХрди рдпреЛ рд╣реЛ рдХрд┐ рд╡рд┐рджреНрдпрд╛рд░реНрдереАрд╣рд░реВрд▓реЗ SQL рд▓рд╛рдИ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдмреБрдЭреНрдЫрдиреН рд░ рдЙрдиреАрд╣рд░реВрд▓рд╛рдИ рдХрд╛рд░реНрдп рджрд┐рдЗрдпреЛ рднрдиреЗ, рд░ рд╕рдореНрднрд╛рд╡рдирд╛рд╣рд░реВ рд░ рд╕реИрджреНрдзрд╛рдиреНрддрд┐рдХ рдЖрдзрд╛рд░рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдорд╛рддреНрд░ рдХреБрд░рд╛ рдЧрд░реНрджреИрдирдиреНред

рдпрд╕ рд▓реЗрдЦрдорд╛, рдо рддрдкрд╛рдЗрдБрд╕рдБрдЧ рдореЗрд░реЛ рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕реВрдЪреА рд╕рд╛рдЭрд╛ рдЧрд░реНрдиреЗрдЫреБ рдЬреБрди рдореИрд▓реЗ рд╡рд┐рджреНрдпрд╛рд░реНрдереАрд╣рд░реВрд▓рд╛рдИ рдЧреГрд╣рдХрд╛рд░реНрдпрдХреЛ рд░реВрдкрдорд╛ рджрд┐рдиреНрдЫреБ рд░ рдЬрд╕рдорд╛ рд╣рд╛рдореА рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░рдХрд╛ рдордВрдердирд╣рд░реВ рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реНрдЫреМрдВ, рдЬрд╕рд▓реЗ SQL рдХреЛ рдЧрд╣рд┐рд░реЛ рд░ рд╕реНрдкрд╖реНрдЯ рдмреБрдЭрд╛рдЗ рджрд┐рдиреНрдЫред

SQLред рд░рдорд╛рдЗрд▓реЛ рдкрдЬрд▓рд╣рд░реВ

SQL (╦И╔Ыs╦Иkju╦И╔Ыl; eng. рд╕рдВрд░рдЪрд┐рдд рдХреНрд╡реЗрд░реА рднрд╛рд╖рд╛) рдПрдХ рдЙрдкрдпреБрдХреНрдд рдбрд╛рдЯрд╛рдмреЗрд╕ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдкреНрд░рдгрд╛рд▓реА рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░рд┐рд▓реЗрд╕рдирд▓ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдбрд╛рдЯрд╛ рд╕рд┐рд░реНрдЬрдирд╛, рдкрд░рд┐рдорд╛рд░реНрдЬрди рд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ рд╣реЛред рдердк рдЬрд╛рдиреНрдиреБрд╣реЛрд╕реН

рддрдкрд╛рдИрдВ рд╡рд┐рднрд┐рдиреНрди рдмрд╛рдЯ SQL рдХреЛ рдмрд╛рд░реЗ рдорд╛ рдкрдвреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд╕реНрд░реЛрддрд╣рд░реБ.
рдпреЛ рд▓реЗрдЦ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕реНрдХреНрд░реНрдпрд╛рдЪрдмрд╛рдЯ SQL рд╕рд┐рдХрд╛рдЙрдиреЗ рдЙрджреНрджреЗрд╢реНрдпрд▓реЗ рд╣реЛрдЗрдиред

рддреНрдпрд╕реИрд▓реЗ рдЬрд╛рдФрдВред

рд╣рд╛рдореА рдкрд░рд┐рдЪрд┐рдд рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ рдорд╛рдирд╡ рд╕рдВрд╕рд╛рдзрди рдпреЛрдЬрдирд╛ Oracle рдорд╛ рдпрд╕рдХреЛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реБ рд╕рдВрдЧ (рдердк рдкрдвреНрдиреБрд╣реЛрд╕реН):

SQLред рд░рдорд╛рдЗрд▓реЛ рдкрдЬрд▓рд╣рд░реВ
рдо рдиреЛрдЯ рдЧрд░реНрдЫреБ рдХрд┐ рд╣рд╛рдореА SELECT рдорд╛ рдорд╛рддреНрд░ рдХрд╛рд░реНрдпрд╣рд░реВ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВред DML рд░ DDL рдорд╛ рдХреБрдиреИ рдХрд╛рд░реНрдпрд╣рд░реВ рдЫреИрдирдиреНред

рдХрд╛рд░реНрдпрд╣рд░реВ

рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдмрдиреНрдз рд░ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрджреИ

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред рд╕рдмреИ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рд╕рд╛рде рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН
рдирд┐рд░реНрдгрдп

SELECT * FROM employees

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред 'рдбреЗрднрд┐рдб' рдирд╛рдордХрд╛ рд╕рдмреИ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН
рдирд┐рд░реНрдгрдп

SELECT *
  FROM employees
 WHERE first_name = 'David';

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред 'IT_PROG' рдмрд░рд╛рдмрд░ job_id рднрдПрдХрд╛ рд╕рдмреИ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН
рдирд┐рд░реНрдгрдп

SELECT *
  FROM employees
 WHERE job_id = 'IT_PROG'

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред 50 рднрдиреНрджрд╛ рдмрдвреА рддрд▓рдм (рддрд▓рдм) рд╕рдВрдЧ 4000 рдФрдВ рд╡рд┐рднрд╛рдЧ (department_id) рдмрд╛рдЯ рд╕рдмреИ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН
рдирд┐рд░реНрдгрдп

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

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред реиреж рдФрдВ рд░ рейреж рдФрдВ рд╡рд┐рднрд╛рдЧрдХрд╛ рд╕рдмреИ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН (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) рдмрд╛рдЯ рдмреЛрдирд╕ рднрдПрдХрд╛ рд╕рдмреИ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдХрдорд┐рд╕рди_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 '';

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред рд╕рдмреИ рдкреНрд░рдмрдиреНрдзрдХ рдЖрдИрдбреАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН
рдирд┐рд░реНрдгрдп

SELECT DISTINCT manager_id
  FROM employees
 WHERE manager_id IS NOT NULL;

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред рдврд╛рдБрдЪрд╛рдорд╛ рдЙрдиреАрд╣рд░реВрдХреЛ рдкрджрд╣рд░реВ рднрдПрдХрд╛ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН: рдбреЛрдирд╛рд▓реНрдб(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 рдЕрдХреНрд╖рд░рд╣рд░реВ 'a' рдЫрдиреН
рдирд┐рд░реНрдгрдп

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

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред рд╕рдмреИ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЬрд╕рдХреЛ рддрд▓рдм 1000 рдХреЛ рдЧреБрдгрд╛ рд╣реЛ
рдирд┐рд░реНрдгрдп

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

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред рдХрд░реНрдордЪрд╛рд░реАрдХреЛ рдлреЛрди рдирдореНрдмрд░рдХреЛ рдкрд╣рд┐рд▓реЛ рей-рдЕрдЩреНрдХрдХреЛ рдирдореНрдмрд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдпрджрд┐ рдЙрд╕рдХреЛ рдирдореНрдмрд░ ╨е╨е╨е.╨е╨е╨е.╨е╨е╨е╨е рдврд╛рдБрдЪрд╛рдорд╛ рдЫ рднрдиреЗ
рдирд┐рд░реНрдгрдп

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' рдмрд░рд╛рдмрд░ рд░ рдирд╛рдордХреЛ рд▓рдореНрдмрд╛рдЗ рел рднрдиреНрджрд╛ рдмрдвреА рднрдПрдХрд╛ рд╕рдмреИ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред
рдирд┐рд░реНрдгрдп

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

рдбреБрдЕрд▓ рддрд╛рд▓рд┐рдХрд╛ред рдврд╛рдБрдЪрд╛рдорд╛ рднреЛрд▓рд┐рдХреЛ рдорд┐рддрд┐ рджреЗрдЦрд╛рдЙрдиреБрд╣реЛрд╕реН: рднреЛрд▓рд┐ рдЬрдирд╡рд░реАрдХреЛ рджреЛрд╕реНрд░реЛ рджрд┐рди рд╣реЛ
рдирд┐рд░реНрдгрдп

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;

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред реиреж% рджреНрд╡рд╛рд░рд╛ рдмрдвреЗрдХреЛ рддрд▓рдм рднрдПрдХрд╛ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдбрд▓рд░ рдЪрд┐рдиреНрд╣рдХреЛ рд╕рд╛рде рддрд▓рдм рджреЗрдЦрд╛рдЙрдиреБрд╣реЛрд╕реН
рдирд┐рд░реНрдгрдп

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

рдбреБрдЕрд▓ рддрд╛рд▓рд┐рдХрд╛ред рд╣рд╛рд▓рдХреЛ рдорд┐рддрд┐, + рд╕реЗрдХреЗрдиреНрдб, + рдорд┐рдиреЗрдЯ, + рдШрдгреНрдЯрд╛, + рджрд┐рди, + рдорд╣рд┐рдирд╛, + рд╡рд░реНрд╖ рдирд┐рд░реНрдпрд╛рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН
рдирд┐рд░реНрдгрдп

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;

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред рдкреВрд░реНрдг рддрд▓рдм рднрдПрдХрд╛ рд╕рдмреИ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН (рддрд▓рдм + рдЖрдпреЛрдЧ_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;

рд╕рдореВрд╣ рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдПрдХрддреНрд░рд┐рдд рдбрд╛рдЯрд╛ рд░рд┐рдкреЛрд░реНрдЯрд┐рдЩ

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред рдиреНрдпреВрдирддрдо рд░ рдЕрдзрд┐рдХрддрдо рддрд▓рдм, рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд░ рдврд┐рд▓реЛ рдЖрдЧрдорди рдорд┐рддрд┐ рд░ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╕рд╣рд┐рдд Department_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;

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред 30 рднрдиреНрджрд╛ рдмрдвреА рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реБ рд╕рдВрдЧ Department_id рдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН
рдирд┐рд░реНрдгрдп

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

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред Department_ids рдХреЛ рд╕реВрдЪреА рд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рднрд╛рдЧрдорд╛ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рдЧреЛрд▓рд╛рдХрд╛рд░ рдФрд╕рдд рддрд▓рдм рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред
рдирд┐рд░реНрдгрдп

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

рджреЗрд╢ рддрд╛рд▓рд┐рдХрд╛ред рд╕рдмреИ рджреЗрд╢_рдирд╛рдорд╣рд░реВрдХреЛ рд╕рдмреИ рдЕрдХреНрд╖рд░рд╣рд░реВрдХреЛ рдХреНрд╖реЗрддреНрд░_рдЖрдИрдбреА рдпреЛрдЧрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЬрд╕рдорд╛ 60 рднрдиреНрджрд╛ рдмрдвреА
рдирд┐рд░реНрдгрдп

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

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред рдбрд┐рдкрд╛рд░реНрдЯрдореЗрдиреНрдЯ_рдЖрдИрдбреАрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЬрд╕рдорд╛ рдзреЗрд░реИ (>1) job_id рдХрд╛рдо рдЧрд░реНрдиреЗ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВ
рдирд┐рд░реНрдгрдп

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

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред рдкреНрд░рдмрдиреНрдзрдХ_рдЖрдИрдбреАрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЬрд╕рдХреЛ рдЕрдзреАрдирд╕реНрдерд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ 5 рднрдиреНрджрд╛ рдмрдвреА рдЫ рд░ рдЙрд╕рдХреЛ рдЕрдзреАрдирд╕реНрдерд╣рд░реВрдХреЛ рд╕рдмреИ рддрд▓рдмрдХреЛ рдпреЛрдЧрдлрд▓ 50000 рднрдиреНрджрд╛ рдмрдвреА рдЫред
рдирд┐рд░реНрдгрдп

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

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред рдкреНрд░рдмрдиреНрдзрдХ_id рдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЬрд╕рдХреЛ рд╕рдмреИ рдорд╛рддрд╣рддрдХрд╛ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рдФрд╕рдд рддрд▓рдм 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;

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред 'CLERK' рд╢рдмреНрджрд▓реЗ рдЕрдиреНрддреНрдп рд╣реБрдиреЗ рд╕рдмреИ рдХрд░реНрдордЪрд╛рд░реАрдХреЛ job_id рдмрд╛рдЯ рдЕрдзрд┐рдХрддрдо рддрд▓рдм рдкрд╛рдЙрдиреБрд╣реЛрд╕реН
рдирд┐рд░реНрдгрдп

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

рддрд╛рд▓рд┐рдХрд╛ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВ, рд╡рд┐рднрд╛рдЧрд╣рд░реВ, рд╕реНрдерд╛рдирд╣рд░реВ, рджреЗрд╢рд╣рд░реВ, рдХреНрд╖реЗрддреНрд░рд╣рд░реВред рдпреБрд░реЛрдкрдорд╛ рдмрд╕реНрдиреЗ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН (region_name)
рдирд┐рд░реНрдгрдп

 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;

рддрд╛рд▓рд┐рдХрд╛ рдХрд░реНрдордЪрд╛рд░реА, рд░реЛрдЬрдЧрд╛рд░, рд╡рд┐рднрд╛рдЧрд╣рд░реВред рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрд▓рд╛рдИ рдврд╛рдБрдЪрд╛рдорд╛ рджреЗрдЦрд╛рдЙрдиреБрд╣реЛрд╕реН: First_name, Job_title, Department_nameред
рдЙрджрд╛рд╣рд░рдг:
рдкрд╣рд┐рд▓реЛ рдирд╛рдо | рдЬрд╛рдЧрд┐рд░ рд╢реАрд░реНрд╖рдХ | рд╡рд┐рднрд╛рдЧ_рдирд╛рдо
рдбреЛрдирд╛рд▓реНрдб | рдвреБрд╡рд╛рдиреА | рдХреНрд▓рд░реНрдХ рд╢рд┐рдкрд┐рдВрдЧ
рдирд┐рд░реНрдгрдп

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

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред рдкреНрд░рдмрдиреНрдзрдХрд╣рд░реВрд▓реЗ реирежрежрел рдорд╛ рдЬрд╛рдЧрд┐рд░ рдкрд╛рдПрдХрд╛ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН, рддрд░ рд╕реЛрд╣реА рд╕рдордпрдорд╛ рдпреА рдХрд╛рдорджрд╛рд░рд╣рд░реВрд▓реЗ рдЖрдлреИрдВрд▓реЗ реирежрежрел рдЕрдШрд┐ рдХрд╛рдо рдкрд╛рдПрдХрд╛ рдерд┐рдПред
рдирд┐рд░реНрдгрдп

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

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЬрд╕рдХрд╛ рдкреНрд░рдмрдиреНрдзрдХрд╣рд░реВрд▓реЗ рдХреБрдиреИ рдкрдирд┐ рд╡рд░реНрд╖рдХреЛ рдЬрдирд╡рд░реА рдорд╣рд┐рдирд╛рдорд╛ рдХрд╛рдо рдкрд╛рдПрдХрд╛ рдЫрдиреН рд░ рдпреА рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ job_title рдХреЛ рд▓рдореНрдмрд╛рдЗ 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;

рдкреНрд░рд╢реНрдирд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди Subqueries рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред рд╕рдмреИрднрдиреНрджрд╛ рд▓рд╛рдореЛ рдирд╛рдо рд╕рдВрдЧ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред
рдирд┐рд░реНрдгрдп

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 рднрдиреНрджрд╛ рдмрдвреА рддрд▓рдм рдкрд╛рдЙрдБрдЫрдиреН рддреНрдпрд╕реНрддрд╛ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред
рдирд┐рд░реНрдгрдп

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;

рддрд╛рд▓рд┐рдХрд╛ рдХрд░реНрдордЪрд╛рд░реА, рд╡рд┐рднрд╛рдЧрд╣рд░реВред рдЖрдИрдЯреА рд╡рд┐рднрд╛рдЧрдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВ рджреЗрдЦрд╛рдЙрдиреБрд╣реЛрд╕реН
рдирд┐рд░реНрдгрдп

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

рддрд╛рд▓рд┐рдХрд╛ рдХрд░реНрдордЪрд╛рд░реА, рд░реЛрдЬрдЧрд╛рд░, рд╡рд┐рднрд╛рдЧрд╣рд░реВред рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрд▓рд╛рдИ рдврд╛рдБрдЪрд╛рдорд╛ рджреЗрдЦрд╛рдЙрдиреБрд╣реЛрд╕реН: First_name, Job_title, Department_nameред
рдЙрджрд╛рд╣рд░рдг:
рдкрд╣рд┐рд▓реЛ рдирд╛рдо | рдЬрд╛рдЧрд┐рд░ рд╢реАрд░реНрд╖рдХ | рд╡рд┐рднрд╛рдЧ_рдирд╛рдо
рдбреЛрдирд╛рд▓реНрдб | рдвреБрд╡рд╛рдиреА | рдХреНрд▓рд░реНрдХ рд╢рд┐рдкрд┐рдВрдЧ
рдирд┐рд░реНрдгрдп

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;

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред рдкреНрд░рдмрдиреНрдзрдХрд╣рд░реВрд▓реЗ реирежрежрел рдорд╛ рдЬрд╛рдЧрд┐рд░ рдкрд╛рдПрдХрд╛ рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН, рддрд░ рд╕реЛрд╣реА рд╕рдордпрдорд╛ рдпреА рдХрд╛рдорджрд╛рд░рд╣рд░реВрд▓реЗ рдЖрдлреИрдВрд▓реЗ реирежрежрел рдЕрдШрд┐ рдХрд╛рдо рдкрд╛рдПрдХрд╛ рдерд┐рдПред
рдирд┐рд░реНрдгрдп

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

рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ред рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЬрд╕рдХрд╛ рдкреНрд░рдмрдиреНрдзрдХрд╣рд░реВрд▓реЗ рдХреБрдиреИ рдкрдирд┐ рд╡рд░реНрд╖рдХреЛ рдЬрдирд╡рд░реА рдорд╣рд┐рдирд╛рдорд╛ рдХрд╛рдо рдкрд╛рдПрдХрд╛ рдЫрдиреН рд░ рдпреА рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрдХреЛ job_title рдХреЛ рд▓рдореНрдмрд╛рдЗ 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 рдорд╛ рд░реЛрдЪрдХ рдХрд╛рд░реНрдп рд▓рд┐рдПрд░ рдЖрдЙрдиреБрднрдпреЛ рднрдиреЗ, рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВрдорд╛ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН, рдо рдпрд╕рд▓рд╛рдИ рд╕реВрдЪреАрдорд╛ рдердкреНрдиреЗрдЫреБред

╨б╨┐╨░╤Б╨╕╨▒╨╛ред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди