Использование предложения WHERE
- поместить имя одной или нескольких таблиц в список предложения FROM;
- добавить условия в предложение WHERE, на основе которых будет выполняться объединение
В общих чертах, синтаксис подобной операции объединения имеет следующий вид:
SELECT [DISTINCT]
[<table1>.]<column_name>,
[<table2>.]<column_name> [,...]
FROM <table1>, <table2>,
[<table3>,...]
WHERE [table1.]<column> <join_condition>
[table2.]<column>
В списке таблиц предложения FROM по меньшей мере должно содержаться две таблицы, а столбцы в предложении WHERE должны быть совместимыми для объединения. Если столбцы, по которым выполняется объединение, имеют одинаковые имена, то в списке выбора и в предложении WHERE нужно указать соответствующие им таблицы.
Обычно объединение основывается на равенстве или совпадении значений в объединяемых столбцах. Однако кроме оператора равенства (=) для задания условия объединения (<join_condition>) могут использоваться следующие логические операторы: больше чем(>), больше или равно(>=), меньше чем(<), меньше или равно(<=), (!=) не равно.
SQL:
SELECT
contract_id, lastname, name
FROM tbl_clients, tbl_contract
WHERE
tbl_clients.client_id = tbl_contract.client_id AND retire_date IS NULL
AND region='Seattle'
В представленном примере условием объединение является равенство clients.client_id = tbl_contract.client_id. Кроме этого, для записей должны выполнятся еще два условия: retire_date IS NULL (определяет действующий договор) и region='Seattle' (определяет место проживания клиента). В случае, если у клиента нет действующего договора, его данные не будут отображаться в результирующей таблице.
Подсчитать количество договоров, заключенных на пользование каждой из предлагаемых услуг. Полученный список отсортировать по названию услуги.
SQL:
SELECT service, Count(contract_id)
FROM `tbl_service`, `tbl_contract`
WHERE tbl_service.service_id = tbl_contract.service_id AND retire_date
IS NULL
GROUP BY service
ORDER BY service
Таблица tbl_contracts в базе данных db_telco хорошо иллюстрирует ситуацию, когда может потребоваться объединение более двух таблиц. Для получения полной информации о клиентах и услугах, которыми он и пользуются, необходимо объединить три таблицы.
Получить список клиентов и услуг, с указанием номеров договоров. Список отсортировать по фамилиям клиентов.
SQL:
SELECT lastname, name, contract_id,
service
FROM tbl_service, tbl_contract, tbl_clients
WHERE tbl_service.service_id =
tbl_contract.service_id
AND tbl_contract`.client_id=`tbl_clients`.client_id
AND retire_date IS NULL
ORDER
BY lastname
Вычислить сумму, которую должен платить каждый клиент за пользование услугами:
SQL:
SELECT lastname, name, SUM(price)
FROM tbl_service,
tbl_contract, tbl_clients
WHERE tbl_service.service_id =
tbl_contract.service_id
AND tbl_contract.client_id=tbl_clients.client_id
AND retire_date IS NULL
GROUP BY lastname
ORDER
BY lastname