Зміст курсу
Розширений Рівень SQL
Розширений Рівень SQL
Вкладені запити
Чудові новини!
Адміністрація школи виражає задоволення нашими останніми досягненнями та сигналізує про готовність до подальшого прогресу.
Починаючи свій літній відпочинок, а ми вступаємо в період гнучкості, ми користуємося можливістю зануритися в нові методології та покращити нашу взаємодію з SQL.
Зокрема, ми прагнемо дослідити вкладені запити, фундаментальну концепцію в операціях SQL.
Для наочності цієї концепції розглянемо ілюстративний приклад, взятий з бази даних нашої організації. З розширенням компанії вводимо нову сутність, а саме department
. Це доповнення збільшує нашу структуру даних, впливаючи на динаміку операцій з базою даних.
Давайте розглянемо структуру цієї нової таблиці, щоб краще зрозуміти її роль у розвитку архітектури нашої бази даних:
Як ви можете побачити, нова таблиця містить відділи, їх типи та бюджети. А в таблиці employee
, як ви могли згадати, є інформація про відділ, до якого належить кожен працівник.
Розглянемо приклад, де ми використовуємо вкладені запити для отримання інформації про тих працівників, які працюють у відділах з бюджетом $500,000 або менше.
Ось як буде виглядати наш запит:
SELECT * FROM employees WHERE department IN ( SELECT name FROM department WHERE budget <= 500000 )
Як ви можете бачити, цей синтаксис є досить інтуїтивним. Ми використовуємо клаузу WHERE
, щоб вказати, що назва відділу має бути присутньою в таблиці, яку ми отримуємо за допомогою внутрішнього запиту.
Давайте розберемо цей запит на дві окремі частини, щоб побачити, як він працює. Спочатку отримаємо назви відділів з бюджетами до 500,000 доларів або менше (наш внутрішній запит):
SELECT name FROM department WHERE budget <= 500000
Як ви можете бачити, ми отримали відповідь з 5 відділами. Запам'ятайте цю таблицю.
Тепер, враховуючи отриманий результат, давайте напишемо другий запит, щоб отримати інформацію про працівників з цих відділів:
SELECT * FROM employees WHERE department IN ( 'Marketing', 'Human Resources', 'Finance', 'Customer Service', 'Legal' )
Результат цього запиту буде ідентичним до результату, отриманого нами з першим запитом.
Отже, давайте поетапно розберемо, що ми робимо:
- Внутрішній запит отримує
names
необхідних нам відділів. - Потім, використовуючи клавзу
WHERE
, ми встановлюємо певний критерій, який перевіряє, чи присутні відділи в таблиці, яку ми отримали за допомогою внутрішнього запиту. - Ми отримуємо бажаний результат.
Синтаксис використання внутрішнього запиту буде виглядати наступним чином:
Але існує кілька важливих пунктів, на які варто зважати при використанні внутрішніх запитів:
- Один результат у підзапиті: Вкладений запит повинен повертати лише один стовпець, але він також може бути обмежений до одного значення, якщо використовується у умові порівняння. Це особливо важливо для операторів, таких як
=
,>
,<
,>=
,<=
,<>
; - Типи даних: Переконайтеся, що тип даних повернутого стовпця відповідає типу даних стовпця, до якого застосовується умова, щоб уникнути помилок несумісності типів;
- Оптимізація: Вкладені запити можуть бути неефективними, особливо якщо вони виконуються для кожного рядка головного запиту;
- Використання оператора IN: Вкладені запити часто використовуються з оператором
IN
для перевірки наявності значень у підмножині даних. Однак оператори порівняння (>
,<
,>=
,<=
,<>
) також можуть бути використані для більш складних умов.
У наступних розділах ми разом практикуватимемо внутрішні запити та також вивчимо деякі нові нюанси їх використання.
Дякуємо за ваш відгук!