Использование оператора INNER JOIN

Синтаксис оператора SELECT для выполнения операции внутреннего объединения имеет вид:

SELECT [DISTINCT] [<table1>.]<column_name>, [<table2>.]<column_name> [,...]
FROM <table1> [INNER] JOIN <table2> [таблица_1.]
ON <column_name><join_condition>...][таблица_2.]<column_name>

Оператор SELECT здесь точно такой же, как и при использовании предложения WHERE, но предложение FROM другое. Здесь отношение между двумя таблицами является частью предложения FROM, указанного как INNER JOIN. При использовании такого синтаксиса предложение объединения указывается с использованием специального предложения ON вместо предложения WHERE. Фактическое предложение, передаваемое в ON, то же самое, которое передавалось бы в предложение WHERE*.

Ниже представлены запросы из предыдущего раздела, написанные с применением INNER JOIN.

IDevice IconПримеры
Получить список клиентов из Сиэтла, с указанием номеров действующих договоров.

SQL:
SELECT contract_id, lastname, name
FROM tbl_clients
JOIN tbl_contract ON tbl_clients.client_id = tbl_contract.client_id
WHERE retire_date IS NULL AND region='Seattle'


Подсчитать количество договоров, заключенных на пользование каждой из предлагаемых услуг. Полученный список отсортировать по названию услуги.

SQL:
SELECT service, СOUNT(contract_id)
ROM tbl_service
INNER JOIN tbl_contract ON tbl_service.service_id = tbl_contract.service_id
WHERE retire_date IS NULL
GROUP BY service


Получить список клиентов и услуг, с указанием номеров договоров. Список отсортировать по фамилиям клиентов.

SQL:
SELECT lastname, name, contract_id, service
FROM tbl_service
INNER JOIN tbl_contract ON tbl_service.service_id = tbl_contract.service_id
INNER JOIN tbl_clients ON tbl_contract.client_id=tbl_clients.client_id
WHERE retire_date IS NULL ORDER BY lastname


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

SQL:
SELECT lastname, name, SUM(price)
FROM tbl_service
INNER JOIN tbl_contract ON tbl_service.service_id = tbl_contract.service_id
INNER JOIN tbl_clients ON tbl_contract.client_id=tbl_clients.client_id
WHERE retire_date IS NULL
GROUP BY lastname ORDER BY lastname



* - Согласно спецификации ANSI, для создания объединений предпочтительнее использовать синтаксис INNER JOIN