Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_01.doc
Скачиваний:
20
Добавлен:
10.04.2015
Размер:
101.38 Кб
Скачать

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 и выполнить следующие запросы:

  1. Все сведения о книгах.

  2. Все сведения об изданиях книг.

  3. Код и название всех книг.

  4. ISBN, номер издания, дата издания и тип обложки для всех изданий.

  5. Неповторяющиеся коды издательств, выпускавших книги.

  6. Неповторяющиеся коды тем, по которым написаны книги.

  7. Для каждого кода ISBN получить прибыль магазина в случае продажи всех имеющихся в наличии экземпляров.

  8. Названия всех книг, упорядоченные по алфавиту.

  9. Фамилии и имена всех покупателей, отсортированные по алфавиту (если есть однофамильцы, то они должны быть отсортированы по именам).

  10. Список всех ISBN с указанием розничной цены, упорядоченный от самых дорогих к самым дешевым.

  11. Код ISBN и затраты магазина на закупку соответствующих имеющихся в наличии книг. Упорядочить по стоимости закупки (всех имеющихся экземпляров).

  12. Код ISBN, номер издания и дата издания для всех книг в таком порядке, чтобы сначала шли книги, издававшиеся наибольшее количество раз. Книги с одним и тем же количеством изданий упорядочить по дате издания.

  13. Код ISBN и имеющееся количество для десяти книг, в наибольшем количестве имеющихся на складе.

  14. Все данные о последних пяти покупках.

  15. Все данные о первых семи покупках, не считая трех самых первых (т.е. следующие семь после первых трех).

  16. Самая дорогая цена (розничная) книги.

  17. Самая малая разница между ценой закупки и ценой продажи.

  18. Код ISBN и название типа обложки («твердая» / «мягкая») для всех изданий. Упорядочить по названию типа обложки.

  19. Код ISBN, цена закупки, цена продажи, величина наценки, процент наценки и класс всех книг. Если цена продажи более, чем на 10 % превышает цену закупки, то класс – «VIP», иначе – «эконом». Упорядочить по убыванию процента наценки.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]