p>В предыдущем примере был выдан правильный, но не совсем удачный перечень основных продуктов: из него не были исключены дубликаты. Для исключения дубликатов и одновременного упорядочения перечня необходимо дополнить запрос ключевым словом 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. 2
Фраза 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. 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
Страницы: 1, 2, 3, 4, 5, 6, 7
|