Организация Web-доступа к базам данных с использованием SQL-запросов
е совсем удачный
перечень основных продуктов: из него не были исключены дубликаты. Для
исключения дубликатов и одновременного упорядочения перечня необходимо
дополнить запрос ключевым словом DISTINCT (различный, различные), как
показано в следующем примере:
SELECT DISTINCT Основа
FROM Блюда;
Результат приведен на рис. 2.2,в.
Выборка вычисляемых значений
Из синтаксиса фразы SELECT видно, что в ней может содержаться не
только перечень столбцов таблицы или символ *, но и выражения.
Например, если нужно получить значение калорийности всех продуктов, то
можно учесть, что при окислении 1 г углеводов или белков в организме
освобождается в среднем 4.1 ккал, а при окислении 1 г жиров – 9.3 ккал, и
выдать запрос:
SELECT Продукт, ((Белки+Углев)*4.1+Жиры*9.3)
FROM Продукты;
результат которого приведен на рис. 2.3,а.
|а) | |Б) | | |в) |
|Продукт | |Продукт | | |Продукт | |
|Говядина|1928.1 |Говядина|Калорий |1928.1 |Зелень |118.9 |
| | | |= | | | |
|Судак |1523. |Судак |Калорий |1523. |Помидоры|196.8 |
| | | |= | | | |
|Масло |8287.5 |Масло |Калорий |8287.5 |Морковь |349.6 |
| | | |= | | | |
|Майонез |6464.7 |Майонез |Калорий |6464.7 |Лук |459.2 |
| | | |= | | | |
|Яйца |1618.9 |Яйца |Калорий |1618.9 |Яблоки |479.7 |
| | | |= | | | |
|Сметана |3011.4 |Сметана |Калорий |3011.4 |Молоко |605.1 |
| | | |= | | | |
|Молоко |605.1 |Молоко |Калорий |605.1 |Кофе |892.4 |
| | | |= | | | |
|Творог |1575. |Творог |Калорий |1575. |Судак |1523. |
| | | |= | | | |
|Морковь |349.6 |Морковь |Калорий |349.6 |Творог |1575. |
| | | |= | | | |
|Лук |459.2 |Лук |Калорий |459.2 |Яйца |1618.9 |
| | | |= | | | |
|Помидоры|196.8 |Помидоры|Калорий |196.8 |Говядина|1928.1 |
| | | |= | | | |
|Зелень |118.9 |Зелень |Калорий |118.9 |Сметана |3011.4 |
| | | |= | | | |
|Рис |3512.1 |Рис |Калорий |3512.1 |Рис |3512.1 |
| | | |= | | | |
|Мука |3556.7 |Мука |Калорий |3556.7 |Мука |3556.7 |
| | | |= | | | |
|Яблоки |479.7 |Яблоки |Калорий |479.7 |Сахар |4091.8 |
| | | |= | | | |
|Сахар |4091.8 |Сахар |Калорий |4091.8 |Майонез |6464.7 |
| | | |= | | | |
|Кофе |892.4 |Кофе |Калорий |892.4 |Масло |8287.5 |
| | | |= | | | |
Рисунок 2.3
Фраза SELECT может включать не только выражения, но и отдельные
числовые или текстовые константы. Следует отметить, что текстовые константы
должны заключаться в апострофы ('). На рис. 2.3,б приведен результат
запроса:
SELECT Продукт, 'Калорий =', ((Белки+Углев)*4.1+Жиры *9.3)
FROM Продукты;
А что произойдет, если какой-либо член выражения не определен, т.е.
имеет значение NULL и каким образом появилось такое значение?
Если при загрузке строк таблицы в какой-либо из вводимых строк
отсутствует значение для какого-либо столбца, то СУБД введет в такое поле
NULL-значение. NULL-значение «придумано» для того, чтобы представить единым
образом «неизвестные значения» для любых типов данных. Действительно, так
как при вводе данных в столбец или их изменении СУБД запрещает ввод
значений не соответствующих описанию данных этого столбца, то, например,
нельзя использовать пробел для отсутствующего значения числа. Нельзя для
этих целей использовать и ноль: нет месяца или дня недели равного нулю, да
и для чисел ноль не может рассматриваться как неизвестное значение в одном
месте и как известное – в другом. При выводе же NULL-значения на экран или
печатающее устройство его код воспроизводится каким-либо специально
заданным символом или набором символов: например, пробелом (если его нельзя
перепутать с текстовым значением пробела) или сочетанием –0-.
С помощью специальной команды можно установить в СУБД один из режимов
представления NULL-значений при выполнении числовых расчетов: запрет или
разрешение замены NULL-значения нулем. В первом случае любое арифметическое
выражение, содержащее неопределенный операнд, будет также иметь
неопределенное значение. Во втором случае результат вычислений будет иметь
численное значение (если это значение попадает в диапазон представления
соответствующего типа данных).
Например, при выполнении запроса
SELECT ПР, Цена, К_во, (Цена * К_во)
FROM Поставки;
и разных «настройках» СУБД могут быть получены разные результаты:
|ПР|Цена |К_во |(Цена*К_во) |ПР|Цена |К_во |(Цена*К_во) |
|9 |-0- |-0- |-0- |9 |-0- |-0- |0. |
|11|1.5 |50 |75. |11|1.5 |50 |75. |
|12|3. |10 |30. |12|3. |10 |30. |
|15|2. |170 |340. |15|2. |170 |340. |
Использование BETWEEN
С помощью BETWEEN … AND … (находится в интервале от … до …) можно
отобрать строки, в которых значение какого-либо столбца находятся в
заданном диапазоне.
Например, выдать перечень продуктов, в которых значение содержания
белка находится в диапазоне от 10 до 50:
| |Результат: | |
| | | |
|SELECT Продукт, | | |
|Белки | | |
|FROM Продукты | | |
|WHERE Белки | | |
|BETWEEN 10 AND | | |
|50; | | |
| |Продукт |Белки |
| |Майонез |31. |
| |Сметана |26. |
| |Молоко |28. |
| |Морковь |13. |
| |Лук |17. |
Можно задать и NOT BETWEEN (не принадлежит диапазону между), например:
| |Результа| |
| |т: | |
| | | |
|SELECT Продукт, | | |
|Белки, Жиры | | |
|FROM Продукты | | |
|WHERE Белки NOT | | |
|BETWEEN 10 AND 50| | |
| | | |
|AND Жиры 100; | | |
| |Продукт |Белки |Жиры |
| |Говядина|189. |124. |
| |Масло |60. |825. |
|Яйца |127. |115. | |
BETWEEN особенно удобен при работе с данными, задаваемыми интервалами,
начало и конец которых расположен в разных столбцах.
Для примера воспользуемся таблицей «минимальных окладов» (табл. 2.4),
величина которых непосредственно связана со студенческой стипендией. В этой
таблице для текущего значения минимального оклада установлена запредельная
дата окончания 9 сентября 9999 года.
|Миноклад |Начало |Конец |
|2250 |01-01-1993 |31-03-1993 |
|4275 |01-04-1993 |30-06-1993 |
|7740 |01-07-1993 |30-11-1993 |
|14620 |01-12-1993 |30-06-1994 |
|20500 |01-07-1994 |09-09-9999 |
Рисунок 2.4
Если, например, потребовалось узнать, какие изменения минимальных
окладов производились в 1993/94 учебном году, то можно выдать запрос
SELECT Начало, Миноклад
FROM Миноклады
WHERE Начало BETWEEN '1-9-1993' AND '31-8-1994'
и получить результат:
|Начало |Миноклад |
|01-12-1993 |14620 |
|01-07-1994 |20500 |
Отметим, что при формировании запросов значения дат следует заключать
в апострофы, чтобы СУБД не путала их с выражениями и не пыталась вычитать
из 31 значение 8, а затем 1994.
Для выявления всех значений минимальных окладов, которые существовали
в 1993/94 учебном году, можно сформировать запрос
SELECT *
FROM Миноклады
WHERE Начало BETWEEN '1-9-1993' AND '31-8-1994'
OR Конец BETWEEN '1-9-1993' AND '31-8-1994'
|Миноклад |Начало |Конец |
|7740 |01/07/1993|30/11/1993 |
|14620 |01/12/1993|30/06/1994 |
|20500 |01/07/1994|09/09/9999 |
Наконец, для получения минимального оклада на 15-5-1994:
| |Результат: | |
| |Миноклад |
|SELECT Миноклад | |
|FROM Миноклады | |
|WHERE '15-05-1994' | |
|BETWEEN Начало AND | |
|Конец | |
| |14620 |
| | скачать работу |
Организация Web-доступа к базам данных с использованием SQL-запросов |