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