Page 136 - 4636
P. 136

order_items.orderid and order_items.isbn = books.isbn and books.title
              like '%Java%';
              Цей запит дає такий результат:
                                                 Name

                                                 Слава Моргунов


              У  цьому  прикладі  використані  дані  з  чотирьох  різних  таблиць,  а  щоб  зробити  це  за
        допомогою  з'єднання  з  рівності,  знадобилися  три  різні  умови  з'єднання.  Зазвичай  кожній  парі
        таблиць  потрібна  одна  умова  з'єднання.  Таким  чином,  кількість  умов  з'єднання  на  одиницю
        менше  від  кількості  таблиць,  що  об'єднуються.  Це  основне  правило  може  стати  в  нагоді  при
        налагодженні запитів, які відмовляються працювати. Перевірте умови з'єднання і переконайтеся в
        тому,  що  послідовність  зв'язків  відображає  шлях  від  уже  відомого  до  того,  що  потрібно
        дізнатися.
              3 Пошук незбіжних рядків
              Інший поширений в MySQL тип з'єднання - лівостороннє з'єднання (left join).
              У попередніх прикладах відбиралися тільки ті рядки, в яких спостерігалося відповідність
        між таблицями. Однак можуть знадобитися і рядки, в яких цієї відповідності немає, наприклад,
        потрібно  знайти  клієнтів,  які  не  зробили  жодного  замовлення,  або  книги,  які  взагалі  ніхто  не
        замовляв.
              Найпростіший  варіант  відповіді  на  таке  питання  в  MySQL  передбачає  використання
        лівостороннього з'єднання, при якому виконується пошук рядків по вказаній умові з'єднання двох
        таблиць. Якщо у зазначеній праворуч таблиці немає потрібного рядка, до результату додається
        рядок з нульовими значеннями у відповідних стовпцях.
              Розглянемоприклад:
              select customers.customerid, customers.name, orders.orderid
              from customers left join orders
              on customers.customerid = orders.customerid;
              Даний запит SQL використовує лівостороннє з'єднання для таблиці customers і orders. Його
        синтаксис  щодо  умов  з'єднання  дещо  інший;  умова  з'єднання  зазначається  у  спеціальній
        конструкції ONSQL-оператора.
              Ось як виглядає результат запиту:

                           Сustomerid                 Name                       Оrderid


                          1                    Дед Мороз                    NOLL
                          2                    Шерлок Холмс                 NULL
                          3                    Саша Валентей                2
                          4                    Ева Легкая                   3
                          5                    Слава Моргунов               1

                          5                    Слава Моргунов               4

              З  результату  видно,  що  для  клієнтів  Дід  Мороз  і  Шерлок  Холмс  немає  відповідаючих
        ідентифікаторів замовлень, оскільки їх поля orderid мають значення NULL.
              Якщо необхідно знайти тільки тих клієнтів, які нічого не замовляли, цього можна досягти,
        виконавши  перевірку  на  наявність  NULL  значень  у  полі  первинного  ключа  правої  таблиці  (в
        даному випадку, orderid), оскільки з реальними значениями не можуть містити значення NULL:
              select customers.customerid, customers.name
              from customers left join orders
                                                            133
   131   132   133   134   135   136   137   138   139   140   141