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