loading..
Русский    English
20:05
листать

Оператор CASE стр. 2

Оператор CASE может быть использован в одной из двух синтаксических форм записи:

1-я форма:

  1. CASE <проверяемое выражение>
  2. WHEN <сравниваемое выражение 1>
  3. THEN <возвращаемое значение 1>
  4. WHEN <сравниваемое выражение N>
  5. THEN <возвращаемое значение N>
  6. [ELSE <возвращаемое значение>]
  7. END

2-я форма:

  1. CASE
  2. WHEN <предикат 1>
  3. THEN <возвращаемое значение 1>
  4. WHEN <предикат N>
  5. THEN <возвращаемое значение N>
  6. [ELSE <возвращаемое значение>]
  7. END

Все предложения WHEN должны иметь одинаковую синтаксическую форму, то есть нельзя смешивать первую и вторую формы. При использовании первой синтаксической формы условие WHEN удовлетворяется, как только значение проверяемого выражения станет равным значению выражения, указанного в предложении WHEN. При использовании второй синтаксической формы условие WHEN удовлетворяется, как только предикат принимает значение TRUE. При удовлетворении условия оператор CASE возвращает значение, указанное в соответствующем предложении THEN. Если ни одно из условий WHEN не выполнилось, то будет использовано значение, указанное в предложении ELSE. При отсутствии ELSE, будет возвращено NULL-значение. Если удовлетворены несколько условий, то будет возвращено значение предложения THEN первого из них, так как остальные просто не будут проверяться.

В приведенном выше примере была применена вторая форма оператора CASE.

Заметим, что для проверки на NULL стандарт предлагает более короткую форму — оператор COALESCE. Он имеет произвольное число параметров и возвращает значение первого из них, отличного от NULL. Для двух параметров оператор COALESCE(A, B) эквивалентен следующему оператору CASE:

  1. CASE
  2. WHEN A IS NOT NULL
  3. THEN A
  4. ELSE B
  5. END

Решение рассмотренного выше примера при использовании оператора COALESCE можно переписать следующим образом:

Консоль
Выполнить
  1. SELECT DISTINCT Product.model,
  2. COALESCE(CAST(price AS CHAR(20)),'Нет в наличии') price
  3. FROM Product LEFT JOIN
  4. PC ON Product.model = PC.model
  5. WHERE Product.type = 'pc';

Применение первой синтаксической формы оператора CASE можно продемонстрировать на следующем примере.

Пример 5.10.1

Вывести все имеющиеся модели ПК с указанием цены. Отметить самые дорогие и самые дешевые модели.

Консоль
Выполнить
  1. SELECT DISTINCT model, price,
  2. CASE price
  3. WHEN (SELECT MAX(price)
  4. FROM PC
  5. )
  6. THEN 'Самый дорогой'
  7. WHEN (SELECT MIN(price)
  8. FROM PC
  9. )
  10. THEN 'Самый дешевый'
  11. ELSE 'Средняя цена'
  12. END comment
  13. FROM PC
  14. WHERE price IS NOT NULL
  15. ORDER BY price;

В результате выполнения запроса получим:

model price comment
1232 350.0 Самый дешевый
1260 350.0 Самый дешевый
1232 400.0 Средняя цена
1232 600.0 Средняя цена
1233 600.0 Средняя цена
1121 850.0 Средняя цена
1233 950.0 Средняя цена
1233 980.0 Самый дорогой

Оператор CASE может быть использован не только в предложении SELECT. Здесь вы можете найти другие примеры его использования.

Следующая страница

Рекомендуемые упражнения: 52, 59, 64, 65, 66, 68, 69, 74, 75, 83, 84, 869192, 93, 99, 110, 111, 113, 118, 126, 128, 130, 131, 132

Страницы: 1 2 3 4
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INFORMATION_SCHEMA INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker Больше тэгов
Учебник обновлялся
несколько дней назад
обмен с nem . Потолочные балки как элементы декора
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.