Выбрать главу

Выборка информации из таблиц базы данных 39

В следующем примере NVL() возвращает строку ‘Unknown phone number’

(номер телефона неизвестен) в случае, если столбец phone содержит пустое

значение:

□ SELECT customer_id, first_name, last_name,

NVL(phone, ‘Unknown phone number’) AS PHONE_NUMBER

FROM customers;

CUSTOMER ID FIRST NAME

John

Cynthia

Steve

Gail

Doreen Blue

LAST_NAME

Brown

Green

White

Black

PHONEJIUMBER

800-555-1211

800-555-1212

800-555-1213

800-555-1214

Unknown phone number

Вы также можете использовать NVL() для преобразования пустых чисел

и дат. В следующем примере NVL() возвращает дату 01-JAN-2000 в случае,

если dob содержит пустое значение:

П SELECT customer_id, first_name, last_name, NVL(dob, '01-JAN-2000') AS

DOB - ~

FROM customers;

CUST0MER_ID FIRST_NAME LAST_NAME DOB

1 John Brown 01-Jan-65

2 Cynthia Green 05-FEB-68

3 Steve White 16-MAR-71

4 Gail Black 01-JAN-00

5 Doreen Blue 20-MAY-70

Обратите внимание, что в результате дата рождения (dob) покупателя

№ 4 отображается как 01-JAN-00.

Вывод на экран различающихся строк

Предположим, что вам нужно узнать, кто из покупателей к настоящему

времени совершал покупки в нашем воображаемом магазине. Эту информацию

можно получить с помощью следующего запроса, который отбирает

значения столбца customer_id из таблицы purchases:

□ SELECT customer_id

FROM purchases;

CUST0MER_ID

1

23

4

1

2

40 Глава 2

34

3

Столбец customer_id содержит идентификаторы клиентов, которые совершали

покупки. Как видно из примера, некоторые клиенты сделали более

одной покупки и содержатся в списке дважды. Было бы здорово исключить

из списка строки, которые содержат повторяющиеся идентификаторы,

не правда ли? Вы можете это сделать, используя ключевое слово

DISTINCT. В следующем примере ключевое слово DISTINCT используется для

исключения вывода повторяющихся строк:

□ SELECT DISTINCT purchased_by

FROM purchases;

PURCHASED_BY

12

3

4 - -

По этому списку можно легко понять, что покупки сделали клиенты с

номерами 1, 2, 3 и 4, повторяющиеся строки не печатаются.

Сравнение значений

В приведенной ниже таблице перечислены операторы, которые вы можете

использовать для сравнения значений.

О п е р а т о р О п и с а н и е

= Равно

<> или ! = Не равно

< Меньше чем

> Больше чем

<= Меньше или равно

>= Больше или равно

ANY Сравнивает одно значение с любым значением из списка

SOME Идентично оператору ANY; следует использовать ANY вместо

SOME, поскольку ANY является более широко используемым

и легкочитаемым

ALL Сравнивает одно значение со всеми значениями из списка

Следующий запрос использует во фразе WHERE оператор неравенства

(<>)для отбора строк таблицы customers, в которых customer_id не

равен 2:

Выборка информации из таблиц базы данных 41

□ SELECT *

FROM customers

WHERE customer_id <> 2;

CUSTOMER_ID FIRST_NAME LAST_NAME DOB PHONE

1 John

3 Steve

4 Gail

Brown

White

Black

Blue

01-Jan-65 800-555-1211

16-MAR-71 800-555-1213

800-555-1214

5 Doreen 20-MAY-70

В следующем примере из таблицы products отбираются столбцы

product_id и name для строк, в которых product_id больше 8, для чего используется

оператор >:

□ SELECT product_id, name

FROM products

WHERE product_id > 8;

PR0DUCT_ID NAME

В следующем примере используется псевдостолбец R0WNUM и оператор

<= для получения первых трёх строк из таблицы products:

□ SELECT R0WNUM, product_id, name

FROM products

WHERE R0WNUM <=3;

R0WNUM R0DUCT_ID AME

1 1 Modern Science

2 2 Chemistry

3 3 Supernova

Оператор ANY используется во фразе WHERE для сравнения значения

с любым значением из указанного списка. Перед оператором ANY необходимо

поместить один из операторов =, <>, <, >, <= или >=. В приведенном

ниже запросе оператор ANY используется для получения из таблицы

customers строк, в которых значение столбца customer_id больше любого

из значений 2, 3 или 4:

П SELECT *

FROM customers

WHERE customer_id > ANY (2, 3, 4);

CUST0MER_ID FIRST_NAME LAST_NAME DOB PHONE

9 Classical Music

10 Pop 3

11 Creative Yell

12 My Front Line

3 Steve White 16-MAR-71 800-555-1213

4 Gail Black 800-555-1214

5 Doreen Blue 20-MAY-70

42 Глава 2

Оператор ALL используется во фразе WHERE для сравнения значения со

всеми значениями из списка. Перед оператором ALL необходимо поместить

один из операторов =, <>, <, >, <= или >=. В приведенном ниже запросе

оператор ALL используется для получения из таблицы customers

строк, в которых значение столбца customer_id больше всех значений 2, 3

и 4:

□ SELECT *

FROM customers

WHERE customer_id > ALL (2, 3, 4);

CUSTOMER_ID FIRSTJIAME LAST_NAME DOB PHONE