- •Информационное обеспечение систем управления Построение запросов при работе с базой данных (Учебное пособие)
- •Тестовая база данных
- •Выборка данных. Команда select
- •Синтаксис оператора select
- •Простые варианты поиска данных
- •Упорядочение результата запроса. Предложение order by
- •Использование ключевого слова distinct
- •Предложение where
- •Синтаксис предложения where
- •Использование операторов сравнения
- •Использование варианта between
- •Проверка на присутствие в списке значений (вариант in)
- •Проверка на пустое значение
- •Поиск в строковых столбцах
- •Вариант like
- •Использование логических операций в условиях поиска
- •Порядок выполнения логических операций
- •Преобразование данных при выборке
- •Обобщение Данных с помощью Агрегатных Функций
- •Использование distinct с count
- •Предложение group by
- •Предложение having
- •Соединение таблиц
- •Внутренние соединения (связывание по равенству)
- •Внешние соединения
- •Левое внешнее соединение
- •Правое внешнее соединение
- •Полное внешнее соединение
- •Более сложные примеры соединений
- •Рефлексивное соединение, или самосоединение
- •Использование подзапросов в операторах sql
- •Выбор одного
- •Использование в подзапросе агрегатных функций
- •Связанные подзапросы
- •Использование оператора exists
- •Использование варианта in с подзапросами
- •Использование not exists
- •Объединение запросов
- •Команда union
- •Добавление данных. Команда insert
- •Добавление отдельной строки
- •Добавление группы строк
- •Обновление уже имеющихся данных. Команда update
- •Удаление данных из таблиц. Команда delete
- •Генераторы и их использование
- •Создание генераторов
- •Использование генераторов
- •Увеличение значения генератора
- •Получение значения генератора в приложение
- •Триггер
Использование distinct с count
Функция COUNT несколько отличается от всех. Она считает число значений в данном столбце, или число строк в таблице. Когда она считает значения столбца, она используется с DISTINCT чтобы производить счет чисел различных значений в данном поле. Мы могли бы использовать ее, например, чтобы сосчитать количество всех имен в таблице PERSON.xxvi
SELECT COUNT ( DISTINCT PR_NAME2) FROM PERSON
В результате получаем :
-
COUNT
63
если бы мы не использовали DISTINCT а ввели:
SELECT COUNT (PR_NAME2) FROM PERSON
мы бы получили количество всех имен с учетом повторов
-
COUNT
63
COUNT примененная к значениям столбца к не может подсчитать значения NULL, если мы пожелаем подсчитать количество дней рождения в таблице PERSON то получим количество значений только с ненулевыми значениями. Введем xxvii
SELECT COUNT ( PR_BIRTHDAY) FROM PERSON
В результате получаем :
-
COUNT
104
т.е. количество людей у которых известна дата рождения.
Теперь применим COUNT для подсчета числа строк, в этом случае DISTINCT не используется. Найдем количество всех Татьянxxviii
SELECT COUNT(*) FROM PERSON
WHERE PR_NAME2 = 'Татьяна'
получаем
-
COUNT
16
Предложение group by
Предложение GROUP BY позволяет вам определять подмножество значений в особом поле в терминах другого поля, и применять функцию агрегата к подмножеству. Это дает вам возможность объединять поля и агрегатные функции в едином предложении SELECT. Группировка является обязательной, если в операторе SELECT вы используете и агрегатные функции, и обычные столбцы. При этом группировка должна выполняться по всем неагрегатным столбцам.
Существует два основных правила группировки.
Каждый столбец, включенный в неагрегатный список оператора SELECT, должен появиться в предложении GROUP BY.
Оператор SELECT может содержать только одно предложение GROUP BY.
Это важнейшие правила группировки. Мы должны их помнить и использовать в любом нашем операторе, выполняющем группировку. Иначе получим ошибку, борьба с которой может занять слишком много нашего драгоценного времени
Предложение GROUP BY располагается после предложения WHERE и перед предложением ORDER BY.
Например, предположим что вы хотите найти сколько каких имен содержится в нашем списке, при этом упорядочивая вывод по найденному количеству (по направлению от большего к меньшему), если количество будет повторяться, отсортируем список по имени:xxix
SELECT COUNT (*), PR_NAME2
FROM PERSON
GROUP BY PR_NAME2
ORDER BY 1 DESC, PR_NAME2
Получим следующий список, упорядоченный по результатам расчета функции COUNT
Листинг 14.Количество каждого имени в списке людей
COUNT |
PR_NAME2 |
23 |
Елена |
20 |
Наталья |
16 |
Татьяна |
15 |
Светлана |
12 |
Марина |
11 |
Ирина |
11 |
Оксана |
11 |
Ольга |
10 |
Екатерина |
9 |
Юлия |
7 |
Сергей |
6 |
Александр |
6 |
Анна |
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 |
Василий |
1 |
Виктория |
1 |
Галина |
1 |
Гульнара |
1 |
Евгения |
1 |
Кирил |
1 |
Константин |
1 |
Лиана |
1 |
Лилия |
1 |
Марианна |
1 |
Назгуль |
1 |
Николай |
1 |
Нина |
1 |
Павел |
1 |
Петр |
1 |
Руслан |
1 |
Тарас |
1 |
Эльвира |
1 |
Эмма |
1 |
Юлиана |
1 |
Юлий |
1 |
Явар |
