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. 3
Если, например, потребовалось узнать, какие изменения минимальных окладов производились в 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 Использование 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-значения при выводе на печать). В этом случае для выявления названий продуктов, отсутствующих в кладовой, шеф-повар может дать запрос Результат: ПР SELECT DISTINCT ПР FROM Наличие WHERE К_во IS NULL; 2 9
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9