* В противном случае, если проверяемое значение и образец имеют нулевую длину, истинностное значение равно TRUE.
* В противном случае, если проверяемое значение соответствует шаблону, то предикат LIKEравен TRUE.
* Если не соблюдается ни одно из перечисленных выше условий, предикат LIKEравен FALSE.
Проверка отсутствия/наличия значения. Предикат IS NULL
Предикат
IS [NOT] NULL
позволяет проверить отсутствие( наличие) значения в полях таблицы. Использование в этих случаях обычных предикатов сравненияможет привести к неверным результатам, т.к. сравнение со значением NULLдает результат UNKNOWN(неизвестно).
Так, если требуется найти записи в таблице Pc, для которых в поле price отсутствует значение (поиск ошибок ввода), можно воспользоваться следующим оператором:
SELECT *
FROM Pc
WHERE price IS NULL;
Получение итоговых значений
Как узнать количество моделей ПК, выпускаемых тем или иным поставщиком? Как определить среднее значение цены на компьютеры, имеющие одинаковые технические характеристики? На эти и многие другие вопросы, связанные с некоторой статистической информацией, можно получить ответы при помощи итоговых (агрегатных) функций. Стандартом предусмотрены следующие агрегатные функции:
Функция
|
Описание
|
COUNT(*)
|
Возвращает количество строк источника записей.
|
COUNT()
|
Возвращает количество значений в указанном столбце.
|
SUM()
|
Возвращает сумму значений в указанном столбце.
|
AVG()
|
Возвращает среднее значение в указанном столбце.
|
MIN()
|
Возвращает минимальное значение в указанном столбце.
|
MAX()
|
Возвращает максимальное значение в указанном столбце.
|
Все эти функции возвращают единственное значение. При этом функции COUNT, MINи MAXприменимы к любым типам данных, в то время как SUMи AVGиспользуются только для числовых полей. Разница между функцией COUNT(*)и COUNT()состоит в том, что вторая при подсчете не учитывает NULL-значения.
Пример. Найти минимальную и максимальную цену на персональные компьютеры:
SELECT MIN(price) AS Min_price, MAX(price) AS Max_price
FROM PC;
Результатом будет единственная строка, содержащая агрегатные значения:
Min_price
|
Max_price
|
350.0
|
980.0
|
Пример. Найти имеющееся в наличии количество компьютеров, выпущенных производителем А:
SELECT COUNT(*) AS Qty
FROM PC
WHERE model IN
(SELECT model
FROM Product
WHERE maker = 'A');
В результате получим:
Пример. Если же нас интересует количество различных моделей, выпускаемых производителем А, то запрос можно сформулировать следующим образом (пользуясь тем фактом, что в таблице Product каждая модель записывается один раз):
SELECT COUNT(model) AS Qty_model
FROM Product
WHERE maker = 'A';
Совпадение результатов совершенно случайно, т.к. в базе данных количество компьютеров производителя А оказалось равным числу выпускаемых им моделей:
Пример. Найти количество имеющихся различных моделей, выпускаемых производителем А. Запрос похож на предыдущий, в котором требовалось определить общее число моделей, выпускаемых производителем А. Здесь же требуется найти число различных моделей в таблице PC (т.е. имеющихся в продаже).
Для того, чтобы при получении статистических показателей использовались только уникальные значения, при аргументе агрегатных функцийможно использовать параметр DISTINCT. Другой параметр ALLиспользуется по умолчанию и предполагает подсчет всех возвращаемых значений в столбце. Оператор,
SELECT COUNT(DISTINCT model) AS Qty
FROM PC
WHERE model IN
(SELECT model
FROM Product
WHERE maker = 'A');
даст следующий результат:
Если же нам требуется получить количество моделей ПК, производимых каждымпроизводителем, то потребуется использовать предложение GROUP BY, синтаксически следующего после предложения WHERE.
Читать дальше