- •1 Введение 2
- •2 Выборка информации из базы данных 3
- •3 Команды модификации таблиц 15
- •4 Создание таблиц 17
- •1Введение
- •2Выборка информации из базы данных
- •2.1Базовый синтаксис оператора select
- •2.8.1Полный синтаксис оператора select
- •2.8.2Упорядочивание результатов
- •2.8.3Устранение повторяющихся строк
- •2.8.4Агрегирующие функции
- •2.7Поиск по подстрокам (like)
- •2.8Сортировка данных и другие методы выбора. Группировка данных
- •2.8.5Группировка данных
- •2.9Соединение таблиц и сложный анализ данных
- •2.9.1Соединение
- •2.9.2Внешнее соединение
- •2.9.3Операции над множествами (объединение, пересечение, разность)
- •2.10Структурированные запросы и подзапросы
- •2.10.1Подзапросы в предложении where
- •2.10.1.1Подзапросы, не возвращающие значений или возвращающие несколько значений
- •2.10.1.2Подзапросы, возвращающие единственное значение
- •2.10.1.3Подзапросы, выполняющие проверку на существование
- •2.10.2Подзапросы в предложении from
- •2.10.3Подзапросы в предложении select
- •3.1.3Ввод, удаление, и изменение значений полей
- •3.2Удаление строк из таблиц
- •3.3Изменение значений поля
- •3.4Использование подзапросов с командами модификации
- •4Создание таблиц
- •4.1Команда создания таблицы
- •4.2Создание индекса
- •4.3Удаление индексов
- •4.4 Изменение таблицы после создания
- •4.5Удаление таблиц
- •4.6Ограничение значений данных
- •4.6.1Ограничение таблиц
- •4.6.2Объявление ограничений
- •4.6.2.1Уникальность как ограничение столбца
- •4.6.2.2Уникальность как ограничение таблицы
- •4.6.2.3Ограничение первичных ключей
- •4.6.2.4Проверка значений полей
- •4.6.2.5Установка значений по умолчанию
2.8.5Группировка данных
Предложение GROUP BY неразрывно связано с агрегирующими функциями. Предложение GROUP BY разделяет таблицу на наборы, а агрегирующая функция вычисляет для каждого из них итоговое значение.
Пример:
SELECT SUM(Оклад) FROM СП_СЛ
Возвращает фонд заработной платы для ВСЕЙ организации.
SELECT Код лаборатории, SUM(Оклад) FROM СП_СЛ GROUP BY Код лаборатории
Возвращает фонд заработной платы для каждой лаборатории.
В большинстве диалектов SQL каждый элемент из списка GROUP BY должен обязательно присутствовать в списке выбора, то есть группировать можно только выбираемые элементы.
Использование предложения GROUP BY без агрегирующих функций напоминает использование предложения DISTINCT. Оно разделяет таблицу на группы и для каждой из них возвращает по одной строке.
Пример:
SELECT Код лаборатории FROM СП_СЛ GROUP BY Код лаборатории
SELECT DISTINCT Код лаборатории FROM СП_СЛ
Оба запроса возвращают аналогичный результат.
В самом общем смысле, предложение HAVING работает аналогично предложению WHERE, но применяется к группам. WHERE накладывает ограничения на строки, а HAVING – на группы. Как правило, предложение HAVING используется совместно GROUP BY.
Если запрос содержит предложения WHERE, GROUP BY, HAVING и агрегирующие функции, то он выполняется в следующей последовательности.
Предложение WHERE находит требуемые строки.
Предложение GROUP BY делит найденные строки на группы.
Когда группы составлены, вычисляются обобщающие значения для каждой группы.
Предложение HAVING проверяет результирующие строки всех групп и решает, следует ли включить их в окончательный результат.
Пример:
1. SELECT Код лаборатории, COUNT(*) FROM СП_СЛ GROUP BY Код лаборатории HAVING COUNT(*)>5
Выбирает только те лаборатории, в которых работает больше 5 сотрудников.
2. SELECT Код лаборатории, COUNT(*) FROM СП_СЛ GROUP BY Код лаборатории HAVING Код лаборатории LIKE ‘1%’
SELECT Код лаборатории, COUNT(*) FROM СП_СЛ WHERE Код лаборатории LIKE ‘1%’ GROUP BY Код лаборатории
Оба запроса возвращают лаборатории, имеющие код, начинающийся с «1», и количество служащих, работающих в этих лабораториях. Однако второй запрос более эффективен, так как строки, содержащие коды лабораторий, которые не начинаются с «1», будут удалены до группирования, а не после него, как это произойдет в первом случае.
2.9Соединение таблиц и сложный анализ данных
Теоретико-множественные операции – объединения, пересечения и разности – реализованы непосредственно в языке SQL.
SQL позволяет простым и естественным способом сочетать в одном запросе обращения к нескольким отношениям одновременно: достаточно перечислить наименование отношений в предложении FROM, после чего можно обращаться к их атрибутам в предложениях SELECT, WHERE. Соединение двух отношений определяется с помощью двух столбцов, которые называются связанными столбцами. Связанные столбцы должны содержать значения, которые можно сопоставить друг с другом.
2.9.1Соединение
Синтаксис операции соединения имеет следующий вид:
SELECT <Список выбора>
FROM Таблица1, Таблица2 [, Таблица3]
WHERE [Таблица1.]столбец <оператор соединения>
[Таблица2]столбец
Обычно в качестве оператора соединения используют оператор равенства.
Пример:
SELECT Наименование лаборатории, COUNT(СП_СЛ.Код лаборатории) FROM СП_СЛ, ЛАБ WHERE СП_СЛ.Код лаборатории=ЛАБ.Код лаборатории GROUP BY СЛ_СП.Код лаборатории
Возвращает наименование лаборатории и количество служащих, работающих в лаборатории.
Для создания соединения в синтаксисе SQL-92 предусмотрены ключевые слова JOIN, CROSS JOIN, NATURAL JOIN
SELECT <Список выбора>
FROM Таблица1 JOIN Таблица2
[ON [Таблица1.]столбец <оператор соединения> [Таблица2.]столбец
| USING (столбец)]
Пример:
SELECT Наименование лаборатории, COUNT(СП_СЛ.Код лаборатории) FROM СП_СЛ JOIN ЛАБ ON СП_СЛ.Код лаборатории=ЛАБ.Код лаборатории GROUP BY СЛ_СП.Код лаборатории
Если используется оператор CROSS JOIN, то связанные столбцы определяются в предложении WHERE (если предложение WHERE пропущено, то результатом соединения является декартово произведение)
Оператор NATURAL JOIN применяется, только если две таблицы имеют одну пару одинаковых столбцов. Соединение выполняется на основе этих столбцов, при этом предложения IN, USING или WHERE для соединения не нужны и не определяются.
Столбцы в <Списке выбора> при соединении будут включаться в результат в указанном порядке.
SELECT * SELECT [Таблица1.]*, [Таблица2.]*
Необдуманное использование таких операторов при соединении может привести к большей загрузке системы, чем это необходимо. При решении практических задач нужно тщательно выбирать столбы, участвующие в результате.
При соединении таблиц удобно использовать псевдонимы в списке таблиц.
