- •Практическая работа
- •Создание запроса
- •Что такое запрос?
- •Команда select
- •Выбирайте всегда самый простой способ
- •Просмотр только определенного столбца таблицы
- •Переупорядочение столбца
- •Удаление избыточных данных
- •Квалифицированный выбор при использовании предложений
- •Реляционные операторы
- •Булевы операторы
- •Оператор in
- •Оператор between
- •Оператор like
- •Null оператор
- •Использование not со специальными операторами
- •Практическая часть.
- •Контрольные вопросы
- •Практическая работа
- •Теоретическая часть Что такое агрегатные функции?
- •Как использовать агрегатные функции?
- •Специальные атрибуты count
- •Использование count со строками, а не значениями
- •Включение дубликатов
- •Агрегаты построенные на скалярном выражении
- •Предложение group by
- •Предложение having
- •Не делайте вложенных агрегатов
- •Формирование выводов запросов Скалярное выражение с помощью выбранных полей
- •Помещение текста в вашем выводе запроса
- •Упорядочение вывода полей
- •Упорядочение с помощью многочисленных столбцов
- •Упорядочение агрегатных групп
- •Упорядочение с помощью оператора null
- •Запрашивание многочисленных таблиц также как одной Объединение таблиц
- •Имена таблиц и столбцов
- •Создание объединения
- •Объединение таблиц через справочную целостность
- •Объединения таблиц по равенству значений в столбцах и другие виды объединений
- •Объединение более двух таблиц
- •Практическая часть
- •Контрольные вопросы:
- •Практическая работа
- •Теоретическая часть Объединение таблицы с собой Как делать объединение таблицы с собой?
- •Псевдонимы
- •Устранение избыточности
- •Проверка ошибок
- •Больше псевдонимов
- •Еще больше комплексных объединений
- •Вставка одного запроса внутрь другого Как работает подзапрос?
- •Значения, которые могут выдавать подзапросы
- •Distinct с подзапросами
- •Предикаты с подзапросами являются необратимыми
- •Использование агрегатных функций в подзапросах
- •Использование подзапросов которые выдают много строк с помощью оператора in
- •Подзапросы выбирают одиночные столбцы
- •Использование выражений в подзапросах
- •Подзапросы в предложении having
- •Практическая часть
- •Контрольные вопросы:
- •Практическая работа
- •Теоретическая и практическая часть Использование оператора exists
- •Как работает exists?
- •Выбор столбцов с помощью exists
- •Комбинация из exists и объединения
- •Использование not exists
- •Exists и агрегаты
- •Более удачный пример подзапроса
- •Использование операторов any, all, и some
- •Специальные операторы any или some
- •Использование операторов in или exists вместо оператора any
- •Как any может стать неоднозначным
- •Специальный оператор all
- •Равенства и неравенства
- •Правильное понимание any и all
- •Как any, all, и exist поступают с отсутствующими и неизвестными данными
- •Когда подзапрос возвращается пустым
- •Any и all вместо exists с пустым указателем (null)
- •Использование count вместо exists
- •Использование предложения union Объединение многочисленных запросов в один
- •Когда вы можете делать объединение между запросами ?
- •Union и устранение дубликатов
- •Использование строк и выражений с union
- •Использование union с order by
- •Внешнее объединение
- •Практическая часть
- •Контрольные вопросы:
- •Литература
Объединения таблиц по равенству значений в столбцах и другие виды объединений
Объединения которые используют предикаты основанные на равенствах называются - объединениями по равенству. Все наши примеры до настоящего времени, относились именно к этой категории, потому что все условия в предложениях WHERE базировались на математических выражениях использующих знак равно (=). Строки 'city = 'London' и 'Salespeople.snum = Orders.snum ' - примеры таких типов равенств найденных в предикатах. Объединения по равенству - это вероятно наиболее общий вид объединения, но имеются и другие. Вы можете, фактически, использовать любой из реляционных операторов в объединении. Здесь показан пример другого вида объединения (вывод показывается в Рисунке 19 ):
SELECT sname, cname FROM Salespeople, Customers WHERE sname < cname AND rating < 200;
Рисунок 19 Объединение основанное на неравенстве
Эта команда не часто бывает полезна. Она воспроизводит все комбинации имени продавца и имени заказчика так, что первый предшествует последнему в алфавитном порядке, а последний имеет оценку меньше чем 200. Обычно, вы не создаете сложных связей подобно этой, и, по этой причине, вы вероятно будете строить наиболее общие объединения по равенству, но вы должны хорошо знать и другие возможности.
Объединение более двух таблиц
Вы можете также создавать запросы объединяющие более двух таблиц. Предположим, что мы хотим найти все Продаж заказчиков не находящихся в тех городах, где находятся их продавцы. Для этого необходимо связать все три наши типовые таблицы (вывод показывается в Рисунке 20):
SELECT onum, cname, Orders.cnum, Orders.snum FROM Salespeople, Customers,Orders WHERE Customers.city < > Salespeople.city AND Orders.cnum = Customers.cnum AND Orders.snum = Salespeople.snum;
Рисунок 20 Объединение трех таблиц
Хотя эта команда выглядит скорее как комплексная, вы можете следовать за логикой, просто проверяя - что заказчики не размещены в тех городах где размещены их продавцы (совпадение двух snum полей), и что перечисленные Продажи - выполнены с помощью этих заказчиков (совпадение Продажи с полями cnum и snum в таблице Продажи ).
Практическая часть
Напишите запрос который сосчитал бы все суммы приобретений на 3 Октября.
Напишите запрос который сосчитал бы число различных не-NULL значений поля city в таблице Заказчиков.
Напишите запрос который выбрал бы наименьшую сумму для каждого заказчика.
Напишите запрос который бы выбирал заказчиков в алфавитном порядке, чьи имена начинаются с буквы G.
Напишите запрос который выбрал бы высшую оценку в каждом городе.
Напишите запрос который сосчитал бы число заказчиков регистрирующих каждый день свои Продажи. (Если продавец имел более одного порядка в данный день, он должен учитываться только один раз.)
Предположим что каждый продавец имеет 12% комиссионных. Напишите запрос к таблице Продажи который мог бы вывести номер продажи, номер продавца, и сумму комиссионных продавца.
Напишите запрос к таблице Заказчиков который мог бы найти наивысший рейтинг в каждом городе. Вывод должен быть в такой форме:
В городе (city), наивысший рейтинг: (rating).
Напишите запрос который выводил бы список заказчиков в нисходящем порядке. Вывод поля оценки (rating) должден сопровождаться именем закзчика и его номером.
Напишите запрос который бы выводил общие Продажи на каждый день и помещал результаты в нисходящем порядке.
Напишите запрос который бы вывел список номеров Продаж сопровождающихся именем заказчика который создавал эти Продажи.
Напишите запрос который бы выдавал имя продавца и заказчика для каждой продажи после номера Продажи.
Напишите запрос который бы выводил всех заказчиков обслуживаемых продавцом с комиссионными выше 12% . Выведите имя заказчика, имя продавца, и ставку комиссионных продавца.
Напишите запрос который вычислил бы сумму комиссионных продавца для каждий продажи заказчика с оценкой выше 100.
