Page 142 - 4636
P. 142

Значення,  отримані  з  підзапитів,  можна  використовувати  у  всіх  стандартних  операціях
        порівняння. Доступні також деякі спеціальні операції порівняння для підзапиту.
              2 Підзапити і операції
              Існують п'ять спеціальних операцій підзапитів. Чотири з них використовуються в звичайних
        підзапитах,  і  одна  (EXISTS)  -  як  правило,  тільки  в  пов'язаних  (correlated)  підзапитах,  які
        розглядаються в наступній лекції. Чотири звичайних операції підзапиту описані в табл. 7.4.
              Таблиця 7.4 - Операції підзапиту в MySQL


                      Назва                Приклад синтаксису                        Опис


                                                                              Повертає true, якщо
                                            SELECT cl FROM tl
                                                                           порівняння істинно для
                       ANY              WHERE cl > ANY (SELECT
                                                                            якого-небудь рядка в
                                             cl FROM t2);
                                                                                  підзапиті.


                                            SELECT cl FROM tl
                        IN               WHERE cl IN (SELECT cl                Еквівалент=ANY.
                                               from t2);

                                            SELECT cl FROM tl
                                                                            Інша назва any; деяким
                      SOME                  WHERE cl > SOME
                                                                            подобається більше.
                                        (SELECT cl FROM t2) ;

                                            SELECT Cl FROM tl                 Повертає true, якщо

                       ALL              WHERE cl > ALL (SELECT cl        порівняння істинне для всіх
                                               from t2);                      рядків у підзапиті.


              Кожна з цих операцій може бути тільки після операції порівняння, за винятком IN, яка має
        свою операцію порівняння (=), “згорнуту всередині”, якщо можна так висловитися.
              3 Пов'язані підзапити
              Пов'язані підзапити більш складні в розумінні. У них  елементи, отримані в зовнішньому
        запиті, використовуються у внутрішньому запиті. Наприклад:
              select isbn, title
              from books
              where not exists(select * from order_items where
        order_iterns.isbn=books.isbn);
              У  наведеному  запиті  демонструється  застосування  як  пов'язаних  підзапитів,  так  і
        спеціальної операції підзапиту EXISTS. Запит повертає всі книги, які ніколи не були замовлені.
        (Вище у лекції ви отримували цю інформацію з допомогою лівого з'єднання.) Зверніть увагу, що
        внутрішній  запит  включає  таблицю  order_iterns  тільки  в  список  FROM,  однак  посилається  на
        books.isbn. Іншими словами, внутрішній запит посилається на дані зовнішнього запиту.  Це  і є
        визначення пов'язаного підзапиту: ви шукаєте рядки внутрішнього запиту, які збігаються (або, як
        у розглянутому прикладі, не збігаються) з рядками зовнішнього запиту.
              Операція  EXISTS  (існує)  повертає  true,  якщо  підзапит  містить  хоч  один  рядок,  який
        збігається. Відповідно, операція NOTEXISTS (не існує) повертає true, якщо підзапит не містить
        рядків, які співпадають.



                                                            139
   137   138   139   140   141   142   143   144   145   146   147