SQL. เบ›เบดเบ”เบชเบฐเบกเปˆเบงเบ™เบŠเบทเปˆเบ™

เบชเบฐเบšเบฒเบเบ”เบต, Habr!

เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบซเบผเบฒเบเบเบงเปˆเบฒ 3 เบ›เบตเบ—เบตเปˆเบ‚เป‰เบญเบเป„เบ”เป‰เบชเบญเบ™ SQL เปƒเบ™เบชเบนเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเบ•เปˆเบฒเบ‡เป†, เปเบฅเบฐเบซเบ™เบถเปˆเบ‡เปƒเบ™เบ‚เปเป‰เบชเบฑเบ‡เป€เบเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบกเปˆเบ™เบงเปˆเบฒเบ™เบฑเบเบฎเบฝเบ™เบฎเบนเป‰เปเบฅเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆ SQL เบ”เบตเบเบงเปˆเบฒเบ–เป‰เบฒเบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเบกเบญเบšเปƒเบซเป‰, เปเบฅเบฐเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบšเบญเบเป€เบ–เบดเบ‡เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปเบฅเบฐเบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบดเบ”เบชเบฐเบ”เบตเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเปเบšเปˆเบ‡เบ›เบฑเบ™เบเบฑเบšเบ—เปˆเบฒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบกเบญเบšเปƒเบซเป‰เบ™เบฑเบเบฎเบฝเบ™เป€เบ›เบฑเบ™เบงเบฝเบเบšเป‰เบฒเบ™เปเบฅเบฐเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ›เบฐเป€เบžเบ”เบ•เปˆเบฒเบ‡เป†เบ‚เบญเบ‡เบชเบฐเบซเบกเบญเบ‡, เป€เบŠเบดเปˆเบ‡เบ™เปเบฒเป„เบ›เบชเบนเปˆเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเป€เบฅเบดเบเป€เบŠเบดเปˆเบ‡เปเบฅเบฐเบŠเบฑเบ”เป€เบˆเบ™เบเปˆเบฝเบงเบเบฑเบš SQL.

SQL. เบ›เบดเบ”เบชเบฐเบกเปˆเบงเบ™เบŠเบทเปˆเบ™

SQL (หˆษ›sหˆkjuหˆษ›l; เบžเบฒเบชเบฒเบชเบญเบšเบ–เบฒเบกเบ—เบตเปˆเบกเบตเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”) เปเบกเปˆเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ›เบฐเบเบฒเบ”เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡, เปเบเป‰เป„เบ‚เปเบฅเบฐเบˆเบฑเบ”เบเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบ—เบตเปˆเบ„เบธเป‰เบกเบ„เบญเบ‡เป‚เบ”เบเบฅเบฐเบšเบปเบšเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก. เบฎเบฝเบ™เบฎเบนเป‰เป€เบžเบตเปˆเบกเป€เบ•เบตเบก

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบš SQL เบˆเบฒเบเบ•เปˆเบฒเบ‡เป† เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™.
เบšเบปเบ”โ€‹เบ„เบงเบฒเบกโ€‹เบ™เบตเป‰โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบกเบตโ€‹เบˆเบธเบ”โ€‹เบ›เบฐโ€‹เบชเบปเบ‡โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบชเบญเบ™โ€‹เบ—เปˆเบฒเบ™ SQL เบˆเบฒเบ scratchโ€‹.

เบชเบฐเบ™เบฑเป‰เบ™เปƒเบซเป‰เป„เบ›.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบชเบฝเบ‡ เปเบœเบ™เบงเบฒเบ” HR เปƒเบ™ Oracle เบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบญเบ‡เบกเบฑเบ™ (เบญเปˆเบฒเบ™โ€‹เป€เบžเบตเปˆเบกโ€‹เป€เบ•เบตเบก):

SQL. เบ›เบดเบ”เบชเบฐเบกเปˆเบงเบ™เบŠเบทเปˆเบ™
เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบžเบฝเบ‡เปเบ•เปˆเบงเบฝเบเบ‡เบฒเบ™ SELECT. เบšเปเปˆเบกเบตเปœเป‰เบฒเบงเบฝเบ DML เบซเบผเบท DDL เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰.

เบงเบฝเบเบ‡เบฒเบ™

เบเบฒเบ™เบˆเบณเบเบฑเบ” เปเบฅเบฐเบเบฒเบ™เบˆเบฑเบ”เบฎเบฝเบ‡เบ‚เปเป‰เบกเบนเบ™

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™. เป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

SELECT * FROM employees

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™. เป€เบญเบปเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบตเบŠเบทเปˆ 'David'
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

SELECT *
  FROM employees
 WHERE first_name = 'David';

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™. เป€เบญเบปเบฒเบฅเบฒเบเบŠเบทเปˆเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบกเบต job_id เป€เบ—เบปเปˆเบฒเบเบฑเบš 'IT_PROG'
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

SELECT *
  FROM employees
 WHERE job_id = 'IT_PROG'

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™. เบฎเบฑเบšเบชเบฐเปเบฑเบเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ—เบฑเบ‡เปเบปเบ”เบˆเบฒเบเบเบปเบก 50 (department_id) เบ—เบตเปˆเบกเบตเป€เบ‡เบดเบ™เป€เบ”เบทเบญเบ™ (เป€เบ‡เบดเบ™เป€เบ”เบทเบญเบ™) เบซเบผเบฒเบเบเบงเปˆเบฒ 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;

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™. เป€เบญเบปเบฒเบฅเบฒเบเบŠเบทเปˆเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบกเบตเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบชเบธเบ”เบ—เป‰เบฒเบเปƒเบ™เบŠเบทเปˆ 'a'
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

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

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™. เป€เบญเบปเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ ID เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

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 เบ•เบปเบงเบญเบฑเบเบชเบญเบ™ 'a'
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

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

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™. เป€เบญเบปเบฒเบฅเบฒเบเบŠเบทเปˆเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบกเบตเป€เบ‡เบดเบ™เป€เบ”เบทเบญเบ™เป€เบ›เบฑเบ™เบ„เบนเบ™ 1000
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

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

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™. เป€เบญเบปเบฒเบ•เบปเบงเป€เบฅเบ 3 เบ•เบปเบงเป€เบฅเบเบ—เบณเบญเบดเบ”เบ‚เบญเบ‡เป€เบšเบตเป‚เบ—เบฅเบฐเบชเบฑเบšเบ‚เบญเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™ เบ–เป‰เบฒเป€เบšเบตเป‚เบ—เบฅเบฐเบชเบฑเบšเบ‚เบญเบ‡เบฅเบฒเบงเบขเบนเปˆเปƒเบ™เบฎเบนเบšเปเบšเบš XXX.XXX.XXXX
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

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

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ DUAL. เบชเบฐเปเบ”เบ‡เบงเบฑเบ™เบ—เบตเบ‚เบญเบ‡เบกเบทเป‰เบญเบทเปˆเบ™เปƒเบ™เบฎเบนเบšเปเบšเบš: เบกเบทเป‰เบญเบทเปˆเบ™เปเบกเปˆเบ™เบงเบฑเบ™เบ—เบตเบชเบญเบ‡เบ‚เบญเบ‡เป€เบ”เบทเบญเบ™เบกเบฑเบ‡เบเบญเบ™
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

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

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ 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;

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™. เป€เบญเบปเบฒเบฅเบฒเบเบŠเบทเปˆเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบกเบตเป€เบ‡เบดเบ™เป€เบ”เบทเบญเบ™เป€เบ•เบฑเบก (เป€เบ‡เบดเบ™เป€เบ”เบทเบญเบ™ + 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;

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™. เป€เบญเบปเบฒเบฅเบฒเบเบŠเบทเปˆเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ—เบฑเบ‡เปเบปเบ” เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบกเบตเป€เบ‡เบดเบ™เป‚เบšเบ™เบฑเบ” (เปเบกเปˆเบ™/เบšเปเปˆ)
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

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;

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™. เป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ department_ids เบ—เบตเปˆเบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒ 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_ids เบ—เบตเปˆเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบซเบผเบฒเบเป† (>1) job_ids เป€เบฎเบฑเบ”เบงเบฝเบ
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

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

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™. เป€เบญเบปเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ manager_ids เบ—เบตเปˆเบกเบตเบˆเปเบฒเบ™เบงเบ™เบœเบนเป‰เบเปˆเบญเบเบซเบผเบฒเบเบเบงเปˆเบฒ 5 เปเบฅเบฐเบœเบปเบ™เบฅเบงเบกเบ‚เบญเบ‡เป€เบ‡เบดเบ™เป€เบ”เบทเบญเบ™เบ‚เบญเบ‡เบœเบนเป‰เบเปˆเบญเบเบ‚เบญเบ‡เบฅเบฒเบงเปเบกเปˆเบ™เบซเบผเบฒเบเบเบงเปˆเบฒ 50000.
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

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

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™. เป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ manager_ids เบ—เบตเปˆเบกเบตเป€เบ‡เบดเบ™เป€เบ”เบทเบญเบ™เบชเบฐเป€เบฅเปˆเบเบ‚เบญเบ‡เบœเบนเป‰เบเปˆเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบฅเบฒเบงเบขเบนเปˆเปƒเบ™เบฅเบฐเบ”เบฑเบš 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);

เบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบซเบผเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป‚เบ”เบเปƒเบŠเป‰ Joins

เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เบžเบฐเปเบ™เบ, เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ, เบ›เบฐเป€เบ—เบ”, เบžเบฒเบเบžเบทเป‰เบ™. เป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบžเบฒเบเบžเบทเป‰เบ™เปเบฅเบฐเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เปƒเบ™เปเบ•เปˆเบฅเบฐเบžเบฒเบเบžเบทเป‰เบ™
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

  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, เบเบปเบก, เบงเบฝเบ, เบ–เบฐเบซเบ™เบปเบ™, เบ›เบฐเป€เบ—เบ”, เบžเบฒเบเบžเบทเป‰เบ™
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

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 เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™ subordinate เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

  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 เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ—เบตเปˆเบญเบญเบเบˆเบฒเบเบšเปเบฅเบดเบชเบฑเบ”. เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบšเบปเบ”โ€‹เบฅเบฒเบโ€‹เบ‡เบฒเบ™โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบžเบฐโ€‹เบ™เบฑเบโ€‹เบ‡เบฒเบ™โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เปเบฅเบฐโ€‹เบชเบฐโ€‹เบ–เบฒโ€‹เบ™เบฐโ€‹เบžเบฒเบšโ€‹เบ‚เบญเบ‡โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เปƒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบชเบฑเบ” (เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เบซเบผเบทโ€‹เบญเบญเบโ€‹เบˆเบฒเบโ€‹เบšเปโ€‹เบฅเบดโ€‹เบชเบฑเบ”โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบงเบฑเบ™โ€‹เบ—เบตเปˆโ€‹เบญเบญเบโ€‹)
เบ•เบปเบงเบขเปˆเบฒเบ‡:
first_name | เบชเบฐเบ–เบฒเบ™เบฐ
เป€เบˆเบ™เบ™เบดเป€เบŸเบตเป‰ | เป„เบ”เป‰เบญเบญเบเบˆเบฒเบเบšเปเบฅเบดเบชเบฑเบ”เปƒเบ™เบงเบฑเบ™เบ—เบต 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;

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™. เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบšเปเปˆเบกเบตเปƒเบœ subordinate เบเบฑเบšเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

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.
เบ•เบปเบงเบขเปˆเบฒเบ‡:
เบŠเบทเปˆ | Job_title | เบŠเบทเปˆเบžเบฐเปเบ™เบ
Donald | เบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡ | 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);

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™. เป€เบญเบปเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ—เบตเปˆเบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เป„เบ”เป‰เบงเบฝเบเปƒเบ™เบ›เบต 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;

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ 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 เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™ subordinate เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

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

เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เบžเบฐเปเบ™เบ. เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบžเบฐเปเบ™เบ IT
เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ

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

เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เบงเบฝเบ, เบžเบฐเปเบ™เบ. เบชเบฐเปเบ”เบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เปƒเบ™เบฎเบนเบšเปเบšเบš: First_name, Job_title, Department_name.
เบ•เบปเบงเบขเปˆเบฒเบ‡:
เบŠเบทเปˆ | Job_title | เบŠเบทเปˆเบžเบฐเปเบ™เบ
Donald | เบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡ | 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;

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™. เป€เบญเบปเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบ—เบตเปˆเบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เป„เบ”เป‰เบงเบฝเบเปƒเบ™เบ›เบต 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

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™