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

в убывающем порядке (от больших значений к меньшим), можно использовать

ключевое слово DESC. Кроме того, можно использовать ключевое

слово ASC для явного указания направления сортировки в возрастающем

порядке - как уже было сказано, оно является значением по

48 Гпава 2

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

сортировки.

В следующем примере фраза ORDER BY используется для сортировки значений

столбца first_name таблицы customers в возрастающем порядке, сопровождаемой

сортировкой по значениям столбца last_name в убывающем

порядке:

□ SELECT *

FROM customers

ORDER BY first_name ASC, last_name DESC;

JD FIRST_NAME LAST_NAME DOB PHONE

2 Cynthia Green 05-FEB-68 800-555-1212

5 Doreen Blue 20-MAY-70

4 Gail Black 800-555-1214

1 John Brown 01-JAN-65 800-555-1211

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

Во фразе ORDER BY можно также вместо имени столбца использовать его

номер: 1 означает первый столбец из числа выбранных, 2 - второй и т. д.

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

(customer_id):

□ SELECT customer_id, first_name, last_name

FROM customers

ORDER BY 1;

CUSTOMER_ID FIRST_NAME LAST_NAME

1 John Brown

2 Cynthia Green

3 Steve White

4 Gail Black

5 Doreen Blue

Поскольку после ключевого слова SELECT первым следует столбец

customer_id, именно он будет использован для сортировки.

Выполнение операторов SELECT, использующих

две таблицы

В большинстве схем базы данных насчитывается более одной таблицы,

причем в каждой из этих таблиц хранятся различные данные. Например,

в схеме store есть таблицы, которые содержат информацию о покупателях,

продуктах, сотрудниках и т.п. До сих пор во всех примерах мы использовали

только одну таблицу базы данных магазина. В реальной жизни часто

нужно получать данные сразу из нескольких таблиц; например, может

понадобиться название товара и название типа этого товара. В этом разделе

рассказано, как выполнять запросы для двух таблиц; позже вы увидите

запросы, которые используют более двух таблиц.

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

Рассмотрим пример, в котором вы хотите получить название продукта

№3 и тип этого продукта. Название товара хранится в столбце name таблицы

products, а название типа товара - в столбце name таблицы product_types.

Таблицы products и product_types связаны друг с другом отношением внешнего

ключа, роль которого выполняет столбец product_type_id. Столбец

product_type_id (внешний ключ) таблицы products указывает на столбец

product_type_id (первичный ключ) таблицы product_types.

Следующий запрос выводит значения столбцов name и product_type_id

из таблицы products для товара №3:

□ SELECT name, product_type_id

FROM products

WHERE product_id = 3;

NAME PRODUCT_TYPE_ID

Supernova 2

Следующий запрос выводит значение столбца name из таблицы product_

types для product_type_id, равного 2:

□ SELECT name

FROM product_types

WHERE product_type_id = 2;

NAME

Video

Отсюда становится понятно, что товар № 3 - видео. До сих пор не было

ничего нового, но ведь на самом деле вы хотите получить название товара

и тип товара при помощи одного запроса. Это делается при помощи соединения

двух таблиц в запросе. Чтобы соединить в запросе две таблицы, необходимо

включить их обе во фразу FROM и указать связанные столбцы во

фразе WHERE.

В нашем примере фраза FROM приобретает вид

□ FROM products, product_types

А фраза WHERE приобретает вид

П WHERE products.product_type_id = product_types.product_type_id

AND products.produc t_id = 3;

Соединение является первым условием в выражении WHERE (products.

product_type_id = product_types. product_type_id); обычно столбцы, которые

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

таблицы и внешний ключ другой. Поскольку в условии соединения используется

оператор равенства (=), такое соединение называется равносвязанным

(equijoin). Второе условие в выражении WHERE (products. product_id = 3)

даёт товар №3, то есть тот самый товар, который нас интересует.

Обратите внимание, что кроме названий столбцов во фразе WHERE указаны

также названия таблиц. Это необходимо делать в связи с тем, что стол50

Глава 2

бец product_type_id существует как в таблице products, так и в таблице

product_types, и вам нужно указать базе данных, из какой таблицы нужно

использовать столбец. Если бы столбцы имели разные имена, вы могли бы

опустить названия таблиц, однако вам следует всегда указывать названия

таблиц, чтобы было понятно, откуда брать используемые столбцы.

Выражение SELECT для этого запроса имеет вид.

□ SELECT products.name, productjtypes.name