Лекции ПрБД, 2 курс 3 семестр (для ИВТ и т.п.) / ПрБД-лк9
.pdfРазделы SELECT и FROM являются обязательными, все другие разделы являются необязательными.
Выбрать все поля из таблицы Студент
SELECT Студенты.*
FROM Студенты;
Выбрать два поля из таблицы Студенты
SELECT NOM_ZACH, FIO FROM Студенты;
Декартово произведение таблиц Студенты и Экзамены
SELECT Студенты.*, Экзамены.* FROM Студенты, Экзамены;
При этом выбираются все поля из таблицы
– Предикаты сравнения (=, <>, >, >=, <, <=), которые имеют традиционный смысл.
Выбрать из таблицы Экзамен все поля для записей, где оценка 5:
SELECT Экзамен.* FROM Экзамен
WHERE Оценка = 5;
– Предикат BETWEEN A AND B – принимает значения между А и В.
Выбрать из таблицы Продажа все поля для записей, где поле Количество попадает в интервал от 10 до 50:
SELECT Продажа.* FROM Продажа
WHERE Количество between 10 and 50;
– Предикат вхождения в множество IN (множество) истинен тогда, когда сравниваемое значение входит в множество заданных значений.
Выбрать из таблицы Группы все поля для записей, где поле Шифр_группы имеет значение ИВТ-01, ИВТ-02, ИВТ-03:
SELECT Группы.* FROM Группы
WHERE Шифр_группы In (“ИВТ-01”, “ИВТ-02”, “ИВТ-03”);
– Предикат сравнения с образцом LIKE и NOT LIKE. Предикат LIKE требует задания шаблона, с которым сравнивается заданное значение, предикат истинен, если сравниваемое значение соответствует шаблону, и ложен в противном случае. Предикат NOT LIKE имеет противоположный смысл.
Шаблон может содержать % (* для Access) для обозначения любого
числа символов; _ (? для Access) для обозначения любого одного символа.
Выбрать из таблицы Студенты все поля для записей, где поле Фамилия начинается с буквы «С» или «М»:
SELECT Студенты.* FROM Студенты
WHERE Фамилия Like “С%” or Фамилия = Like “М%”;
– Предикат существования EXIST и несуществования NOT EXIST.
В условиях поиска могут быть использованы все рассмотренные предикаты.
Рассмотрим БД, которая моделирует сдачу сессии в некотором учебном заведении. Пусть она состоит из трех отношений R1, R2, R3, представленных таблицами R1, R2, R3 соответственно.
•R1 = (ФИО, Дисциплина, Оценка);
•R2 = (ФИО, Группа);
•R3 = (Группа, Дисциплина);
Приведем несколько примеров использования оператора SELECT.
Вывести список всех групп (без повторений), где должны пройти экзамены:
SELECT DISTINCT Группа FROM R3;
Результат
Найти студентов, пришедших на экзамен, но не сдавших его с указанием названия дисциплины:
SELECT ФИО, Дисциплина
FROM R1
WHERE Оценка Is null;
Вывести список всех студентов, которым надо сдавать экзамены с указанием названий дисциплин, по которым должны проводиться эти экзамены:
SELECT ФИО, Дисциплина
FROM R2, R3
WHERE R2.Группа = R3.Группа;
Результат
Оператор SELECT может содержать вычисляемые поля.
Для вычисляемого поля можно задать имя после слова
AS.
Вывести все поля из таблицы Продажа и добавить вычисляемое поле Стоимость_покупки:
SELECT П.*, Цена_за_единицу*Количество AS Стоимость_покупки FROM Продажа П;
Даны две таблицы Товары (Код, Название, Розничная_цена), Продажа (Чек, Код, Дата_продажи, Количество). Выбрать поля Название и Розничная_цена из таблицы Товары и поля Чек, Дата_продажи и Количество из таблицы Продажа. Добавить вычисляемое поле Стоимость_покупки.
SELECT Т.Название, Т.Розничная_цена, П.Чек, П.Дата_продажи, П.Количество, Т.Розничная_цена*П.Количество AS Стоимость_покупки
FROM Товары Т, Продажа П WHERE Т.Кода = П.Код;
Применение агрегатных функций и группировки
Агрегатные функции применяются подобно именам полей в операторе SELECT, но они используют имя поля как аргумент. С функциями SUM и AVG могут использоваться только числовые поля. С функциями COUNT, MAX, MIN могут использоваться как числовые, так и символьные поля. При использовании с символьными полями MAX и MIN будут транслировать их в эквивалент ASCII кода и обрабатывать в алфавитном порядке.
Например, можно вычислить количество студентов, сдавших экзамены по каждой дисциплине. Для этого надо выполнить запрос с группировкой по полю «Дисциплина» и вывести в качестве результата название дисциплины и количество строк в группе по данной дисциплине. Применение символа * в качестве аргумента функции COUNT означает подсчет всех строк в группе..
SELECT R1.Дисциплина, COUNT(*) FROM R1
GROUP BY R1.Дисциплина;
Результат
