MySQL JOIN: опис, приклад використання команди і рекомендації
Розробка баз даних інтернет-ресурсівпрактично нічим не відрізняється від стандартних баз даних, розроблених в системі MS SQL SERVER. Як правило, для такого роду ресурсів використовується мова MY SQL, хоча його можна застосовувати і до розробки стандартних програмних продуктів, для локального використання. Але мова в статті піде не про це.
Часто при роботі з базами даних в кожному змов стоїть завдання зробити вибірку даних для виведення в різноманітні звіти, графіки і так далі. Як правило, при реалізації такого роду завдань доводиться використовувати не одну, а кілька таблиць, об'єднуючи їх в один запит, значно ускладнюючи його конструкцію. При цьому необхідно враховувати те, як повинні будуть виводитися дані, як будуть «підтягуватися» таблиці і який результат буде максимально прийнятним для програміста. Для вирішення таких завдань використовується одна зі стандартних конструкція мови MySQL - Join.
Поняття слова Join
Мови розробки баз даних, неважливо, що самеце за мова, за основу беруть стандартні слова з англомовних словників (саме тому за умови, що ви знаєте англійську мову, вам буде набагато простіше працювати з таблицями). Для реалізації підключення таблиць в вибірку взято таке ж слово - Join. У мові програмування баз даних Використовується My SQL. Переклад цього службового слова в точності такий же, як і в самій мові - «об'єднання».
Інтерпретація конструкції MySQL - Join, причомубудь-який з них, буде точно такий же. Якщо розшифрувати призначення конструкції, а саме схему її роботи, то отримаємо такі значення: конструкції дозволять зібрати потрібні поля з різних таблиць або вкладених запитів в одну вибірку.
Види конструкцій для об'єднання
Якщо програмісту необхідно зібрати вибірку здекількох таблиць і він знає, які ключові поля в них і які саме дані необхідні для звіту, то можна скористатися однією з основних конструкцій об'єднання, для досягнення бажаного результату. Основних конструкцій (для об'єднання таблиць) чотири:
- Inner join.
- Cross Join.
- Left join.
- Right Join.
Залежно від поставленого завдання, кожна зі стандартних конструкцій буде давати різні результати, що дозволить отримувати звіти за різними параметрами в короткий термін.
Створення і заповнення таблиць для подальшого використання
Перед тим як почати, наприклад, розглядатимеханізми роботи з конструкціями об'єднання даних, варто підготувати кілька таблиць, з якими ми будемо надалі працювати. Це допоможе наочно показати всі принципи роботи операторів, крім того, таким чином новачки легше засвоять всі ази програмування таблиць.
У першій таблиці будуть описані деякі предмети, з якими людина постійно зустрічається протягом свого життя.
У другій таблиці опишемо деякі властивості об'єктів з першої таблиці, щоб можна було в подальшому з ними працювати.
В цілому двох таблиць буде досить, щоб на прикладі показати їх роботу. Ось тепер можна приступати до практичного розгляду наших конструкцій.
Використання Inner Join
При використанні конструкції MySQL - Join Ineerварто враховувати деякі її особливості. Дана конструкція дозволить вибрати з обох таблиць тільки ті записи, які є і в першій і в другій таблиці. Як це працює? У першій таблиці у нас є головний ключ - ID, який вказує на порядковий номер записів в таблиці.
При створенні другої таблиці, цей же ключвикористовується як порядковий номер, приклад можна подивитися на малюнках. При виборі даних оператор Select визначить в результаті тільки ті записи, порядкові номери яких збігаються - значить, вони є і в першій і в другій таблиці.
При використанні конструкції потрібно розуміти,які саме дані необхідно отримати. Найпоширеніша помилка, особливо у початківця програміста баз даних, це нераціональне і неправильне використання конструкції Inner Join. Як приклад, MySQL Inner Join, можна розглянути скрипт, який поверне нам з раніше описаних і заповнених таблиць інформацію про предмети і їх властивості. Але і тут може бути кілька способів використання конструкції. В цьому плані My SQL дуже гнучкий мову. Отже, можна розглянути приклади використання MySQL Inner Join.
Об'єднання таблиць без вказівки, будь-яких параметрів. У цьому випадку ми отримаємо результат такого плану:
Якщо вкажемо через службове слово Using, щообов'язково потрібно враховувати головні ключі записів в таблицях, то результат вибірки кардинально зміниться. У цьому випадку ми отримаємо вибірку, яка поверне тільки ті рядки, які мають однакові головні ключі.
Можливий ще й третій варіант використанняконструкції, коли в запиті через слово «on» вказуються поля, за якими має відбуватися об'єднання таблиць. В такому випадку вибірка поверне наступні дані:
Особливості використання Left Join
Якщо розглядати ще один спосіб об'єднання таблиць за допомогою конструкції MySQL - Join, можна помітити різницю в даних, які виводяться. Таким механізмом є конструкція Left.
Використання конструкції Left Join MySQL має деякі особливості і, як і Inner, вимагає чіткого розуміння результату, який необхідно отримати.
В даному випадку спочатку будуть обрані всі записиз першої таблиці, а в подальшому до них будуть приєднані записи з другої таблиці властивостей. При цьому, якщо в першій таблиці є запис, наприклад, "табурет", а в другій таблиці немає жодного властивості для неї, то оператор Left виведе навпаки цього запису значення null, що говорить програмісту про те, що ознак з цього виду предмета немає .
Використання цієї конструкції дозволять визначати, по яких полях або, наприклад, товарам в магазині не виставлена ціна, гарантійний термін і так далі.
Приклад використання Left
Для розгляду на практиці оператораконструкції Left Join MySQL використовуємо раніше описані таблиці. Скажімо, необхідно вибрати весь список товарів, які є в магазині, і перевірити по яким з них не проставлені ознаки або властивості. В такому випадку вибірка виведе на екран всі товари, а за тими, у яких немає властивості, будуть проставлені порожні значення.
Використання Where в конструкції Join
Як параметр, об'єднання може включати не тільки вказівки полів, за якими необхідно провести підключення таблиць, але може і включати оператор умови Where.
Для прикладу розглянемо скрипт, який повиненповернути нам тільки ті записи, по яких не проставлено ознака. В такому випадку в конструкцію Join необхідно додати оператор умови і вказати, що саме потрібно повернути як результат.
При використанні в MySQL Join - Where потрібно чітко розуміти, що будуть показані тільки ті записи, до яких відноситься зазначена умова, і вибірка тоді буде виглядати наступним чином:
Такі запити дозволяють робити вибірки поконкретних даних, які відносяться до вибраного програмістом умові. Таких умов можна вказувати кілька, максимально при цьому уточнюючи параметри вибору даних з об'єднаних таблиць.
Використання Join для зміни даних в таблицях
Конструкція Join, по суті, універсальна. Вона дозволяє не тільки робити різноманітні вибірки, а й підключати в запити від однієї до кількох таблиць, вводити додаткові умови до вибірки. Конструкцію можна також використовувати і для інших операцій з даними. Так, Join можна використовувати для зміни даних в таблиці. Вірніше сказати, для уточнення умов в таблиці або ж в тих випадках, якщо потрібно оновити дані в декількох таблицях по одним і тим же умовам.
Для прикладу розглянемо таку задачу. Дано три таблиці, в яких є деякі дані. Потрібно провести зміну даних в обох таблицях, використовуючи один запит. Якраз для вирішення такого роду завдань можна застосовувати в команді Update конструкцію Join. Сам тип конструкції Join залежить, так само, як і в випадку з вибіркою даних, від результату, який хоче отримати програміст.
Розглянемо найпростіший приклад. Потрібно оновити одним запитом дані по одним і тим же умовам. Такого роду запити будуються для оптимізації роботи з базою даних. Навіщо писати різні запити для кожної з таблиць, якщо можна провести всі маніпуляції з даними одним запитом? Приклад MySQL Update Join в нашому випадку буде таким:
Побудова складних запитів
Досить часто при роботі з базою данихнеобхідно будувати запити не тільки з об'єднанням декількох таблиць, а й з використанням підзапитів. Такі завдання досить складні для розуміння початківця програміста баз даних. Складність полягає в тому, що доводиться продумувати кожен крок, визначати, які дані з якої таблиці або запиту необхідно отримати і як надалі з ними потрібно буде працювати.
Для більш конкретного розуміння можна розглянути(В MySQL Join) приклади складних запитів. Якщо ви новачок і тільки починаєте працювати з базами даних, то такий тренінг піде лише на користь. Ідеальним варіантом, будуть MySQL Left Join приклади.
Даний запит поверне нам 58 записів про договорипродажу, за якими заповнений або існує баланс грошових коштів на обрану дату. В даному випадку це поточна дата. Також в вибірку додано умову, що в назві договору повинні бути символи - «123». Інформація, що виводиться на екран інформація (дані), буде мати сортування - впорядкованість за номером договору.
Наступний приклад виведе на екран дані про всі платежі, в яких буде вказано номер договору.
Використання підзапитів
Як вже говорилося раніше, при роботі з базамиданих можна об'єднати не тільки таблиці, але і таблицю із запитом. Така конструкція використовується в основному для прискорення роботи запиту і його оптимізації.
Наприклад, якщо необхідно з таблиці, якамає кілька сот полів і, скажімо, тисячу записів, вибрати всього два поля, то варто використовувати запит, який поверне тільки необхідні поля, і об'єднати його з основною вибіркою даних. Як приклад MySQL Join Select можна розглянути запит такого типу:
Це не всі способи використання стандартнихконструкцій MySQL, а тільки стандартні. Як використовувати конструкцію Join і в яких її видах, вирішує сам програміст, але варто пам'ятати і враховувати те, який результат треба отримати при виконанні запиту.