|
Программирование >> Sql: полное руководство
Стандарт SQL2 позволяет управлять порядком сортировки отдельно по каждому ключу. Это может оказаться важным при работе с локализованными наборами символов или для обеспечения переносимости между системами с таблицами кодировок ASCII и EBCDIC. Однако эта часть спецификации SQL2 является довольно сложной, и в большинстве СУБД либо вообще игнорируются вопросы, связанные с порядком сортировки, либо используются собственные схемы сортировки. Правила выполнения однотабличных запросов Однотабличные запросы в большинстве своем являются простыми, и смысл такого запроса обычно можно легко понять, просто прочитав инструкцию select. Однако по мере возрастания сложности запроса появляется необходимость в более точном определении результатов, которые будут возвращены данной инструкцией select, в табл. 6.4 описана процедура генерации результатов SQL-запроса, включающего в себя предложения, описанные в настоящей главе. Как показано в табл. 6.4, результаты запроса, возвращенные инструкцией select, получаются в результате поочередного применения входящих в инструкцию предложений. Вначале применяется предложение from (оно выбирает таблицу, содержащую требуемые данные), затем - where (которое по определенному критерию отбирает из таблицы строки), далее - select (которое создает указанные столбцы результатов запроса и при необходимости удаляет повторяющиеся строки) и, наконец, order by (сортирует результаты запроса). Правила выполнения SQL-запроса, приведенные в табл. 6.4, будут дополнены и расширены в трех последующих главах. Таблица 6.4. Правила выполнения однотабличного SQL-запроса Таблица результатов запроса на выборку генерируется следующим образом: 1. Взять таблицу, указанную в предложении from. 2. Если имеется предложение where, применить заданное в нелг условие отбора к каждой строке таблицы и оставить только те строки, для которых это условие выполняется, т.е. имеет значение true; строки, для которых условие отбора имеет значение false или null, - отбросить. 3. Для каждой из оставшихся строк вычислить значение каждого элемента в списке возвращаемых столбцов и создать одну строку таблицы результатов запроса. При каждой ссылке на столбец используется значение столбца для текущей строки. 4. Если указано ключевое слово distinct, удалить из таблицы результатов запроса все повторяющиеся строки. Если имеется предложение order by, отсортировать результаты запроса. Объединение результатов нескольких запросов (операция UNION) * Иногда появляется необходимость объединения результатов двух или более запросов в одну таблицу. SQL поддерживает такую возможность с помощью операции union. Рис. 6.15 иллюстрирует использование операции union для выполнения следующего запроса на объединение: Вывести список всех товаров, цена которых превышает $2000 или которых было заказано более чем на $30000 за один раз. Первой части основного запроса удовлетворяет запрос, изображенный в верхней части рисунка: Вывести список всех товаров, цена которых превышает $2000. SELECT MFR ID, PRODaCT ID FROM PRODUCTS WHERE PRICE > 2000.00 MFR ID ACI RE I ACI RE I PRODUCT ID 4100Y 2A44L 4100Z 2A44R Таблица PRODUCTS PRICE > $2,000 Таблица ORDERS AMOUNT > $30,ООО
Результаты запроса >
Рис. 6.15. Использование операции UNION для объединения результатов запроса Подобным же образом вторую часть основного запроса можно выполнить с помощью запроса, изображенного в нижней части рисунка; Вывести список всех товаров, которых было заказано более чем на $30000 за один раз. SELECT DISTINCT MFR, PRODUCT FROM ORDERS WHERE AMOUNT > 30000.00 MFR PRODUCT IMM 775C REI 2A44L REI 2A4 4R Как изображено на рисунке, операция union создает одну таблицу результатов запроса, в которой содержатся строки результатов как верхнего, так и нижнего запросов. В запросах операция union используется следующим образом: Вывести список всех товаров, цена которых превышает $2000 или которых было заказано более чем на $30000 за один раз. SELECT MFR ID, PRODUCT ID FROM PRODUCTS WHERE PRICE > 2000.00 UNION SELECT DISTINCT MFR, PRODUCT FROM ORDERS WHERE AMOUNT > 30 000.00 ACI 4100Y REI 2A44L ACI 4100Z REI 2A44R IMM 775C Чтобы таблицы результатов запроса можно было объединить с помощью операции union, они должны соответствовать следующим требованиям: две таблицы должны содержать одинаковое число столбцов; тип данных каждого столбца первой таблицы должен совпадать с типом данных соответствующего столбца во второй таблице; ни одна из двух таблиц не может быть отсортирована с помощью предложения order by; однако объединенные результаты запроса можно отсортировать, как описано ниже. Обратите внимание на то, что имена столбцов в двух запросах, объединенных с помощью операции union, не обязательно должны быть одинаковыми. В предыдущем примере в первой таблице результатов запроса имеются столбцы с именами mfr iD и product iD, в то время как во второй таблице результатов запроса соответствующие им столбцы имеют имена mfr и product. Поскольку столбцы в двух таблицах могут иметь различные имена, столбцы результатов запроса, возвращенные операцией union, являются безымянными. Стандарт ANSI/ISO накладывает дополнительные ограничения на инструкции select, участвующие в операции union. Он разрешает использовать в списке возвращаемых столбцов только имена столбцов или указатель на все столбцы (select *) и запрещает использовать выражения. В большинстве СУБД, тем не менее.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |