•
•
•
Вот пример трудного для чтения оператора.
SELECT CUSTOMER_TBL.CUST_ID, CUSTOMERJTBL.CUST_NAME,
CUSTOMERJTBL.CUST_PHONE, ORDERSJTBL.ORD_NUM, ORDERS_TBL.QTY
FROM CUSTOMER_TBL, ORDERS_TBL
WHERE CUSTOMER_TBL.CUST_ID = ORDERSJTBL.CUST_ID
AND ORDERSJTBL.QTY > 1 AND CUSTOMERJTBL.CUST_NAME LIKE 'G%'
ORDER BY CUSTOMERJTBL.CUST_NAME;
CUST_ID CUST_NAME CUST_PHONE ORD_NUM QTY
----------------------------------------
287 GAVINS PLACE 3172719991 18D778 10
1 строка выбрана.
А вот пример того же оператора после форматирования с целью улучшения его восприятия.
SELECT C.CUST_ID,
С.CUST_NAME,
С.CUST_PHONE,
O.ORD_NUM,
О.QTY
FROM CUSTOMERJTBL С,
ORDERSJTBL О
WHERE C.CUST_ID = 0.CUST_ID
AND O.QTY > 1
AND С.CUST_NAME LIKE 'G%'
ORDER BY 2;
CUST_ID CUST_NAME CUST_PHONE ORD_NUM QTY
----------------------------------------------
287 GAVINS PLACE 3172719991 18D778 10
1 строка выбрана.
Оба оператора по сути одинаковы, но второй из них гораздо проще для чтения. Второй оператор упростился за счет использования псевдонимов таблиц, определенных в выражении ключевого слова FROM. Для выравнивания элементов выражений использовались пробелы, что выделило эти выражения среди других.
Опять же, изменение внешнего вида оператора никак не влияет на скорость его выполнения, но помогает вам увидеть и сделать необходимые изменения при отладке длинных и сложных операторов. Так, во втором операторе легко увидеть, какие столбцы и из каких таблиц выбраны, как выбранные таблицы связаны и какие условия наложены на данные, предполагаемые получить в результате запроса.
Порядок таблиц в выражении ключевого слова FROM может иметь значение в зависимости от того, какие правила чтения операторов SQL использует оптимизатор. Например, может оказаться более выгодным разместить имена небольших таблиц в начале списка, а имена больших - в конце. Некоторые из наиболее опытных пользователей считают, что размещение самых больших таблиц в конце списка оказывается более эффективным.
Проверьте по документации к используемой вами реализации SQL, нет ли в ней советов по поводу использования нескольких таблиц в списке ключевого слова FROM.
Как вы уже узнали из урока 13, "Объединение таблиц в запросах", часто для связывания таблиц используется связующая таблица, имеющая по одному или сразу по несколько общих столбцов с другими таблицами в запросе. Связующую таблицу можно назвать в запросе главной. С ней связаны почти все или даже все другие таблицы в запросе. Обычно столбец связующей таблицы в выражении ключевого слова WHERE размещают справа от знака определяющей связь операции. Таблицы, связываемые с главной таблицей, обычно располагают в порядке от самой маленькой до самой большой, точно так же, как и в списке ключевого слова FROM.
Если связующей таблицы нет, таблицы располагают по возрастанию их размеров, а справа от знака операции связывания в выражении ключевого слова WHERE указывается наибольшая из таблиц. Условия связывания должны в выражении ключевого слова WHERE предшествовать условиям фильтра приблизительно следующим образом.
FROM таблица1, Наименьшая из таблиц
таблица2,
таблица3 Наибольшая из таблиц или связующая таблица
WHERE таблица1.столбец - таблицаЗ.столбец Условие связывания
AND таблица2.столбец = таблицаЗ.столбец Условие связывания
[ AND условие1 ] Условие фильтра [ AND условие2 ] Условие фильтра