Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Раздел 4 Соединения.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
34.94 Кб
Скачать

Соединения равенства

Пожалуй, наиболее важным и в то же время наиболее распространенным соединением является соединение равенства, иногда именуемое также внутренним соединением. В случае соединения равенства объединение данных из двух таблиц обычно происходит по общему столбцу, являющемуся в каждой из них первичным ключом. Синтаксис эквисоединения имеет следующий вид:

SELECT ТАБЛИЦА1.СТОЛБЕЦ1, ТАБЛИЦА2.СТОЛБЕЦ2... FROM ТАБЛИЦА1, ТАБЛИЦА2 [, ТАБЛИЦАЗ ] WHERE ТАБЛИЦА1.ИМЯ_СТОЛБЦА = ТАБЛИЦА2.ИМЯ_СТОЛБЦА [AND ТАБЛИЦА1.ИМЯ СТОЛБЦА = ТАБЛИЦАЗ.ИМЯ СТОЛБЦА]

Пример использования:

SELECT EMPLOYEE_TBL.EMP_ID,EMPLOYEE_PAY_TBL.DATE_HIRE FROM EMPLOYEE_TBL,EMPLOYEE_PAY_TBL WHERE EMPLOYEE_TBL.EMP_ID = EMPLOYEE_PAY_TBL.EMP_ID;

Этот оператор SQL возвращает идентификатор служащего и дату его приема на работу. При этом идентификатор служащего выбирается из таблицы EMPLOYEE_TBL (хотя он содержится в обеих таблицах, вам достаточно указать только одну из них), а дата приема на работу из таблицы EMPLOYEE_PAY_TBL. Поскольку поля с идентификаторами служащих существуют в обеих таблицах, перед каждым столбцом следует указать имя содержащей его таблицы. Помещая перед названиями столбцов имена таблиц, вы тем самым указываете серверу баз данных, откуда он должен взять соответствующую информацию. Рассмотрим соединение равенства на ещё одном примере:

SELECT EMPLOYEE_TBL.EMP_ID, EMPLOYEE_TBL.LAST_MAME, EMPLOYEE_PAY_TBL.POSITION FROM EMPLOYEE_TBL, EMPLOYEE_PAY_TBL WHERE EMPLOYEE TBL.EMP ID = EMPLOYEE PAY TBL.EMP ID;

Здесь все необходимые данные выбираются из таблиц EMPLOYEE_TBL и EMPLOYEE_PAY_TBL, в которых они постоянно хранятся. При формировании запроса мы воспользовались соединением равенства. В результате выполнения этого запроса получим:

Обратите внимание, что для идентификации выбираемых столбцов перед каждым из них в предложении SELECT мы поместили имя содержащей его таблицы. Такое действие называется квалификацией, или уточнением, столбцов запроса. В действительности квалификация необходима только для тех столбцов, которые существуют более чем в одной таблице из числа участвующих в запросе. Тем не менее, для единообразия программного кода, а также с целью облегчения его отладки и исправления мы рекомендуем вам практически во всех случаях снабжать имена столбцов соответствующими префиксами.

Естественные соединения

Естественные соединения и соединения равенства имеют много общего; основное различие между ними состоит в том, что в случае естественного соединения из результирующего набора исключаются дублирующие столбцы. Условие соединения остается тем же самым, однако между выбираемыми столбцами суще-ствуют определенные различия. Синтаксис естественного соединения имеет следующий вид:

SELECT ТАБЛИЦА1.*, ТАБЛИЦА2.ИМЯ_СТОЛБЦА [,ТАБЛИЦАЗ.ИМЯ_СТОЛБЦА] FROM ТАБЛИЦА1, ТАБЛИЦА2 [, ТАБЛИЦАЗ] WHERE ТАБЛИЦА1.ИМЯ_СТОЛБЦА = ТАБЛИЦА2.ИМЯ_СТОЛБЦА [ AND ТАБЛИЦА1.ИМЯ_СТОЛБЦА = ТАБЛИЦАЗ.ИМЯ_СТОЛБЦА]

Продемонстрируем способ естественного соединения таблиц на следующем примере:

SELECT E.*, EP.SALARY FROM EMPLOYEE_TBL E,EMPLOYEE_PAY_TBL EP WHERE E.EMP_ID = EP.EMP_ID

Рассмотрим работу предыдущего оператора. Этот оператор SQL возвращает все столбцы из таблицы EMPLOYEE_TBL и столбец SALARY из таблицы EMPLOYEE_PAY_TBL. Столбцы EMP_ID Существуют в обеих таблицах, однако поскольку в каждом из них содержится одинаковая информация, выборка данных происходит только из столбца EMPLOYEE_TBL.EMP_ID. В следующем примере происходит выборка всех столбцов из таблицы ЕМPLOYEE_TBL и только одного столбца из таблицы EMPLOYEE_PAY_TBL. He забывайте, что символ звездочка (*) представляет сразу все столбцы таблицы.

SELECT EMPLOYEE_TBL.*, EMPLOYEE_PAY_TBL.POSITION FROM EHPLOYEE_TBL, EMPLOYEE_PAY_TBL WHERE EMPLOYEE TBL.EMP_ID = EMPLOYEE PAY TBL.EMP_ID;

В результате выполнения этого оператора мы получим довольно объёмную таблицу, позволяющую получить следующие сведения о служащих компании: личный идентификатор (EMP_ID), фамилию и имя (LAST_NAM и FIRST_NA), город и адрес служащего (CITY и ADDRESS) и др.