- •ОГЛАВЛЕНИЕ
- •3. Простые варианты поиска данных
- •3.2. Использование ключевого слова DISTINCT
- •3.3. Предложение WHERE
- •4.1. Использование DISTINCT с COUNT
- •4.3. Предложение HAVING
- •5.2. Внешние соединения
- •6. ИСПОЛЬЗОВАНИЕ ПОДЗАПРОСОВ В ОПЕРАТОРАХ SQL
- •6.4. Использование оператора EXISTS
- •6.5. Использование варианта IN с подзапросами
- •6.6. Использование NOT EXISTS
- •8. ДОБАВЛЕНИЕ ДАННЫХ. КОМАНДА INSERT
- •8.1. Добавление отдельной строки
- •9. ОБНОВЛЕНИЕ УЖЕ ИМЕЮЩИХСЯ ДАННЫХ.
- •КОМАНДА UPDATE
- •10. УДАЛЕНИЕ ДАННЫХ ИЗ ТАБЛИЦ. КОМАНДА DELETE
- •11. ГЕНЕРАТОРЫ И ИХ ИСПОЛЬЗОВАНИЕ
- •11.1. Создание генераторов
- •ПРИМЕРЫ ЗАПРОСОВ
ваться и числовые или символьные поля. Когда они используются с символьными полями, МАХ и MIN будут транслировать их в эквивалент ASCII, который должен сообщать, что MIN будет означать первое, а МАХ последнее значение в алфавитном порядке. Выполним, например, следующий оператор, который отыскивает человека с «максимальной» фамилией, т.е. с фамилией, являющейся последней в упорядоченном по алфавиту списке фамилий:24
SELECT МАХ( PR_NAME) AS "Фамилия" FROM PERSON
Мы получим фамилию «Янышева».
Аналогичным образом работает и функция MIN, но с точно стью до наоборот. Можете это также проверить.
Применим MIN к числовому полю, найдем минимальный та риф на билеты:25
SELECT MIN(TR_COST) FROM TARIFF
Получим минимальную стоимость билета.
В результате использования агрегатных функций возвращается одиночное значение, независимо от того, сколько строк находится в таблице. Из-за этого агрегатные функции и поля не могут выби раться одновременно, пока предложение GROUP BY (описанное далее) не будет использовано.
4.1. Использование DISTINCT с COUNT
Функция COUNT несколько отличается от всех. Она считает число значений в данном столбце или число строк в таблице. Когда она считает значения столбца, она используется с DISTINCT, чтобы производить счет чисел различных значений в данном поле. Мы могли бы использовать ее, например, чтобы сосчитать количе ство всех имен в таблице PERSON.26
SELECT |
COUNT ( DISTINCT PR_NAME2) FROM PERSON |
В результате получаем: |
|
COUNT |
|
63 |
|
если бы мы не использовали DISTINCT, а ввели |
|
SELECT |
COUNT (PR_NAME2) FROM PERSON. |
мы бы получили количество всех имен с учетом повторов
COUNT 248
COUNT, примененная к значениям столбца, не может подсчи тать значения NULL; если мы пожелаем подсчитать количество
дней рождения |
в таблице PERSON, то получим количество значе |
ний только с ненулевыми значениями. Введем27 |
|
SELECT |
COUNT ( PR__BIRTHDA У) FROM PERSON |
В результате получаем COUNT 1
104 количество людей, у которых известна дата рождения.
Теперь применим COUNT для подсчета числа строк, в этом
случае DISTINCT не используется. Найдем количество всех Татьян28 :
SELECT COUNTC) FROM PERSON
WHERE PR_NAME2 = ’Татьяна’,
получаем_____
COUNT 16
4.2 .......................... |
GROUPBY |
Предложение GROUP BY позволяет вам определять подмно жество значений в особом поле в терминах другого поля и приме нять функцию агрегата к подмножеству. Это дает вам возможность объединять поля и агрегатные функции в едином предложении SELECT. Группировка является обязательной, если в операторе SELECT вы используете и агрегатные функции, и обычные столб цы. При этом группировка должна выполняться по всем неагрегат ным столбцам.
Существует два основных правила группировки:
1.Каждый столбец, включенный в неагрегатный список опера тора SELECT, должен появиться в предложении GROUP BY.
2.Оператор SELECT может содержать только одно предложе ние GROUP BY.
Это важнейшие правила группировки. Мы должны их помнить и использовать в любом нашем операторе, выполняющем группи
ровку. Иначе получим ошибку, которой может занять слишком много времени.
ш НД 1? ДЛ0Же™е ? R° UP BY Располагается после предложения WHERE и перед предложением ORDER BY.
Например, предположим, что вы хотите найти, сколько каких имен содержится в нашем списке, при этом упорядочивая вывод по найденному количеству (по направлению от большего к меньшему), если количество будет повторяться, отсортируем список по имени 2’
SELECT COUNT Г), PRJNAME2
FROM PERSON GROUP BY PRJNAME2
ORDER BY 1 DESC, PR_NAME2
Получим следующий список, упорядоченный по результатам расчета функции COUNT:
Листинг 14
Количество каждого имени в списке людей
COUNT |
PRJ4AME2 |
23 |
Елена |
20 |
Наталья |
16 |
Татьяна |
15 |
Светлана |
12 |
Марина |
11 |
Ирина |
11 |
Оксана |
ИОльга
10 |
Екатерина |
9 |
Юлия |
7 |
Сергей |
6 |
Александр |
6 |
Анна |
COUNT |
PRJ4AME2 |
5 |
Алексей |
5 |
Дмитрий |
5 |
Надежда |
5 |
Олег |
4 |
Вера |
4 |
Людмила |
4 |
Мария |
3 |
Владимир |
3 |
Ксения |
3 |
Лариса |
3 |
Максим |
2 |
Анастасия |
2 |
Вячеслав |
2 |
Евгений |
2 |
Илья |
2 |
Любовь |
2 |
Михаил |
2 |
Семен |
2 |
Станислав |
2 |
Эдуард |
1 |
Алевтина |
1 |
Алмаз |
1 |
Альбина |
1 |
Амина |
1 |
Ангелина |
1 |
Антонина |
1 |
Валентина |
1 |
Валерий |
1 |
Василий |