Продукт
|
ккал
|
Говядина
|
NULL
|
Судак
|
NULL
|
Масло
|
8287,5
|
Майонез
|
6464,7
|
Яйца
|
1618,9
|
Сметана
|
3011,4
|
Кофе
|
892,4
|
Результат
|
|
|
Продукт
|
|
|
Говядина
|
Калорий =
|
NULL
|
Судак
|
Калорий =
|
NULL
|
Масло
|
Калорий =
|
8287,5
|
Майонез
|
Калорий =
|
6464,7
|
Яйца
|
Калорий =
|
1618,9
|
Сметана
|
Калорий =
|
3011,4
|
Кофе
|
Калорий =
|
892,4
|
а б
Рис.3.2. Примеры запросов с вычисляемыми полями
3.2.1.4. NULL-значения в выражениях.
В некоторых ячейках результата стоит NULL. Почему?
Как правило, применение NULL-значения в выражении приводит к результату, равному NULL. Например, SELECT (5+NULL) вернет NULL, а не 5. Как и в случае простых выражений, при передаче большинству функций NULL-значений результатом будет NULL. Исключение составляют функции, специально предназначенные для работы с неопределенными значениями.
ISNULL (<проверяемое поле>,< значение, если проверяемое поле равно NULL>)
преобразует NULL-значение к значению, отличному от NULL. Тогда запрос будет выглядеть так
Результат
|
|
Продукт
|
|
Говядина
|
1928,1
|
Судак
|
1523
|
Масло
|
8287,5
|
Майонез
|
6464,7
|
Яйца
|
1618,9
|
Сметана
|
3011,4
|
Кофе
|
892,4
| SELECT Продукт,
( ISNULL(Белки,0)+ISNULL(Углеводы,0))*4.1
+ISNULL(Жиры,0) *9.3
FROM Продукты;
3.2.2. Выборка c использованием фразы WHERE.
Раздел WHERE предназначен для ограничения количества строк, включаемых в результат выборки. Будут включены только те строки, которые удовлетворяют условию отбора строк.
WHERE условие_отбора_строк
где условие_отбора_строк – выражение логического типа(TRUE, FALSE). В условии можно использовать операторы сравнения = (равно), <> (не равно), < (меньше), <= (меньше или равно), > (больше), >= (больше или равно), которые могут предваряться оператором NOT, создавая, например, отношения "не меньше" и "не больше".
условие_отбора_строк - предназначено для объединения множества логических условий, каждое из которых возвращает выражение логического типа. Объединение выполняется с помощью операторов AND или OR.
3.2.2.1. Использование операторов сравнения.
Пример 4.
Получить перечень продуктов, содержащих менее 50 г углеводов
SELECT Продукт, Белки, Жиры, Углеводы, K, Ca, Na, B2, PP, C
FROM Продукты
WHERE (Углеводы < 50);
и получить:
Результат
|
|
|
|
|
|
|
|
|
|
Продукт
|
Белки
|
Жиры
|
Углеводы
|
К
|
Са
|
Na
|
B2
|
PP
|
C
|
Майонез
|
31
|
670
|
26
|
480
|
280
|
NULL
|
NULL
|
NULL
|
NULL
|
Яйца
|
127
|
115
|
7
|
1530
|
550
|
710
|
4,4
|
1,9
|
NULL
|
Сметана
|
26
|
300
|
28
|
950
|
850
|
320
|
1
|
1
|
2
|
Молоко
|
28
|
32
|
47
|
1460
|
1210
|
1500
|
1,3
|
1
|
10
|
Творог
|
167
|
90
|
13
|
1120
|
1640
|
1410
|
2,7
|
4
|
5
|
Помидоры
|
6
|
NULL
|
42
|
290
|
140
|
400
|
0,4
|
5,3
|
250
|
Зелень
|
9
|
NULL
|
20
|
340
|
275
|
75
|
1,2
|
4
|
380
|
Кофе
|
127
|
36
|
9
|
9710
|
180
|
180
|
0,3
|
1,8
|
NULL
|
Пример 5.
Получить перечень продуктов, практически не содержащих углеводов и натрия
SELECT Продукт, Белки, Жиры, Углеводы, K, Ca, Na, B2, PP, C
FROM Продукты
WHERE (Углеводы = 0) AND (Na = 0);
Результат
|
|
|
|
|
|
|
|
|
|
Продукт
|
Белки
|
Жиры
|
Углеводы
|
К
|
Са
|
Na
|
B2
|
PP
|
C
|
результат запроса пуст.
3.2.2.2. Сравнение с NULL.
Заметим, что отсутствующие и пустые значения - это две большие разницы. Целое, значение которого отсутствует, это не то же самое, что целое, значение которого равно нулю. Неопределенная строка - это не то же самое, что строка нулевой длины или строка, содержащая одни пробелы. Эта разница важна, так как сравнения между пустыми и неопределенными значениями всегда будут неудачны. Фактически, NULL-значения даже не равны друг другу в таких сравнениях.
Возможность неопределенных значений в реляционных базах данных означает, что для любого сравнения возможны три результата: Истина (True), Ложь (False) или Неизвестно (Unknown). Это требует использования трехзначной логики.
AND
|
True
|
False
|
Unknown
|
True
|
True
|
False
|
Unknown
|
False
|
False
|
False
|
False
|
Unknown
|
Unknown
|
False
|
Unknown
|
|
OR
True
Fa
se
Unknown
True
True
True
Tr
e
False
True
False
Unknown
Unknown
True
Unknown
Unknown
|
NOT
|
True
|
False
|
Unknown
|
|
False
|
True
|
Unknown
|
|
|
Для выявления равенства значения некоторого столбца неопределенному, применяют специальные стандартные предикаты;
<Столбец> IS NULL и < Столбец > IS NOT NULL.
Пример 6.
Результат
|
|
Продукт
|
Говядина
|
Судак
| Вывести все продукты, не содержащие углеводов
SELECT Продукт
FROM Продукты
WHERE (Углеводы IS NULL) OR (Углеводы = 0);
3.2.2.3. Использование BETWEEN.
С помощью BETWEEN … AND … (находится в интервале от ... до ...) можно отобрать строки, в которых значение какого-либо столбца находятся в заданном диапазоне.
Пример 7.
Выдать перечень продуктов, в которых значение содержания белка находится в диапазоне от 10 до 50:
Результат
|
|
Продукт
|
Белки
|
Майонез
|
31
|
Сметана
|
26
|
Молоко
|
28
|
Морковь
|
13
|
Лук
|
17
| SELECT Продукт, Белки
FROM Продукты
WHERE Белки BETWEEN 10 AND 50;
Можно задать и NOT BETWEEN (не принадлежит диапазону между), например:
Результат
|
|
|
Продукт
|
Белки
|
Жиры
|
Говядина
|
189
|
124
|
Масло
|
60
|
825
|
Яйца
|
127
|
115
|
SELECT Продукт, Белки, Жиры
FROM Продукты
WHERE (Белки NOT BETWEEN 10 AND 50)
AND (Жиры > 100);
BETWEEN удобен при работе с данными, задаваемыми интервалами, начало и конец которых расположен в разных столбцах.
3.2.2.4. Использование IN (NOT IN).
Задает поиск выражения, включенного или исключенного из списка. Выражение поиска может быть константой или именем столбца, а списком может быть набор констант или, что чаще, вложенный запрос. Список значений необходимо заключать в скобки.
Пример 8.
Выдать сведения о блюдах на основе яиц, крупы и овощей
SELECT *
FROM Блюда
WHERE Основа IN (’Яйца’, ’Крупа’, ’Овощи’);
Do'stlaringiz bilan baham: |