Организация Web-доступа к базам данных с использованием SQL-запросов
Использование IN
Выдать сведения о блюдах на основе яиц, крупы и овощей
SELECT *
FROM Блюда
WHERE Основа IN (Яйца Крупа Овощи);
Результат:
|БЛ|Блюдо |В|Основа |Выход |Труд |
|1 |Салат летний |З|Овощи |200. |3 |
|3 |Салат витаминный |З|Овощи |200. |4 |
|16|Драчена |Г|Яйца |180. |4 |
|17|Морковь с рисом |Г|Овощи |260. |3 |
|19|Омлет с луком |Г|Яйца |200. |5 |
|20|Каша рисовая |Г|Крупа |210. |4 |
|21|Пудинг рисовый |Г|Крупа |160. |6 |
|23|Помидоры с луком |Г|Овощи |260. |4 |
Рассмотренная форма IN является в действительности просто краткой
записью последовательности отдельных сравнений, соединенных операторами OR.
Предыдущее предложение эквивалентно такому:
SELECT *
FROM Блюда
WHERE Основа=Яйца OR Основа=Крупа OR Основа=Овощи;
Использование LIKE
Выдать перечень салатов
| |Результат: | |
| |Блюдо |
|SELECT Блюдо | |
|FROM Блюда | |
|WHERE Блюдо LIKE | |
|'Салат%'; | |
| |Салат летний |
| |Салат мясной |
| |Салат витаминный |
| |Салат рыбный |
Обычная форма «имя_столбца LIKE текстовая_константа» для столбца
текстового типа позволяет отыскать все значения указанного столбца,
соответствующие образцу, заданному «текстовой_константой». Символы этой
константы интерпретируются следующим образом:
символ _ (подчеркивание) – заменяет любой одиночный символ,
символ % (процент) – заменяет любую последовательность из N символов (где N
может быть нулем),
все другие символы означают просто сами себя.
Следовательно, в приведенном примере SELECT будет осуществлять выборку
записей из таблицы Блюда, для которых значение в столбце Блюдо начинается
сочетанием 'Салат' и содержит любую последовательность из нуля или более
символов, следующих за сочетанием 'Салат'. Если бы среди блюд были «Луковый
салат», «Фруктовый салат» и т.п., то они не были бы найдены. Для их
отыскания надо изменить фразу WHERE:
WHERE Блюдо LIKE '%салат%'
или при отсутствии различий между малыми и большими буквами (такую
настройку допускают некоторые СУБД):
WHERE Блюдо LIKE '%Салат%'
Это позволит отыскать все салаты.
Вовлечение неопределенного значения (NULL-значения)
Если при загрузке данных не введено значение в какое-либо поле
таблицы, то СУБД поместит в него NULL-значение. Аналогичное значение можно
ввести в поле таблицы, выполняя операцию изменения данных. Так, при
отсутствии сведений о наличии у поставщиков судака и моркови в столбцы Цена
и К_во соответствующих строк таблицы Поставки вводится NULL и там будет
храниться код NULL-значения, а не 0, 0. Или пробел. (Отметим, что в
распечатке таблицы Поставки в этих местах расположен пробел, установленный
в СУБД для представления NULL-значения при выводе на печать).
В этом случае для выявления названий продуктов, отсутствующих в кладовой,
шеф-повар может дать запрос
|Результат: |ПР |
|S| |2 |
|E| |9 |
|L| | |
|E| | |
|C| | |
|T| | |
|D| | |
|I| | |
|S| | |
|T| | |
|I| | |
|N| | |
|C| | |
|T| | |
|П| | |
|Р| | |
| | | |
|F| | |
|R| | |
|O| | |
|M| | |
|Н| | |
|а| | |
|л| | |
|и| | |
|ч| | |
|и| | |
|е| | |
| | | |
|W| | |
|H| | |
|E| | |
|R| | |
|E| | |
|К| | |
|_| | |
|в| | |
|о| | |
|I| | |
|S| | |
|N| | |
|U| | |
|L| | |
|L| | |
|;| | |
Естественно, что для выявления продуктов, существующих в кладовой,
следует дать запрос
SELECT DISTINCT ПР
FROM Наличие
WHERE К_во IS NOT NULL;
Использование условий
столбец IS NULL и столбец IS NOT NULL
вместо, например,
столбец = NULL и столбец < NULL
связано с тем, что ничто – и даже само NULL-значение – не считается равным
другому NULL-значению. (Несмотря на это, два неопределенных значения
рассматриваются, однако, как дубликаты друг друга при исключении
дубликатов, и предложение SELECT DISTINCT даст в результате не более одного
NULL-значения.)
Выборка с упорядочением
Простейший вариант этой фразы – упорядочение строк результата по
значению одного из столбцов с указанием порядка сортировки или без такого
указания. (По умолчанию строки будут сортироваться в порядке возрастания
значений в указанном столбце.)
Например, выдать перечень продуктов и содержание в них основных
веществ в порядке убывания содержания белка
| |Продукт|Белки |Жиры |Углев |
|SELECT Продукт,| | | | |
|Белки, Жиры, | | | | |
|Углев | | | | |
|FROM Продукты | | | | |
|ORDER BY Белки | | | | |
|DESC; | | | | |
| |Судак |190. |80. |0. |
| |Говядин|189. |124. |0. |
| |а | | | |
| |Творог |167. |90. |13. |
| |Яйца |127. |115. |7. |
| |Кофе |127. |36. |9. |
| |Мука |106. |13. |732. |
При включении в список ORDER BY нескольких столбцов СУБД сортирует
строки результата по значениям первого столбца списка пока не появится
несколько строк с одинаковыми значениями данных в этом столбце. Такие
строки сортируются по значениям следующего столбца из списка ORDER BY и
т.д.
Например, выдать содержимое таблицы Блюда, отсортировав ее строки по
видам блюд и основе:
| |Результат: | | | |
|SELECT * |БЛ|Блюдо |В|Основа|Выход|Труд |
|FROM Блюда | | | | | | |
|ORDER BY В | | | | | | |
|Основа; | | | | | | |
| |21|Пудинг рисовый |Г|Крупа |160. |6 |
| |20|Каша рисовая |Г|Крупа |210. |4 |
| |18|Сырники |Г|Молоко|220. |4 |
| |. | | | | | |
| |. | | | | | |
| |. | | | | | |
| |16|Драчена |Г|Яйца |180. |4 |
| |28|Крем творожный |Д|Молоко|160. |4 |
| |. | | | | | |
| |. | | | | | |
| |. | | | | | |
| |26|Яблоки печеные |Д|Фрукты|160. |3 |
| |7 |Сметана |З|Молоко|140. |1 |
| |8 |Творог |З|Молоко|140. |2 |
| |2 |Салат мясной |З|Мясо |200. |4 |
| |6 |Мясо с гарниром|З|Мясо |250. |3 |
| |1 |Салат летний |З|Овощи |200. |3 |
| |. | | | | | |
| |. | | | | | |
| |. | | | | | |
Кроме того, в список ORDER BY можно включать не только имя столбца, а
его порядковую позицию в перечне SELECT. Благодаря этому возможно
упорядочение результатов на основе вычисляемых столбцов, не имеющих имен.
Например, запрос
SELECT Продукт, ((Белки+Углев)*4.1+Жиры*9.3
| | скачать работу |
Организация Web-доступа к базам данных с использованием SQL-запросов |