Skip to main content

Чим JOIN відрізняється від підзапиту?

JOIN і підзапит (subquery) - обидва способи отримати дані з кількох таблиць, але вони працюють по-різному й застосовуються в різних ситуаціях.

1. JOIN - об'єднує таблиці "вшир"

JOIN фізично з'єднує рядки з двох таблиць за спільним полем і повертає одну загальну таблицю. Усі потрібні дані видно одразу в одному запиті.

sql
SELECT users.name, orders.amount FROM users JOIN orders ON users.id = orders.user_id;

Кожен рядок містить дані і з users, і з orders.

Коли використовувати:

  • потрібно показати пов'язані дані разом (наприклад, користувач + замовлення);
  • важлива швидкість - JOIN зазвичай працює швидше;
  • потрібно вивести кілька полів з обох таблиць.

2. Підзапит - дістає дані "вглиб"

Підзапит - це запит усередині іншого запиту. Він виконується окремо, а його результат використовується як умова чи таблиця.

sql
SELECT name FROM users WHERE id IN (SELECT user_id FROM orders WHERE amount > 1000);

Спочатку виконується підзапит у дужках (знаходить user_id з великими замовленнями), а потім основний запит обирає імена цих користувачів.

Коли використовувати:

  • потрібно обчислити проміжний результат (наприклад, суму, максимум, список id);
  • немає потреби з'єднувати дані рядок-до-рядка;
  • важлива читабельність або логічна ізоляція частин запиту.

3. Головна відмінність

ХарактеристикаJOINПідзапит
Що робитьОб'єднує таблиці за полямиВставляє результат одного запиту в інший
Як працює"Вшир" - з'єднує рядки"Вглиб" - використовує вкладені результати
ПовертаєОдну об'єднану таблицюПроміжне значення або набір
Коли використовуватиДля показу пов'язаних данихДля фільтрації, агрегації, перевірки умов

Підсумок:

  • JOIN з'єднує таблиці напряму, показуючи дані з обох.
  • Підзапит працює як «вбудований фільтр» чи обчислення.
  • Обидва інструменти розв'язують подібні задачі, але JOIN - для об'єднання рядків, а підзапит - для логічних перевірок і проміжних обчислень.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.