SQL. Π—Π°Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΊΠΈ

Здравствуй, Π₯Π°Π±Ρ€!

Π’ΠΎΡ‚ ΡƒΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ 3-Ρ… Π»Π΅Ρ‚ я ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°ΡŽ SQL Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚Ρ€Π΅Π½ΠΈΠ½Π³ Ρ†Π΅Π½Ρ‚Ρ€Π°Ρ…, ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΌΠΎΠΈΡ… наблюдСний являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ студСнты ΠΎΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ SQL Π»ΡƒΡ‡ΡˆΠ΅, Ссли ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌΠΈ Π·Π°Π΄Π°Ρ‡Ρƒ, Π° Π½Π΅ просто Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎ возмоТностях ΠΈ тСорСтичСских основах.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я подСлюсь с Π²Π°ΠΌΠΈ своим списком Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я даю студСнтам Π² качСствС домашнСго задания ΠΈ Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° брСйнстормы, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΌΡƒ ΠΈ Ρ‡Π΅Ρ‚ΠΊΠΎΠΌΡƒ пониманию SQL.

SQL. Π—Π°Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΊΠΈ

SQL (ΛˆΙ›sˈkjuΛˆΙ›l; Π°Π½Π³Π». structured query language β€” «язык структурированных запросов») β€” Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ язык программирования, примСняСмый для создания, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² рСляционной Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, управляСмой ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ систСмой управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅β€¦

ΠŸΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ± SQL ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… источников.
Данная ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π΅ прСслСдуСт Ρ†Π΅Π»ΠΈ ΠΎΠ±ΡƒΡ‡ΠΈΡ‚ΡŒ вас SQL с нуля.

Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΠ΅Ρ…Π°Π»ΠΈ.

Π‘ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Ρ‚ΡŒ всСм ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ схСму HR Π² Oracle с Π΅Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ (ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅):

SQL. Π—Π°Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΊΠΈ
ΠžΡ‚ΠΌΠ΅Ρ‡Ρƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° SELECT. Π’ΡƒΡ‚ Π½Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡ Π½Π° DML ΠΈ DDL.

Π—Π°Π΄Π°Ρ‡ΠΈ

Restricting and Sorting Data

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ±ΠΎ всСх сотрудниках
РСшСниС

SELECT * FROM employees

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников с ΠΈΠΌΠ΅Π½Π΅ΠΌ ‘David’
РСшСниС

SELECT *
  FROM employees
 WHERE first_name = 'David';

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников с job_id Ρ€Π°Π²Π½Ρ‹ΠΌ ‘IT_PROG’
РСшСниС

SELECT *
  FROM employees
 WHERE job_id = 'IT_PROG'

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников ΠΈΠ· 50Π³ΠΎ ΠΎΡ‚Π΄Π΅Π»Π° (department_id) с Π·Π°Ρ€ΠΏΠ»Π°Ρ‚ΠΎΠΉ(salary), большСй 4000
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников ΠΈΠ· 20Π³ΠΎ ΠΈ ΠΈΠ· 30Π³ΠΎ ΠΎΡ‚Π΄Π΅Π»Π° (department_id)
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… послСдняя Π±ΡƒΠΊΠ²Π° Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ€Π°Π²Π½Π° ‘a’
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников ΠΈΠ· 50Π³ΠΎ ΠΈ ΠΈΠ· 80Π³ΠΎ ΠΎΡ‚Π΄Π΅Π»Π° (department_id) Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ бонус (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ commission_pct Π½Π΅ пустоС)
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² ΠΈΠΌΠ΅Π½ΠΈ содСрТатся ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 2 Π±ΡƒΠΊΠ²Ρ‹ ‘n’
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π»ΠΈΠ½Π° ΠΈΠΌΠ΅Π½ΠΈ большС 4 Π±ΡƒΠΊΠ²
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° находится Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ΅ ΠΎΡ‚ 8000 Π΄ΠΎ 9000 (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ)
РСшСниС

SELECT *
  FROM employees
 WHERE salary BETWEEN 8000 AND 9000;

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² ΠΈΠΌΠ΅Π½ΠΈ содСрТится символ ‘%’
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх ID ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ²
РСшСниС

SELECT DISTINCT manager_id
  FROM employees
 WHERE manager_id IS NOT NULL;

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠΎΠ² с ΠΈΡ… позициями Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅: Donald(sh_clerk)
РСшСниС

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

Using Single-Row Functions to Customize Output

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π»ΠΈΠ½Π° ΠΈΠΌΠ΅Π½ΠΈ большС 10 Π±ΡƒΠΊΠ²
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² ΠΈΠΌΠ΅Π½ΠΈ Π΅ΡΡ‚ΡŒ Π±ΡƒΠΊΠ²Π° ‘b’ (Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° рСгистра)
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² ΠΈΠΌΠ΅Π½ΠΈ содСрТатся ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 2 Π±ΡƒΠΊΠ²Ρ‹ ‘a’
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΡ€Π°Ρ‚Π½Π° 1000
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ 3Ρ… Π·Π½Π°Ρ‡Π½ΠΎΠ΅ число Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π° сотрудника Ссли Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Π₯Π₯Π₯.Π₯Π₯Π₯.Π₯Π₯Π₯Π₯
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Departments. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ слово ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ Π΄Π΅ΠΏΠ°Ρ€Ρ‚Π°ΠΌΠ΅Π½Ρ‚Π° для Ρ‚Π΅Ρ… Ρƒ ΠΊΠΎΠ³ΠΎ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ слова
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π° сотрудников Π±Π΅Π· ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈ послСднСй Π±ΡƒΠΊΠ²Ρ‹ Π² ΠΈΠΌΠ΅Π½ΠΈ
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… послСдняя Π±ΡƒΠΊΠ²Π° Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ€Π°Π²Π½Π° ‘m’ ΠΈ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΠΈΠΌΠ΅Π½ΠΈ большСй 5Ρ‚ΠΈ
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Dual. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Ρ‚Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ пятницы
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ большС 17 Π»Π΅Ρ‚
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… послСдня Ρ†ΠΈΡ„Ρ€Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π° нСчСтная ΠΈ состоит ΠΈΠ· 3Π΅Ρ… чисСл Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ 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';

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников Π·Π°ΠΌΠ΅Π½ΠΈΠ² Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ PHONE_NUMBER всС ‘.’ Π½Π° ‘-‘
РСшСниС

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

Using Conversion Functions and Conditional Expressions

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΈ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ дСнь мСсяца (любого)
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΈ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² 2008ΠΎΠΌ Π³ΠΎΠ΄Ρƒ
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° DUAL. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π°Π²Ρ‚Ρ€Π°ΡˆΠ½ΡŽΡŽ Π΄Π°Ρ‚Ρƒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅: Tomorrow is Second day of January
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников ΠΈ Π΄Π°Ρ‚Ρƒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄Π° Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅: 21st of June, 2007
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠΎΠ² с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°ΠΌΠΈ Π½Π° 20%. Π—Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ со Π·Π½Π°ΠΊΠΎΠΌ Π΄ΠΎΠ»Π»Π°Ρ€Π°
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° 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;

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников с ΠΏΠΎΠ»Π½Ρ‹ΠΌΠΈ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°ΠΌΠΈ (salary + commission_pct(%)) Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅: $24,000.00
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх сотрудников ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ бонусов ΠΊ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π΅ (Yes/No)
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сотрудника: МСньшС 5000 считаСтся Low level, Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ 5000 ΠΈ мСньшС 10000 считаСтся Normal level, Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠΎΠΈ Ρ€Π°Π²Π½ΠΎ 10000 считаСтся High level
РСшСниС

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;

Π’Π°Π±Π»ΠΈΡ†Π° Countries. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страны ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π΅Π³ΠΈΠΎΠ½ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ находится: 1-Europe, 2-America, 3-Asia, 4-Africa (Π±Π΅Π· Join)
РСшСниС

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;

Reporting Aggregated Data Using the Group Functions

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΠΏΠΎΡ€Ρ‚ ΠΏΠΎ 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;

Π’Π°Π±Π»ΠΈΡ†Π° Employees. Бколько сотрудников ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… начинаСтся с ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π±ΡƒΠΊΠ²Ρ‹? Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ количСству. ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Π³Π΄Π΅ количСство большС 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;

Π’Π°Π±Π»ΠΈΡ†Π° Employees. Бколько сотрудников ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΆΠ΅ ΠΎΡ‚Π΄Π΅Π»Π΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ?
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΠΏΠΎΡ€Ρ‚ сколько сотрудников приняли Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь Π½Π΅Π΄Π΅Π»ΠΈ. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ количСству
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΠΏΠΎΡ€Ρ‚ сколько сотрудников приняли Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ Π³ΠΎΠ΄Π°ΠΌ. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ количСству
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ количСство Π΄Π΅ΠΏΠ°Ρ€Ρ‚Π°ΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΅ΡΡ‚ΡŒ сотрудники
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список department_id Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ большС 30 сотрудников
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список department_id ΠΈ ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½Π½ΡƒΡŽ ΡΡ€Π΅Π΄Π½ΡŽΡŽ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄Π΅ΠΏΠ°Ρ€Ρ‚Π°ΠΌΠ΅Π½Ρ‚Π΅.
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Countries. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список region_id сумма всСх Π±ΡƒΠΊΠ² всСх country_name Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ большС 60Ρ‚ΠΈ
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список department_id Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… (>1) job_id
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список manager_id Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… количСство ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… большС 5 ΠΈ сумма всСх Π·Π°Ρ€ΠΏΠ»Π°Ρ‚ Π΅Π³ΠΎ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… большС 50000
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список manager_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;

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ ΠΈΠ· всСх сотрудников 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';

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ срСди всСх срСдних Π·Π°Ρ€ΠΏΠ»Π°Ρ‚ ΠΏΠΎ Π΄Π΅ΠΏΠ°Ρ€Ρ‚Π°ΠΌΠ΅Π½Ρ‚Ρƒ
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ количСство сотрудников с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ количСством Π±ΡƒΠΊΠ² Π² ΠΈΠΌΠ΅Π½ΠΈ. ΠŸΡ€ΠΈ этом ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ… Ρƒ ΠΊΠΎΠ³ΠΎ Π΄Π»ΠΈΠ½Π° ΠΈΠΌΠ΅Π½ΠΈ большС 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);

Displaying Data from Multiple Tables Using Joins

Π’Π°Π±Π»ΠΈΡ†Π° Employees, Departaments, Locations, Countries, Regions. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список Ρ€Π΅Π³ΠΈΠΎΠ½ΠΎΠ² ΠΈ количСство сотрудников Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ€Π΅Π³ΠΈΠΎΠ½Π΅
РСшСниС

  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;

Π’Π°Π±Π»ΠΈΡ†Π° Employees, Departaments, Locations, Countries, Regions. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ сотрудникС:
First_name, Last_name, Departament, Job, Street, Country, Region
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всСх ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π² ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½ΠΈΠΈ большС 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;

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всСх сотрудников ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈ ΠΊΠΎΠΌΡƒ Π½Π΅ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡŽΡ‚ΡΡ
РСшСниС

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;

Π’Π°Π±Π»ΠΈΡ†Π° Employees, Job_history. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Employee хранятся всС сотрудники. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Job_history хранятся сотрудники ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΊΠΈΠ½ΡƒΠ»ΠΈ компанию. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΠΏΠΎΡ€Ρ‚ ΠΎ всСх сотрудниках ΠΈ ΠΎ Π΅Π³ΠΎ статусС Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ (Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠΈΠ½ΡƒΠ» компанию с Π΄Π°Ρ‚ΠΎΠΉ ΡƒΡ…ΠΎΠ΄Π°)
ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
first_name | status
Jennifer | Left the company at 31 of December, 2006
Clara | Currently Working
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees, Departaments, Locations, Countries, Regions. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список сотрудников ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΆΠΈΠ²ΡƒΡ‚ Π² Europe (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';

Π’Π°Π±Π»ΠΈΡ†Π° Employees, Departaments. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всС Π΄Π΅ΠΏΠ°Ρ€Ρ‚Π°ΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ большС 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;

Π’Π°Π±Π»ΠΈΡ†Π° Employees, Departaments. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всСх сотрудников ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ состоят Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ Π΄Π΅ΠΏΠ°Ρ€Ρ‚Π°ΠΌΠ΅Π½Ρ‚Π΅
РСшСниС

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;

Π’Π°Π±Π»ΠΈΡ†Π° Employees, Departaments. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всС Π΄Π΅ΠΏΠ°Ρ€Ρ‚Π°ΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сотрудника
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всСх сотрудников Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π½ΠΈ ΠΊΠΎΠ³ΠΎ Π² ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½ΠΈΠΈ
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees, Jobs, Departaments. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ сотрудников Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅: First_name, Job_title, Department_name.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
First_name | Job_title | Department_name
Donald | Shipping | Clerk Shipping
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список сотрудников ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΡΡ‚Ρ€ΠΎΠΈΠ»ΠΈΡΡŒ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² 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');

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список сотрудников ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΡΡ‚Ρ€ΠΎΠΈΠ»ΠΈΡΡŒ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² январС мСсяцС любого Π³ΠΎΠ΄Π° ΠΈ Π΄Π»ΠΈΠ½Π° 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;

Using Subqueries to Solve Queries

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список сотрудников с самым Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ.
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список сотрудников с Π·Π°Ρ€ΠΏΠ»Π°Ρ‚ΠΎΠΉ большСй срСднСй Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹ всСх сотрудников.
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees, Departments, Locations. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π³ΠΎΡ€ΠΎΠ΄ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сотрудники Π² суммС Π·Π°Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ мСньшС всСх.
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список сотрудников Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ большС 15000.
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees, Departaments. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всС Π΄Π΅ΠΏΠ°Ρ€Ρ‚Π°ΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сотрудника
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всСх сотрудников ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°ΠΌΠΈ
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всСх ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π² ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½ΠΈΠΈ большС 6Ρ‚ΠΈ сотрудников
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees, Departaments. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ сотрудников ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Π΄Π΅ΠΏΠ°Ρ€Ρ‚Π°ΠΌΠ΅Π½Ρ‚Π΅ IT
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Employees, Jobs, Departaments. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ сотрудников Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅: First_name, Job_title, Department_name.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
First_name | Job_title | Department_name
Donald | Shipping | Clerk Shipping
РСшСниС

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;

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список сотрудников ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΡΡ‚Ρ€ΠΎΠΈΠ»ΠΈΡΡŒ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² 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');

Π’Π°Π±Π»ΠΈΡ†Π° Employees. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список сотрудников ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΡΡ‚Ρ€ΠΎΠΈΠ»ΠΈΡΡŒ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² январС мСсяцС любого Π³ΠΎΠ΄Π° ΠΈ Π΄Π»ΠΈΠ½Π° 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;

На этом ΠΏΠΎΠΊΠ° всё.

НадСюсь, Π·Π°Π΄Π°Ρ‡ΠΈ Π±Ρ‹Π»ΠΈ интСрСсными ΠΈ ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ.
Π‘ΡƒΠ΄Ρƒ ΠΏΠΎ возмоТности Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒ этот список Π·Π°Π΄Π°Ρ‡.
Π’Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Ρƒ Ρ€Π°Π΄ Π»ΡŽΠ±Ρ‹ΠΌ замСчаниям ΠΈ прСдлоТСниям.

P.S.: Если ΠΊΠΎΠΌΡƒ Ρ‚ΠΎ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ интСрСсная Π·Π°Π΄Π°Ρ‡Π° Π½Π° SELECT, ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² комСнтариях, добавлю Π² список.

Бпасибо.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ