Page 137 - 4636
P. 137

using (customerid)
              where orders.orderid is null;
              Результат цього запиту виглядає таким чином:


                                        Customerid                   Name


                                     1                       Дід Мороз


                                     2                       Шерлок Холмс

              Ймовірно, ви звернули увагу на те, що в цьому прикладі ми використовували дещо інший
        синтаксис  умови  з'єднання.  Лівосторонній  з'єднання  підтримує  синтаксис  ON,  який  був
        використаний  в  першому  прикладі,  так  і  синтаксис  USING,  який  застосовувався  у  другому.
        Синтаксис USING не передбачає вказівки таблиці, з якої надходить атрибут з'єднання, тому, щоб
        його можна було використати, стовпці в обох таблицях повинні називатися однаково.

               7.4 Використання інших імен таблиць: псевдоніми

              Часто буває дуже зручно, а часом і необхідно звертатися до таблиць за іншими іменами.
        Такі імена називаються псевдонімами (alias). Їх можна створити в самому початку запиту, а потім
        використовувати в міру необхідності. Часто псевдоніми дуже зручно застосовувати як  короткі
        імена. Погляньте, як виглядає досить громіздкий розглянутий нами раніше запит, переписаний з
        використанням псевдонімів:
              select с.name
              from customers as c, orders as o, order_items as oi, books as b
              where c.customerid = o.customerid
              and o.orderid = oi.orderid
              and oi.isbn = b.isbn
              and b.title like '%Java%';
              Для присвоєння псевдоніма таблиці використовуєть конструкцію AS. Крім того, псевдоніми
        можна присвоювати стовпців, проте до цього ми повернемося після того, як розглянемо функції
        агрегування.
              Псевдоніми таблиць необхідні в разі з'єднання таблиці з самою собою. На перший погляд,
        така операція здається більш складною  і загадковою, ніж це  є насправді. Тим не менш, такий
        підхід дуже зручний для пошуку в одній і тій самій таблиці рядки, що містять однакові значення.
        Якщо  потрібно  знайти  клієнтів,  що  живуть  в  одному  місті  -  скажімо,  з  метою  створення
        читацького клубу - однієї і тієї ж таблиці (customers) можна присвоїти два різних псевдоніми:
              select cl.name, c2.name, cl.city
              from customers as cl, customers as c2
              where cl.city - c2.city
              and cl.name !» c2.name;
              Ми  робимо  вигляд,  що  таблиця  customers  –  це  дві  різні  таблиці  c1  і  с2,  і  виконуємо  їх
        з'єднання  за  стовпцем  City.  Друга  умова,  cl.  name  !  =  с2.  name,  необхідна  для
        запобігання порівняння клієнта із самим собою.
              Резюме за типами об'єднань
              В табл. 7.2 перелічені раніше розглянуті типи з'єднань. Існують також кілька інших типів,
        однак наведені в табл. 7.2 сполуками, які використовуються найчастіше.




                                                            134
   132   133   134   135   136   137   138   139   140   141   142