Sql-запит на вибірку з декількох таблиць

SQL-запит на вибірку з декількох таблиць

Я вже писав про самих різних SQL-запитах, але прийшов час поговорити і про більш складні речі, наприклад, SQL-запит на вибірку записів з кількох таблиць.

Коли ми з Вами робили вибірку з однієї таблиці, то все було дуже просто:

Відео: SQL для початківців (DML): Вибірка з таблиці (MySql), Урок 4!

SELECT назви_потрібних_полів FROM назва_таблиці WHERE умова_вибірки

Все дуже просто і тривіально, але при вибірці відразу з декількох таблиць стає все дещо складніше. Одна з труднощів - це збіг імен полів. Наприклад, в кожній таблиці є поле id.

Давайте розглянемо такий запит:

SELECT * FROM table_1, table_2 WHERE table_1.id gt; table_2.user_id

Багатьом, хто не займався подібними запитами, здасться, що все дуже просто, подумавши, що тут додалися тільки назви таблиць перед назвами полів. Фактично, це дозволяє уникнути протиріч між однаковими іменами полів. Однак, складність не в цьому, а в алгоритмі роботи подібного SQL-запиту.

Відео: SQL Практикум. Урок 3. Запит в MS SQL




Перед тим як читати далі, спробуйте самостійно збагнути, як буде працювати подібний SQL-запит. Що він повинен вивести?

Алгоритм роботи наступний: береться перший запис з table_1. береться id цього запису з table_1. Далі повністю виглядає таблиця table_2. І додаються всі записи, де значення поля user_id менше id обраної записи в table_1. Таким чином, після першої ітерації може з`явитися від 0 до нескінченної кількості результуючих записів. На наступній ітерації береться такий запис таблиці table_1. Знову проглядається вся таблиця table_2, і знову спрацьовує умова вибірки table_1.id gt; table_2.user_id. Всі записи, задовольнили цій умові, додаються в результат. На виході може вийти величезна кількість записів, у багато разів перевищують сумарний розмір обох таблиць.




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

попередній SQL-запит, як такої, рідко використовується. Він був просто дан для пояснення алгоритму вибірки з декількох таблиць. А тепер же розберемо більш присадкуватий SQL-запит. Припустимо, у нас є дві таблиці: з товарами (є поле owner_id, відповідального за id власника товару) і з користувачами (є поле id). Ми хочемо одним SQL-запитом отримати всі записи, причому щоб в кожній була інформація про користувача і його один товар. У наступному записі була інформація про те ж користувача і наступному його товар. Коли товари цього користувача закінчаться, то переходити до наступного користувачеві. Таким чином, ми повинні з`єднати дві таблиці і отримати результат, в якому кожен запис містить інформацію про користувача і про одне його товар.

Відео: SQL для початківців. Приклад об`єднання трьох і більше таблиць в SQL і БД запитом SELECT JOIN

Подібний запит замінить 2 SQL-запиту: На вибірку окремо з таблиці з товарами і з таблиці з користувачами. До того ж, такий запит одразу поставить у відповідність користувача і його товар.

Сам же запит дуже простий (якщо Ви зрозуміли попередній):

SELECT * FROM users, products WHERE users.id = products.owner_id

Алгоритм тут вже нескладний: береться перший запис з таблиці users. Далі береться її id і аналізуються всі записи з таблиці products, додаючи в результат ті, у яких owner_id дорівнює id з таблиці users. Таким чином, на першій ітерації збираються всі товари у першого користувача. На другий ітерації збираються всі товари у другого користувача і так далі.

Як бачите, SQL-запити на вибірку з декількох таблиць не найпростіші, але користь від них буває колосальна, тому знати і вміти використовувати подібні запити дуже бажано.

Повний курс по PHP і MySQL: https://srs.myrusakov.ru/php

Поділися в соціальних мережах:

Схожі
Принцип складання зведеної таблиці excel.Принцип складання зведеної таблиці excel.
Оптимізація запитів до mysqlОптимізація запитів до mysql
Структура бази данихСтруктура бази даних
Двигуни баз даних.Двигуни баз даних.
Запит sql для сортування результату вибіркиЗапит sql для сортування результату вибірки
Запит sql на вибірку записівЗапит sql на вибірку записів
Пошук по базі даних з сортуванням за релевантністюПошук по базі даних з сортуванням за релевантністю
Як дізнатися кількість записів в sql-вибірціЯк дізнатися кількість записів в sql-вибірці
Індекси в mysqlІндекси в mysql
Відправлення запитів до бази даних в phpВідправлення запитів до бази даних в php
» » Sql-запит на вибірку з декількох таблиць