- •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.10.1Подзапросы в предложении where
2.10.1.1Подзапросы, не возвращающие значений или возвращающие несколько значений
[NOT] IN, операторы сравнения с ключевыми словами ANY или ALL.
ALL |
Результат |
ANY |
Результат |
>ALL(1,2,3) |
>3 |
>ANY(1,2,3) |
>1 |
<ALL(1,2,3) |
<1 |
<ANY(1,2,3) |
<3 |
=ALL(1,2,3) |
=1 или =2 или =3 |
=ANY(1,2,3) |
=1 или =2 или =3 |
<>ALL(1,2,3) |
<>1 и <>2 и <>3 |
<>ANY(1,2,3) |
<>1 или <>2 или <>3 |
Пример:
Все сотрудники, имеющие зарплату большую, чем у любого из руководителей
SELECT Табельный номер, Фамилия, Имя, Отчество FROM СП_СЛ WHERE Оклад>ALL(SELECT Оклад FROM СП_СЛ, ЛАБ WHERE СП_СЛ.Табельный номер= ЛАБ.Код руководителя)
Все сотрудники, имеющие зарплату большую, чем у кого-нибудь из руководителей
SELECT Табельный номер, Фамилия, Имя, Отчество FROM СП_СЛ WHERE Оклад>ANY(SELECT Оклад FROM СП_СЛ, ЛАБ WHERE СП_СЛ.Табельный номер= ЛАБ.Код руководителя)
2.10.1.2Подзапросы, возвращающие единственное значение
Если запрос возвращает единственное значение, он может быть использован в качестве подзапроса, располагаемого в любом месте предложения WHERE, где допустимо задать константу или имя атрибута. В этом случае операндом выражения сравнения будет значение, возвращаемое подзапросом.
Использование обобщающих функций гарантирует возвращение единственного значения.
Пример:
Список всех сотрудников, имеющих оклады выше среднего по организации
SELECT Табельный номер, Фамилия, Имя, Отчество, Оклад FROM СП_СЛ WHERE Оклад>(SELECT AVG(Оклад) FROM СП_СЛ)
2.10.1.3Подзапросы, выполняющие проверку на существование
Если тот или иной запрос начинается с ключевого слова EXISTS, этот подзапрос функционирует как «тест на существование». Ключевое слово EXISTS в предложении WHERE выполняет проверку на существование данных, которые удовлетворяют критериям соответствующего подзапроса.
С помощью EXISTS выполняется проверка существования «пустого набора» строк. Если подзапрос возвращает хотя бы одну строку, этот результат оценивается как «истина» и результат выполнения EXISTS будет успешным.
Пример:
Список всех руководителей получавших премию
SELECT Код руководителя FROM ЛАБ WHERE EXISTS (SELECT * FROM ПР, ЛАБ WHERE Табельный номер= ЛАБ.Код руководителя)
Замечания к использованию ключевого слова EXISTS
Ключевому слову EXISTS не предшествует имя столбца.
Список выбора подзапроса, начинающегося с EXISTS почти всегда состоит из символа звездочка (*). Нет никакого смысла вводить имена столбцов, поскольку выполняется лишь тест на существование строк, которые удовлетворяют условиям подзапроса, которые указываются в предложении WHERE этого подзапроса.
Оператор NOT EXISTS отыскивает пустой набор.
2.10.2Подзапросы в предложении from
Если результат подзапроса должен быть источником данных для построения запроса, то подзапрос помещается в предложение FROM обычно с присвоением «новой» таблице псевдонима (alias).
Пример:
Список сотрудников с указанием объема премии, полученной ими
SELECT Табельный номер, S.ПР_Сумма FROM СП_СЛ, (SELECT Табельный номер, SUM(Размер премии) as ПР_Сумма FROM ПР GROUP BY Табельный номер) S WHERE СП_СЛ.Табельный номер=S.Табельный номер
