Sql Scholl
Распечатать страницу
Перейти на главную Карта сайта Отправить сообщение

Объединение таблиц

Объединение многих таблиц

      SQL не ограничивает число таблиц, которые могут быть объединены посредством оператора SELECT. Основные правила для создания объединения остаются теми же. Вначале перечисляются все таблицы, затем определяются отношения между ними. Вот пример:

SELECT prod_name, vend_name, prod_price, quantity FROM OrderItems, Products, Vendors WHERE Products.vend_id = Vendors.vend_id
AND OrderIterns.prod_id = Products.prod_id
AND order_num = 20007; 



prod_name              vend_name         prod_price       quantity 
--------------------   ----------------  --------------   ---------------------
18 inch teddy bear     Bears R Us        11.9900          50
Fish bean bag toy      Doll House Inc.   3.4900           100
Bird bean bag toy      Doll House Inc.   3.4900           100
Rabbit bean bag toy    Doll House Inc.   3.4 900          100
Raggedy Ann            Doll House Inc.   4.9900           100

      В этом примере выводятся предметы заказа номер 20007. Предметы заказа хранятся в таблице Orderltems. Каждый продукт хранится в соответствии с идентификатором продукта, который ссылается на продукт в таблице Products. Эти продукты связаны с соответствующими поставщиками в таблице Vendors по идентификатору поставщика, который хранится вместе с каждой записью о продукте. В предложении FROM этого примера перечисляются три таблицы, а предложение WHERE определяет оба названных предложения объединения. Дополнительное предложение WHERE используется затем для фильтрации только предметов заказа 20007.

К вопросу о производительности

СУБД обрабатывают объединения, тратя время на обработку каждой указанной таблицы. Этот процесс может оказаться очень ресурсоемким, поэтому не следует использовать объединения таблиц без особой на то необходимости. Чем больше таблиц вы объединяете, тем ниже производительность.

Максимальное число таблиц в объединении

Хотя SQL не накладывает каких-либо ограничений на число таблиц в объединении, многие СУБД на самом деле имеют такие ограничения. Обратитесь к документации своей СУБД чтобы узнать, какие ограничения такого рода она налагает (если они есть).

      Теперь самое время пересмотреть следующий пример из раздела, "Использование подзапросов", где оператор SELECT возвращает список клиентов, заказавших продукт RGAN01:

SELECT cust_name, cust_contact FROM Customers, Orders, OrderItems WHERE Customers.cust_id = Orders.cust_id
AND OrderItems.order_num = Orders.order_num
AND prod_id = 'RGANOl'; 




cust_name           cust_contact 
---------------     -----------------------
Fun4All             Denise L. Stephens
The Toy             Store Kim Howard

      Как уже говорилось в разделе "Использование подзапросов", возвращение необходимых для этого запроса данных требует использования трех таблиц. Однако вместо использования подчиненных подзапросов здесь были применены два объединения для связи таблиц. Здесь были также указаны три предложения WHERE. Первые два связывают таблицы в объединение, последнее фильтрует данные по продукту RGAN01.

Только экспериментально

Как видите, часто существует несколько способов для выполнения одной и той же операции SQL. И редко удается определить, какой способ правильный, а какой нет. Производительность может зависеть от типа выполняемой операции, используемой СУБД, количества данных в таблицах, присутствия либо отсутствия индексов и ключей, а также целого ряда других критериев. Следовательно, зачастую бывает целесообразно поэкспериментировать с различными механизмами выборки для выяснения того, какой из них работает быстрее.