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
- Як дізнатися кількість записів в sql-вибірці
- Як дізнатися останній id в mysql
- Як дізнатися синтаксис sql-запиту через phpmyadmin
- Як дізнатися розміри таблиці через sql
- Індекси в mysql
- Конструкція where в sql
- Двигуни баз даних.
- Випадкова вибірка з бази даних
- Запит sql на вибірку записів
- Sql-запити для роботи з таблицями
- Пошук по базі даних з сортуванням за релевантністю
- Принцип складання зведеної таблиці excel.
- Запит sql на вибірку певного числа записів
- Запит sql на створення індексу
- Оптимізація запитів до mysql
- Зведена таблиця в excel з декількох таблиць.
- Відправлення запитів до бази даних в php
- Join в sql
- Використання union в sql
- Структура бази даних
- Запит sql на додавання і видалення записів