SQL. Π—Π°Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΈ пъзСли

Π—Π΄Ρ€Π°Π²Π΅ΠΉ Habr!

ΠŸΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 3 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°ΠΌ SQL Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΎΠ±ΡƒΡ‡ΠΈΡ‚Π΅Π»Π½ΠΈ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²Π΅ ΠΈ Π΅Π΄Π½ΠΎ ΠΎΡ‚ ΠΌΠΎΠΈΡ‚Π΅ наблюдСния Π΅, Ρ‡Π΅ студСнтитС усвояват ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ SQL ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅, Π°ΠΊΠΎ ΠΈΠΌ сС Π΄Π°Π΄Π΅ Π·Π°Π΄Π°Ρ‡Π°, Π° Π½Π΅ просто сС Π³ΠΎΠ²ΠΎΡ€ΠΈ Π·Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ ΠΈ Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΡ‡Π½ΠΈΡ‚Π΅ основи.

Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ сподСля с вас моя списък със Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π΄Π°Π²Π°ΠΌ Π½Π° ΡƒΡ‡Π΅Π½ΠΈΡ†ΠΈΡ‚Π΅ ΠΊΠ°Ρ‚ΠΎ домашна Ρ€Π°Π±ΠΎΡ‚Π° ΠΈ Π²ΡŠΡ€Ρ…Ρƒ ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°ΠΌΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅ ΠΌΠΎΠ·ΡŠΡ‡Π½ΠΈ Π°Ρ‚Π°ΠΊΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ дълбоко ΠΈ ясно Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° SQL.

SQL. Π—Π°Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΈ пъзСли

SQL (ΛˆΙ›sˈkjuΛˆΙ›l; Π°Π½Π³Π». структуриран Π΅Π·ΠΈΠΊ Π·Π° заявки) Π΅ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π΅Π½ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π·Π° създаванС, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, управлявана ΠΎΡ‚ подходяща систСма Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. ΠŸΠΎΠ²Π΅Ρ‡Π΅ подробности ...

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Π·Π° SQL ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ.
Π’Π°Π·ΠΈ статия няма Π·Π° Ρ†Π΅Π» Π΄Π° Π²ΠΈ Π½Π°ΡƒΡ‡ΠΈ Π½Π° SQL ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π°.

Π’Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° Π²ΡŠΡ€Π²ΠΈΠΌ.

Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΄ΠΎΠ±Ρ€Π΅ ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈΡ‚Π΅ HR схСма Π² Oracle с Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ (ΠžΡ‰Π΅):

SQL. Π—Π°Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΈ пъзСли
ΠžΡ‚Π±Π΅Π»ΡΠ·Π²Π°ΠΌ, Ρ‡Π΅ Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ само Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° SELECT. Няма Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° DML ΠΈ DDL.

Π·Π°Π΄Π°Ρ‡ΠΈ

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Π½Π΅ ΠΈ сортиранС Π½Π° Π΄Π°Π½Π½ΠΈ

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък с информация Π·Π° всички слуТитСли
РСшСниС

SELECT * FROM employees

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък с всички слуТитСли Π½Π° ΠΈΠΌΠ΅ β€žΠ”Π΅ΠΉΠ²ΠΈΠ΄β€œ
РСшСниС

SELECT *
  FROM employees
 WHERE first_name = 'David';

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° всички слуТитСли с job_id Ρ€Π°Π²Π΅Π½ Π½Π° 'IT_PROG'
РСшСниС

SELECT *
  FROM employees
 WHERE job_id = 'IT_PROG'

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° всички слуТитСли ΠΎΡ‚ 50-Ρ‚ΠΈ ΠΎΡ‚Π΄Π΅Π» (department_id) със Π·Π°ΠΏΠ»Π°Ρ‚Π° (salary) Π½Π°Π΄ 4000
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° всички слуТитСли ΠΎΡ‚ 20-Ρ‚ΠΈ ΠΈ ΠΎΡ‚ 30-Ρ‚ΠΈ ΠΎΡ‚Π΄Π΅Π» (department_id)
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° всички слуТитСли, чиято послСдна Π±ΡƒΠΊΠ²Π° Π² ΠΈΠΌΠ΅Ρ‚ΠΎ Π΅ β€žΠ°β€œ
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° всички слуТитСли ΠΎΡ‚ 50-Ρ‚ΠΈ ΠΈ ΠΎΡ‚ 80-Ρ‚ΠΈ ΠΎΡ‚Π΄Π΅Π» (department_id), ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ бонус (стойността Π² ΠΊΠΎΠ»ΠΎΠ½Π°Ρ‚Π° Commission_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;

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° слуТитСлитС с Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚: Donald(sh_clerk)
РСшСниС

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

ИзползванС Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π΅Π΄ΠΈΠ½ Ρ€Π΅Π΄ Π·Π° пСрсонализиранС Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π°

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък с всички слуТитСли, Ρ‡ΠΈΠ΅Ρ‚ΠΎ ΠΈΠΌΠ΅ Π΅ ΠΏΠΎ-дълго ΠΎΡ‚ 10 Π±ΡƒΠΊΠ²ΠΈ
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° всички слуТитСли, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ Π±ΡƒΠΊΠ²Π°Ρ‚Π° β€žbβ€œ Π² ΠΈΠΌΠ΅Ρ‚ΠΎ си (Π±Π΅Π· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π° ΠΌΠ°Π»ΠΊΠΈ ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ Π±ΡƒΠΊΠ²ΠΈ)
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък с всички слуТитСли, Ρ‡ΠΈΠ΅Ρ‚ΠΎ ΠΈΠΌΠ΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΏΠΎΠ½Π΅ 2 Π±ΡƒΠΊΠ²ΠΈ β€žΠ°β€œ
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° всички слуТитСли, чиято Π·Π°ΠΏΠ»Π°Ρ‚Π° Π΅ ΠΊΡ€Π°Ρ‚Π½Π° Π½Π° 1000
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ 3-Ρ†ΠΈΡ„Ρ€Π΅Π½ΠΎ число ΠΎΡ‚ тСлСфонния Π½ΠΎΠΌΠ΅Ρ€ Π½Π° слуТитСля, Π°ΠΊΠΎ Π½ΠΎΠΌΠ΅Ρ€ΡŠΡ‚ ΠΌΡƒ Π΅ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π₯Π₯Π₯.Π₯Π₯Π₯.Π₯Π₯Π₯Π₯
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚Π΅. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ ΠΏΡŠΡ€Π²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΎΡ‚Π΄Π΅Π»Π° Π·Π° Ρ‚Π΅Π·ΠΈ с ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Π΅Π΄Π½Π° Π΄ΡƒΠΌΠ° Π² ΠΈΠΌΠ΅Ρ‚ΠΎ
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠΌΠ΅Π½Π° Π½Π° слуТитСли Π±Π΅Π· ΠΏΡŠΡ€Π²Π°Ρ‚Π° ΠΈ послСдната Π±ΡƒΠΊΠ²Π° Π² ΠΈΠΌΠ΅Ρ‚ΠΎ
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° всички слуТитСли, чиято послСдна Π±ΡƒΠΊΠ²Π° Π² ΠΈΠΌΠ΅Ρ‚ΠΎ Π΅ Ρ€Π°Π²Π½Π° Π½Π° 'm' ΠΈ Π΄ΡŠΠ»ΠΆΠΈΠ½Π°Ρ‚Π° Π½Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π΅ ΠΏΠΎ-голяма ΠΎΡ‚ 5
РСшСниС

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

Π”Π²ΠΎΠΉΠ½Π° маса. ΠŸΠΎΠ»ΡƒΡ‡Π΅Ρ‚Π΅ Π΄Π°Ρ‚Π°Ρ‚Π° слСдващия ΠΏΠ΅Ρ‚ΡŠΠΊ
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° всички слуТитСли, ΠΊΠΎΠΈΡ‚ΠΎ работят Π² компанията ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 17 Π³ΠΎΠ΄ΠΈΠ½ΠΈ
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. ΠŸΠΎΠ»ΡƒΡ‡Π΅Ρ‚Π΅ списък Π½Π° всички слуТитСли, чиято послСдна Ρ†ΠΈΡ„Ρ€Π° ΠΎΡ‚ тСлСфонния Π½ΠΎΠΌΠ΅Ρ€ Π΅ Π½Π΅Ρ‡Π΅Ρ‚Π½Π° ΠΈ сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ 3 числа, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈ с Ρ‚ΠΎΡ‡ΠΊΠ°
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° всички слуТитСли, чиято стойност Π½Π° job_id слСд Π·Π½Π°ΠΊΠ° '_' ΠΈΠΌΠ° ΠΏΠΎΠ½Π΅ 3 Π·Π½Π°ΠΊΠ°, Π½ΠΎ Ρ‚Π°Π·ΠΈ стойност слСд '_' Π½Π΅ Π΅ Ρ€Π°Π²Π½Π° Π½Π° 'CLERK'
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. ΠŸΠΎΠ»ΡƒΡ‡Π΅Ρ‚Π΅ списък с всички слуТитСли, ΠΊΠ°Ρ‚ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ всички β€ž.β€œ Π² стойността PHONE_NUMBER На '-'
РСшСниС

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

ИзползванС Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ ΠΈ условни ΠΈΠ·Ρ€Π°Π·ΠΈ

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° всички слуТитСли, дошли Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ Π΄Π΅Π½ ΠΎΡ‚ мСсСца (всСки)
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° всички слуТитСли, дошли Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€Π΅Π· 2008 Π³
РСшСниС

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

Π”Π’ΠžΠ™ΠΠ маса. ΠŸΠΎΠΊΠ°ΠΆΠ΅Ρ‚Π΅ ΡƒΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° Π΄Π°Ρ‚Π° във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚: Π£Ρ‚Ρ€Π΅ Π΅ Π²Ρ‚ΠΎΡ€ΠΈ Π΄Π΅Π½ Π½Π° януари
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° всички слуТитСли ΠΈ Π½Π°Ρ‡Π°Π»Π½Π°Ρ‚Π° ΠΈΠΌ Π΄Π°Ρ‚Π° във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚: 21 юни 2007 Π³
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък със слуТитСли с повишСни Π·Π°ΠΏΠ»Π°Ρ‚ΠΈ с 20%. ΠŸΠΎΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΠ»Π°Ρ‚Π°Ρ‚Π° със Π·Π½Π°ΠΊΠ° Π·Π° Π΄ΠΎΠ»Π°Ρ€
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° всички слуТитСли, дошли Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€Π΅Π· Ρ„Π΅Π²Ρ€ΡƒΠ°Ρ€ΠΈ 2007 Π³.
РСшСниС

SELECT *
  FROM employees
 WHERE hire_date BETWEEN TO_DATE ('01.02.2007', 'DD.MM.YYYY')
                     AND LAST_DAY (TO_DATE ('01.02.2007', 'DD.MM.YYYY'));

SELECT *
  FROM employees
 WHERE to_char(hire_date,'MM.YYYY') = '02.2007'; 

Π”Π’ΠžΠ™ΠΠ маса. ЕкспортиранС Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π° Π΄Π°Ρ‚Π°, + сСкунда, + ΠΌΠΈΠ½ΡƒΡ‚Π°, + час, + Π΄Π΅Π½, + мСсСц, + Π³ΠΎΠ΄ΠΈΠ½Π°
РСшСниС

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-Африка (Π±Π΅Π· 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;

ΠžΡ‚Ρ‡ΠΈΡ‚Π°Π½Π΅ Π½Π° ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π³Ρ€ΡƒΠΏΠΎΠ²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΏΠΎ 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;

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък с department_id с ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 30 слуТитСли
РСшСниС

  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;

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° Π΄ΡŠΡ€ΠΆΠ°Π²ΠΈΡ‚Π΅. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък с region_id сбор ΠΎΡ‚ всички Π±ΡƒΠΊΠ²ΠΈ Π½Π° всички ΠΈΠΌΠ΅Π½Π° Π½Π° Π΄ΡŠΡ€ΠΆΠ°Π²ΠΈ, Π² ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 60
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък с department_id, Π² ΠΊΠΎΠΉΡ‚ΠΎ работят слуТитСли Π½Π° няколко (>1) job_id
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък с manager_id, Ρ‡ΠΈΠΉΡ‚ΠΎ Π±Ρ€ΠΎΠΉ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½ΠΈ Π΅ ΠΏΠΎ-голям ΠΎΡ‚ 5 ΠΈ сумата ΠΎΡ‚ всички Π·Π°ΠΏΠ»Π°Ρ‚ΠΈ Π½Π° Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½ΠΈ Π΅ ΠΏΠΎ-голяма ΠΎΡ‚ 50000 XNUMX
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък с 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;

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ максималната Π·Π°ΠΏΠ»Π°Ρ‚Π° ΠΎΡ‚ всички слуТитСли job_id, която Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° с Π΄ΡƒΠΌΠ°Ρ‚Π° β€žCLERKβ€œ
РСшСниС

SELECT MAX (salary) max_salary
  FROM employees
 WHERE job_id LIKE '%CLERK';

SELECT MAX (salary) max_salary
  FROM employees
 WHERE SUBSTR (job_id, -5) = 'CLERK';

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ максималната Π·Π°ΠΏΠ»Π°Ρ‚Π° срСд всички срСдни Π·Π°ΠΏΠ»Π°Ρ‚ΠΈ Π·Π° ΠΎΡ‚Π΄Π΅Π»Π°
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ броя Π½Π° слуТитСлитС с Сднакъв Π±Ρ€ΠΎΠΉ Π±ΡƒΠΊΠ²ΠΈ Π² ΠΈΠΌΠ΅Ρ‚ΠΎ си. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΉΡ‚Π΅ само ΠΎΠ½Π΅Π·ΠΈ, Ρ‡ΠΈΠ΅Ρ‚ΠΎ ΠΈΠΌΠ΅ Π΅ ΠΏΠΎ-дълго ΠΎΡ‚ 5 ΠΈ броят Π½Π° слуТитСлитС със ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΈΠΌΠ΅ Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 20. Π‘ΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ ΠΏΠΎ дълТина Π½Π° ΠΈΠΌΠ΅Ρ‚ΠΎ
РСшСниС

  SELECT LENGTH (first_name), COUNT (*)
    FROM employees
GROUP BY LENGTH (first_name)
  HAVING LENGTH (first_name) > 5 AND COUNT (*) > 20
ORDER BY LENGTH (first_name);

  SELECT LENGTH (first_name), COUNT (*)
    FROM employees
   WHERE LENGTH (first_name) > 5
GROUP BY LENGTH (first_name)
  HAVING COUNT (*) > 20
ORDER BY LENGTH (first_name);

ПоказванС Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ мноТСство Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° съСдинСния

Π’Π°Π±Π»ΠΈΡ†Π° Π‘Π»ΡƒΠΆΠΈΡ‚Π΅Π»ΠΈ, ΠΎΡ‚Π΄Π΅Π»ΠΈ, мСстополоТСния, Π΄ΡŠΡ€ΠΆΠ°Π²ΠΈ, Ρ€Π΅Π³ΠΈΠΎΠ½ΠΈ. ΠŸΠΎΠ»ΡƒΡ‡Π΅Ρ‚Π΅ списък с Ρ€Π΅Π³ΠΈΠΎΠ½ΠΈ ΠΈ броя Π½Π° слуТитСлитС във всСки Ρ€Π΅Π³ΠΈΠΎΠ½
РСшСниС

  SELECT region_name, COUNT (*)
    FROM employees e
         JOIN departments d ON (e.department_id = d.department_id)
         JOIN locations l ON (d.location_id = l.location_id)
         JOIN countries c ON (l.country_id = c.country_id)
         JOIN regions r ON (c.region_id = r.region_id)
GROUP BY region_name;

Π’Π°Π±Π»ΠΈΡ†Π° Π‘Π»ΡƒΠΆΠΈΡ‚Π΅Π»ΠΈ, ΠΎΡ‚Π΄Π΅Π»ΠΈ, мСстополоТСния, Π΄ΡŠΡ€ΠΆΠ°Π²ΠΈ, Ρ€Π΅Π³ΠΈΠΎΠ½ΠΈ. ΠŸΠΎΠ»ΡƒΡ‡Π΅Ρ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π° информация Π·Π° всСки слуТитСл:
First_name, Last_name, Department, 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);

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. ΠŸΠΎΠΊΠ°ΠΆΠ΅Ρ‚Π΅ всички ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 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. Π’Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° Employee ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° всички слуТитСли. Π’Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° 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);

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° слуТитСлитС, Ρ‡ΠΈΠΈΡ‚ΠΎ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΠΈ са ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€Π΅Π· 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');

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък със слуТитСли, Ρ‡ΠΈΠΈΡ‚ΠΎ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΠΈ са ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€Π΅Π· мСсСц януари Π½Π° която ΠΈ Π΄Π° Π΅ Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ Π΄ΡŠΠ»ΠΆΠΈΠ½Π°Ρ‚Π° Π½Π° 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;

ИзползванС Π½Π° подзаявки Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° заявки

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък със слуТитСли с Π½Π°ΠΉ-дълго ΠΈΠΌΠ΅.
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък със слуТитСли със Π·Π°ΠΏΠ»Π°Ρ‚Π°, ΠΏΠΎ-висока ΠΎΡ‚ срСдната Π·Π°ΠΏΠ»Π°Ρ‚Π° Π½Π° всички слуТитСли.
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π‘Π»ΡƒΠΆΠΈΡ‚Π΅Π»ΠΈ, ΠΎΡ‚Π΄Π΅Π»ΠΈ, мСстополоТСния. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ Π³Ρ€Π°Π΄Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ слуТитСлитС пСчСлят Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΠ±Ρ‰ΠΎ.
РСшСниС

SELECT city
    FROM employees e
         JOIN departments d ON (e.department_id = d.department_id)
         JOIN locations l ON (d.location_id = l.location_id)
GROUP BY city
  HAVING SUM (salary) =
         (  SELECT MIN (SUM (salary))
              FROM employees e
                   JOIN departments d ON (e.department_id = d.department_id)
                   JOIN locations l ON (d.location_id = l.location_id)
          GROUP BY city);

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък със слуТитСли, Ρ‡ΠΈΠΉΡ‚ΠΎ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π·Π°ΠΏΠ»Π°Ρ‚Π° Π½Π°Π΄ 15000 XNUMX.
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π‘Π»ΡƒΠΆΠΈΡ‚Π΅Π»ΠΈ, ΠΎΡ‚Π΄Π΅Π»ΠΈ. ПоказванС Π½Π° всички ΠΎΡ‚Π΄Π΅Π»ΠΈ Π±Π΅Π· слуТитСли
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. ΠŸΠΎΠΊΠ°ΠΆΠ΅Ρ‚Π΅ всички слуТитСли, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΠΈ
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. ΠŸΠΎΠΊΠ°ΠΆΠ΅Ρ‚Π΅ всички ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 6 слуТитСли
РСшСниС

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

Π’Π°Π±Π»ΠΈΡ†Π° Π‘Π»ΡƒΠΆΠΈΡ‚Π΅Π»ΠΈ, ΠΎΡ‚Π΄Π΅Π»ΠΈ. ΠŸΠΎΠΊΠ°ΠΆΠ΅Ρ‚Π΅ слуТитСли, ΠΊΠΎΠΈΡ‚ΠΎ работят Π² ИВ ΠΎΡ‚Π΄Π΅Π»Π°
РСшСниС

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;

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък Π½Π° слуТитСлитС, Ρ‡ΠΈΠΈΡ‚ΠΎ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΠΈ са ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€Π΅Π· 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');

Π’Π°Π±Π»ΠΈΡ†Π° Π½Π° слуТитСлитС. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ списък със слуТитСли, Ρ‡ΠΈΠΈΡ‚ΠΎ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΠΈ са ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€Π΅Π· мСсСц януари Π½Π° която ΠΈ Π΄Π° Π΅ Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ Π΄ΡŠΠ»ΠΆΠΈΠ½Π°Ρ‚Π° Π½Π° 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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€