- •1. Простая выборка данных
- •1.1. Структура оператораSelect
- •1.2. Форма оператора selecTдля простой выборки данных
- •1.3. Сортировка записей
- •1.4. Выбор интервалов записей
- •1.5. Условные выражения с операторомCase
- •1.5.1. ОператорCasEсо значениями
- •1.5.2. Оператор casEс условием поиска
- •Лабораторная работа 1
1.5. Условные выражения с операторомCase
В обычных языках программирования имеются операторы условного перехода, которые позволяют управлять вычислительным процессом. В языке SQL таким оператором является CASE. Этот оператор возвращает значение и, следовательно, может использоваться в выражениях. Он имеет две основные формы.
1.5.1. ОператорCasEсо значениями
Оператор CASE со значениями имеет следующий синтаксис:
CASE проверяемое_значение
WHEN значение1 THEN результат1
WHEN значение2 THEN результат2
...
WHEN значениеN THEN результатN
ELSE результатX
END
В случае, когда проверяемое_значение равно значение1, оператор CASE возвращает значение результат1, указанное после ключевого слова THEN. В противном случае проверяемое_значение сравнивается с значение2, и если они равны, то возвращается значение результат2. В противном случае проверяемое_значение сравнивается со следующим значением, указанным после ключевого слова WHEN и т.д. Если проверяемое_значение не равно ни одному из таких значений, то возвращается значение результатХ, указанное после ключевого слова ELSE.
Ключевое слово ELSE не является обязательным. Если оно отсутствует и ни одно из значений, подлежащих сравнению, не равно проверяемому значению, то оператор CASE возвращает NULL.
Например, вместо номера издания в виде числа выведем номер издания в виде текстовой строки:
SELECT isbn,
CASE edition
WHEN 1 THEN 'first'
WHEN 2 THEN 'second'
WHEN 3 THEN 'third'
ELSE 'large then 3'
END AS edition_num
FROM editions;
1.5.2. Оператор casEс условием поиска
Вторая форма оператора CASE предполагает его использование при поиске в таблице тех записей, которые удовлетворяют определенному условию:
CASE
WHEN условие1 THEN результат1
WHEN условие2 THEN результат2
...
WHEN условиеN THEN результатN
ELSE результатX
END
Оператор CASE проверяет, истинно ли условие1 для первой записи в таблице. Если да, то CASE возвращает значение результат1. В противном случае для данной записи проверяется условие2. Если оно истинно, то возвращается значение результат2 и т.д. Если ни одно из условий не выполняется, то возвращается значение результатХ, указанное после ключевого слова ELSE.
Ключевое слово ELSE не является обязательным. Если оно отсутствует и ни одно из условий не выполняется, оператор CASE возвращает NULL. После того как оператор, содержащий CASE, выполнится для первой записи, происходит переход к следующей записи. Так продолжается до тех пор, пока не будет обработан весь набор записей.
Например, вместо номера издания в виде числа выведем номер издания в виде текстовой строки:
SELECT isbn,
CASE
WHEN edition = 1 THEN 'first'
WHEN edition = 2 THEN 'second'
WHEN edition = 3 THEN 'third'
ELSE 'large then 3'
END AS edition_num
FROM editions;
Лабораторная работа 1
Подключиться к базе данных booktown и выполнить следующие запросы:
Все сведения о книгах.
Все сведения об изданиях книг.
Код и название всех книг.
ISBN, номер издания, дата издания и тип обложки для всех изданий.
Неповторяющиеся коды издательств, выпускавших книги.
Неповторяющиеся коды тем, по которым написаны книги.
Для каждого кода ISBN получить прибыль магазина в случае продажи всех имеющихся в наличии экземпляров.
Названия всех книг, упорядоченные по алфавиту.
Фамилии и имена всех покупателей, отсортированные по алфавиту (если есть однофамильцы, то они должны быть отсортированы по именам).
Список всех ISBN с указанием розничной цены, упорядоченный от самых дорогих к самым дешевым.
Код ISBN и затраты магазина на закупку соответствующих имеющихся в наличии книг. Упорядочить по стоимости закупки (всех имеющихся экземпляров).
Код ISBN, номер издания и дата издания для всех книг в таком порядке, чтобы сначала шли книги, издававшиеся наибольшее количество раз. Книги с одним и тем же количеством изданий упорядочить по дате издания.
Код ISBN и имеющееся количество для десяти книг, в наибольшем количестве имеющихся на складе.
Все данные о последних пяти покупках.
Все данные о первых семи покупках, не считая трех самых первых (т.е. следующие семь после первых трех).
Самая дорогая цена (розничная) книги.
Самая малая разница между ценой закупки и ценой продажи.
Код ISBN и название типа обложки («твердая» / «мягкая») для всех изданий. Упорядочить по названию типа обложки.
Код ISBN, цена закупки, цена продажи, величина наценки, процент наценки и класс всех книг. Если цена продажи более, чем на 10 % превышает цену закупки, то класс – «VIP», иначе – «эконом». Упорядочить по убыванию процента наценки.