Изучаем sql


SELECT c.cust_id, c.fed_id



Pdf көрінісі
бет194/261
Дата28.07.2022
өлшемі1,6 Mb.
#147825
1   ...   190   191   192   193   194   195   196   197   ...   261
Байланысты:
Изучаем SQL ( PDFDrive )

SELECT c.cust_id, c.fed_id,
> CASE
> WHEN c.cust_type_cd = 'I' THEN
> (SELECT CONCAT(i.fname, ' ', i.lname)
> FROM individual i
> WHERE i.cust_id = c.cust_id)
> WHEN c.cust_type_cd = 'B' THEN
> (SELECT b.name
> FROM business b
> WHERE b.cust_id = c.cust_id)
> ELSE 'Unknown'
> END name
> FROM customer c;
++++
| cust_id | fed_id | name |
++++
| 1 | 111111111 | James Hadley |
| 2 | 222222222 | Susan Tingley |
| 3 | 333333333 | Frank Tucker |
| 4 | 444444444 | John Hayward |
| 5 | 555555555 | Charles Frasier |
| 6 | 666666666 | John Spencer |
| 7 | 777777777 | Margaret Young |
| 8 | 888888888 | Louis Blake |
| 9 | 999999999 | Richard Farley |
| 10 | 041111111 | Chilton Engineering |


220
Глава 11. Условная логика
| 11 | 042222222 | Northeast Cooling Inc. |
| 12 | 043333333 | Superior Auto Body |
| 13 | 044444444 | AAA Insurance Inc. |
++++
13 rows in set (0.01 sec)
В этом варианте запроса в блок 
from
включена только таблица 
customer
и соответствующее имя для каждого клиента получается с помощью
связанного подзапроса. Эта версия мне нравится больше той, где при
меняются внешние соединения, поскольку здесь сервер считывает
данные таблицы 
individual
и 
business
только в случае необходимости,
а не соединяет все три таблицы.
Простые выражения case
Простое выражение 
case
 
(
simple case expression
) очень похоже на вы
ражение 
case
с перебором вариантов, но несколько менее функцио
нально. Вот его синтаксис:
CASE V0
WHEN V1 THEN E1
WHEN V2 THEN E2
...
WHEN VN THEN EN
[ELSE ED]
END
В этом описании 
V0
представляет значение, а символы 
V1

V2
, …, 
VN

значения, сравниваемые с 
V0
. Символы 
E1

E2
, …, 
EN
представляют вы
ражения, возвращаемые выражением case, а 
ED
– выражение, которое
должно быть возвращено, если ни одно из значений набора 
V1

V2
, …, 
VN
не соответствует значению 
V0
.
Вот пример простого выражения 
case
:
CASE customer.cust_type_cd
WHEN 'I' THEN
(SELECT CONCAT(i.fname, ' ', i.lname)
FROM individual I
WHERE i.cust_id = customer.cust_id)
WHEN 'B' THEN
(SELECT b.name
FROM business b
WHERE b.cust_id = customer.cust_id)
ELSE 'Unknown Customer Type'
END
Простые выражения 
case
менее функциональны, чем выражения 
case
с перебором вариантов, потому что в них нельзя задать собственные ус
ловия; в них просто используются условия равенства. Чтобы понять,
что имеется в виду, рассмотрим выражение 
case
с перебором вариантов,
логика которого аналогична предыдущему простому выражению 
case
.


Примеры выражений case
221
CASE
WHEN customer.cust_type_cd = 'I' THEN
(SELECT CONCAT(i.fname, ' ', i.lname)
FROM individual I
WHERE i.cust_id = customer.cust_id)
WHEN customer.cust_type_cd = 'B' THEN
(SELECT b.name
FROM business b
WHERE b.cust_id = customer.cust_id)
ELSE 'Unknown Customer Type'
END
Выражения 
case
с перебором вариантов позволяют создавать условия
вхождения в диапазон, условия неравенства и составные условия, ис
пользующие 
and
/
or
/
not
, поэтому я бы рекомендовал применять выраже
ния 
case
с перебором вариантов во всех случаях, кроме самых простых.


Достарыңызбен бөлісу:
1   ...   190   191   192   193   194   195   196   197   ...   261




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет