Розробка баз даних інтернет-ресурсів практично нічим не відрізняється від стандартних баз даних, розроблених у системі 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 варто враховувати деякі її особливості. Дана конструкція дозволить вибрати з обох таблиць тільки ті записи, які є і в першій і в другій таблиці. Як це працює? В першій таблиці, у нас є головний ключ – ІДЕНТИФІКАТОР, який вказує на порядковий номер запису в таблиці.
При створенні другої таблиці, цей ключ використовується як порядковий номер, приклад можна подивитися на малюнках. При виборі даних оператор 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 і в яких її видах, вирішує сам програміст, але варто пам'ятати і враховувати те, який результат потрібно одержати при виконанні запиту.