Выборка информации из таблиц базы данных 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