Выборка вычисляемых значений

Из синтаксиса фразы SELECT (п.2.1) видно, что в ней может содержаться не только перечень столбцов таблицы или символ *, но и выражения.

Например, если нужно получить значение калорийности всех продуктов, то можно учесть, что при окислении 1 г углеводов или белков в организме освобождается в среднем 4.1 ккал, а при окислении 1 г жиров - 9.3 ккал, и выдать запрос:

SELECT Продукт, ((Белки+Углев)*4.1+Жиры*9.3) FROM Продукты;

результат которого приведен на рис. 2.2,а.

а)
Продукт  
Говядина 1928.1
Судак 1523.
Масло 8287.5
Майонез 6464.7
Яйца 1618.9
Сметана 3011.4
Молоко 605.1
Творог 1575.
Морковь 349.6
Лук 459.2
Помидоры 196.8
Зелень 118.9
Рис 3512.1
Мука 3556.7
Яблоки 479.7
Сахар 4091.8
Кофе 892.4
б)
Продукт    
Говядина Калорий = 1928.1
Судак Калорий = 1523.
Масло Калорий = 8287.5
Майонез Калорий = 6464.7
Яйца Калорий = 1618.9
Сметана Калорий = 3011.4
Молоко Калорий = 605.1
Творог Калорий = 1575.
Морковь Калорий = 349.6
Лук Калорий = 459.2
Помидоры Калорий = 196.8
Зелень Калорий = 118.9
Рис Калорий = 3512.1
Мука Калорий = 3556.7
Яблоки Калорий = 479.7
Сахар Калорий = 4091.8
Кофе Калорий = 892.4
в)
Продукт  
Зелень 118.9
Помидоры 196.8
Морковь 349.6
Лук 459.2
Яблоки 479.7
Молоко 605.1
Кофе 892.4
Судак 1523.
Творог 1575.
Яйца 1618.9
Говядина 1928.1
Сметана 3011.4
Рис 3512.1
Мука 3556.7
Сахар 4091.8
Майонез 6464.7
Масло 8287.5

Рис. 2.2. Примеры запросов с вычисляемыми полями

Фраза SELECT может включать не только выражения, но и отдельные числовые или текстовые константы. Следует отметить, что текстовые константы должны заключаться в апострофы ('). На рис. 2.2,б приведен результат запроса

SELECT Продукт, 'Калорий =', ((Белки+Углев)*4.1+Жиры *9.3) FROM Продукты;

А что произойдет, если какой-либо член выражения не определен, т.е. имеет значение NULL и каким образом появилось такое значение?

Если при загрузке строк таблицы в какой-либо из вводимых строк отсутствует значение для какого-либо столбца, то СУБД введет в такое поле NULL-значение. NULL-значение "придумано" для того, чтобы представить единым образом "неизвестные значения" для любых типов данных. Действительно, так как при вводе данных в столбец или их изменении СУБД запрещает ввод значений не соответствующих описанию данных этого столбца, то, например, нельзя использовать пробел для отсутствующего значения числа. Нельзя для этих целей использовать и ноль: нет месяца или дня недели равного нулю, да и для чисел ноль не может рассматриваться как неизвестное значение в одном месте и как известное - в другом. При выводе же NULL-значения на экран или печатающее устройство его код воспроизводится каким-либо специально заданным символом или набором символов: например, пробелом (если его нельзя перепутать с текстовым значением пробела) или сочетанием -0-.

С помощью специальной команды можно установить в СУБД один из режимов представления NULL-значений при выполнении числовых расчетов: запрет или разрешение замены NULL-значения нулем. В первом случае любое арифметическое выражение, содержащее неопределенный операнд, будет также иметь неопределенное значение. Во втором случае результат вычислений будет иметь численное значение (если это значение попадает в диапазон представления соответствующего типа данных).

Например, при выполнении запроса

SELECT ПР, Цена, К_во, (Цена * К_во) FROM Поставки;

и разных "настройках" СУБД могут быть получены разные результаты:

ПР Цена К_во (Цена*К_во)
  -0- -0- -0-
  1.5   75.
  3.   30.
  2.   340.
ПР Цена К_во (Цена*К_во)
  -0- -0- 0.
  1.5   75.
  3.   30.
  2.   340.


2.3 Выборка c использованием фразы WHERE В синтаксисе фразы WHERE (п.2.1) показано, что для отбора нужных строк таблицы можно использовать операторы сравнения = (равно), <> (не равно), < (меньше), <= (меньше или равно), > (больше), >= (больше или равно), которые могут предваряться оператором NOT, создавая, например, отношения "не меньше" и "не больше". Так, для получения перечня продуктов, практически не содержащих углеводов, можно сформировать запрос
SELECT Продукт, Белки, Жиры, Углев, K, Ca, Na, B2, PP, C FROM Продукты WHERE Углев = 0;

и получить:

Продукт Белки Жиры Углев K Ca Na B2 PP C
Говядина 189. 124. 0.       1.5 28.  
Судак 190. 80. 0.       1.1 10.  

Возможность использования нескольких условий, соединенных логическими операторами AND, OR, AND NOT и OR NOT, позволяет осуществить более детальный отбор строк. Так, для получения перечня продуктов, практически не содержащих углеводов и натрия, можно сформировать запрос:

SELECT Продукт, Белки, Жиры, Углев, K, Ca, Na, B2, PP, C FROM Продукты WHERE Углев = 0 AND Na = 0;

Результат запроса имеет вид

Продукт Белки Жиры Углев K Ca Na B2 PP C
Судак 190. 80. 0.       1.1 10.  

Добавим к этому запросу еще одно условие

SELECT Продукт, Белки, Жиры, Углев, K, Ca, Na, B2, PP, C FROM Продукты WHERE Углев = 0 AND Na = 0 AND Продукт <> 'Судак'

и получим на экране сообщение "No rows exist or satisfy the specified clause" или аналогичное (в зависимости от вкусов разработчиков разных СУБД), информирующее об отсутствии строк, удовлетворяющих заданному(ым) условию(ям).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow