SELECT *
FROM Customers
WHERE city NOT NULL;
При отсутствии значений NULL( как в нашем случае ), будет выведена вся таблица Заказчиков. Аналогично можно ввести следующее
SELECT *
FROM Customers
WHERE NOT city IS NULL;
- что также приемлемо.
Мы можем также использовать NOT с IN:
SELECT *
FROM Salespeople
WHERE city NOT IN ('London', 'San Jose' );
А это - другой способ подобного же выражения
SELECT *
FROM Salespeople
WHERE NOT city IN ('London', ' San Jose' );
Вывод для этого запроса показывается в Таблице 5.9.
Таким же способом Вы можете использовать NOT BETWEEN и NOT LIKE.
SELECT * FROM Salespeople WHERE sity NOT IN
('London', 'San Jose');
|
snum |
sname |
city |
comm |
|
1003 |
Rifkin |
Barcelona |
0.15 |
|
1007 |
Axelrod |
New York |
0.10 |
Таблица 5. 9: Использование NOT с IN
Теперь вы можете создавать предикаты в терминах связей специально определенных SQL. Вы можете искать значения в определенном диапазоне (BETWEEN) или в числовом наборе (IN), или вы можете искать символьные значения которые соответствуют тексту внутри параметров (LIKE).
Вы также изучили некоторые вещи относительно того как SQL поступает при отсутствии данных - что реальность мировой базы данных - используя NULL вместо конкретных значений. Вы можете извлекать или исключать значения NULL из вашего вывода используя оператор IS NULL. Теперь, когда вы имеете в вашем распоряжении весь набор стандартных математических и специальных операторов, вы можете переходить к специальным функциям SQL которые работают на всех группах значений, а не просто на одиночном значении, что важно.
Это уже тема Главы 6.
Напишите два запроса которые могли бы вывести все порядки на 3 или 4 Октября 1990
* Напишите запрос который выберет всех заказчиков обслуживаемых продавцами Peel или Motika. (Подсказка: из наших типовых таблиц, поле snum связывает вторую таблицу с первой )
* Напишите запрос, который может вывести всех заказчиков чьи имена начинаются с буквы попадающей в диапазон от A до G.
* Напишите запрос который выберет всех пользователей чьи имена начинаются с буквы C.
* Напишите запрос который выберет все порядки имеющие нулевые значения или NULL в поле amt(сумма).
Глава 6. ОБОБЩЕНИЕ ДАННЫХ С ПОМОЩЬЮ АГРЕГАТНЫХ ФУНКЦИЙ
В ЭТОЙ ГЛАВЕ, ВЫ ПЕРЕЙДЕТЕ ОТ ПРОСТОГО использования запросов к извлечению значений из базы данных и определению, как вы можете использовать эти значения чтобы получить из них информацию. Это делается с помощью агрегатных или общих функций которые берут группы значений из поля и сводят их до одиночного значения. Вы узнаете как использовать эти функции, как определить группы значений к которым они будут применяться, и как определить какие группы выбираются для вывода. Вы будете также видеть при каких условиях вы сможете объединить значения поля с этой полученной информацией в одиночном запросе.
Запросы могут производить обобщенное групповое значение полей точно также как и значение одного поля. Это делает с помощью агрегатых функций. Агрегатные функции производят одиночное значение для всей группы таблицы. Имеется список этих функций:
* COUNT производит номера строк или не-NULL значения полей которые выбрал запрос.
* SUM производит арифметическую сумму всех выбранных значений данного поля.
* AVG производит усреднение всех выбранных значений данного поля.
* MAX производит наибольшее из всех выбранных значений данного поля.
* MIN производит наименьшее из всех выбранных значений данного поля.
Агрегатные функции используются подобно именам полей в предложении SELECT запроса, но с одним исключением, они берут имена поля как аргументы. Только числовые поля могут использоваться с SUM и AVG. С COUNT, MAX, и MIN, могут использоваться и числовые или символьные поля. Когда они используются с символьными полями, MAX и MIN будут транслировать их в эквивалент ASCII, который должен сообщать, что MIN будет означать первое, а MAX последнее значение в алфавитном порядке( выдача алфавит ного упорядочения обсуждается более подробно в Главе 4). Чтобы найти SUM всех наших покупок в таблицы Порядков, мы можем ввести следующий запрос, с его выводом в Таблице 6.1:
SELECT SUM ((amt))
FROM Orders;
SELECT SUM (amt) FROM Orders;
|
26658.4 |
Таблица 6.1: Выбор суммы
Это конечно, отличается от выбора поля при котором возвращается одиночное значение, независимо от того сколько строк находится в таблице.
Из-за этого, агрегатные функции и поля не могут выбираться одновременно, пока предложение GROUP BY (описанное далее) не будет использовано.
Нахождение усредненой суммы - это похожая операция (вывод следующего запроса показывается в Таблице 6.2 ):
SELECT AVG (amt)
FROM Orders;
SELECT AVG (amt) FROM Orders;
|
26658.4 |
Таблица 6.2: Выбор среднего
Функция COUNT несколько отличается от всех. Она считает число значений в данном столбце, или число строк в таблице. Когда она считает значения столбца, она используется с DISTINCT чтобы производить счет чисел различных значений в данном поле. Мы могли бы использовать ее, например, чтобы сосчитать номера продавцов в настоящее время описаных в таблице Порядков (вывод показывается в Таблице 6.3 ):
SELECT COUNT (DISTINCT snum )
FROM Orders;
Обратите внимание в вышеупомянутом примере, что DISTINCT, сопровождаемый именем поля с которым он применяется, помещен в круглые скобки, но не сразу после SELECT, как раньше.
Этого использования DISTINCT с COUNT применяемого к индивидуальным столбцам, требует стандарт ANSI, но большое количество программ не предъявляют к ним такого требования.
SELECT COUNT (DISTINCT snum) FROM Orders;
|
5 |
Таблица 6.3: Подсчет значений поля
Вы можете выбирать многочисленые счета( COUNT ) из полей с помощью DISTINCT в одиночном запросе который, как мы видели в Главе 3, не выполнялся когда вы выбирали строки с помощью DISTINCT. DISTINCT может использоваться таким образом, с любой функцией агрегата, но наиболее часто он используется с COUNT. С MAX и MIN, это просто не будет иметь никакого эффекта, а SUM и AVG, вы обычно применяете для включения повторяемых значений, так как они законно эффективнее общих и средних значений всех столбцов.
Чтобы подсчитать общее число строк в таблице, используйте функцию COUNT со звездочкой вместо имени поля, как например в следующем примере, вывод из которого показан в Таблице.4:
SELECT COUNT (*)
FROM Customers
COUNT со звездочкой включает и NULL и дубликаты, по этой причине DISTINCT не может быть использован. DISTINCT может производить более высокие номера чем COUNT особого поля, который удаляет все строки, имеющие избыточные или NULL данные в этом поле.