НЕ ТИПОВА СТАТТЯ ПРО SQL З’ЄДНАННЯ

pic

SQL JOINS

SQL-з’єднання є основною концепцією в системах управління реляційними базами даних (RDBMS). Вони дозволяють отримувати дані з кількох таблиць, ґрунтуючись на спільній колонці між ними. У цій статті ми розглянемо різні типи SQL-з’єднань і як ефективно їх використовувати.

ТИПИ SQL З’ЄДНАНЬ:

  1. Inner Join
  2. Left Join або Left Outer Join
  3. Right Join або Right Outer Join
  4. Full Join або Full Outer Join
  5. Cross Join

Inner Join:

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

pic

Декілька запитань по Inner Join:

  1. Маємо дві таблиці orders і customers, де orders.customer_id є зовнішнім ключем, що посилається на customers.id. Напишіть SQL-запит для отримання ID замовлення, імені клієнта та дати замовлення для всіх замовлень.

pic

Рішення:

pic

Inner Joins

  1. Напишіть запит для отримання всіх назв продуктів і категорій, де назва категорії схожа на “Electronics”, використовуючи наступні таблиці:

pic

Рішення:

pic

Запит 2: Рішення

  1. Напишіть запит для знаходження середньої зарплати за відділом і виведення тільки тих відділів, де середня зарплата більша за 75 000.

pic

pic

pic

Запит 3: Рішення

LEFT JOIN:

LEFT JOIN (або LEFT OUTER JOIN) повертає всі рядки з лівої таблиці та збігаються рядки з правої таблиці. Якщо збігу не знайдено, для колонок правої таблиці повертаються значення NULL.

pic

Декілька запитань по Left Join:

  1. Напишіть запит для отримання всіх курсів та студентів, зареєстрованих на них, включаючи курси без реєстрацій.

pic

pic

pic

  1. Маємо наступні таблиці:

pic

Напишіть запит для отримання всіх замовлень, включаючи деталі замовлень та інформацію про клієнта. Якщо замовлення не має відповідного клієнта, покажіть NULL для інформації про клієнта.

pic

Запит 2: Left join

FULL OUTER JOIN:

FULL OUTER JOIN — це тип з’єднання в SQL, який повертає всі рядки з обох таблиць, з відповідними рядками з обох сторін, де це можливо. Якщо немає збігу, результат міститиме NULL значення для колонок таблиці, в якій немає відповідного рядка.

  1. Збігаються рядки: Якщо рядок у лівій таблиці має відповідний рядок у правій таблиці (згідно з умовою з’єднання), результат міститиме колонки з обох таблиць.
  2. Не збігаються рядки: Якщо рядок в одній таблиці не має відповідного рядка в іншій таблиці, результат все одно міститиме цей рядок, але з NULL значеннями у колонках таблиці без відповідного рядка.
  3. Результат: Це з’єднання поєднує поведінку обох LEFT JOIN і RIGHT JOIN, повертаючи всі рядки з обох таблиць.

pic

Декілька запитань по Full Outer Joins:

pic
Запит для знаходження працівників, які є тільки в одному з наборів даних (не спільні в обох)

Результат має бути:

pic

pic

Q2. Маємо дві таблиці:

pic

Знайдіть невідповідні записи з цих двох таблиць, а також запит, коли є різниця в ціні між двома таблицями.

Рішення:

pic

ВИХІД:

pic

CROSS JOIN:

CROSS JOIN — це тип з’єднання, який повертає Декартовий добуток двох таблиць. Це означає, що кожен рядок з першої таблиці поєднується з кожним рядком з другої таблиці. На відміну від інших з’єднань (наприклад, INNER JOIN, LEFT JOIN), CROSS JOIN не вимагає умови.

Ключові моменти:

  1. Без умови для співпадіння: Він повертає всі можливі комбінації рядків з обох таблиць.
  2. Кількість рядків у результаті: Результат матиме кількість рядків, рівну добутку кількості рядків у першій таблиці і кількості рядків у другій таблиці.
  • Якщо в таблиці A є m рядків, а в таблиці B — n рядків, то CROSS JOIN поверне m * n рядків.
  1. Використання: Це корисно, коли потрібно генерувати комбінації даних, наприклад, при створенні тестових даних або генерації всіх комбінацій елементів з двох списків.

pic

Приклад cross-join:

Дано дві таблиці, Products і Colors:

pic

Запит:

pic

Результат:

pic

Слідкуйте за новими матеріалами, якщо хочете практикувати більше запитань по з’єднаннях. Дякуємо за увагу!

Перекладено з: NOT YOUR USUAL ARTICLE ON SQL JOINS

Leave a Reply

Your email address will not be published. Required fields are marked *