Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OraLessons-I / Les-05-Displaying Data from Multiple Tables.doc
Скачиваний:
20
Добавлен:
20.03.2015
Размер:
153.6 Кб
Скачать

Выборка данных из нескольких таблиц.

Цели: После освоение материала данной лекции, студенты должны быть в состоянии выполнить следующие действия:

  1. Составлять SQLзапросы для выбора данных из нескольких таблиц, используя эквисоединения и соединения других видов;

  2. Использовать соединение таблицы с собой;

  3. Использовать внешние соединения для просмотра данных, не удовлетворяющих обычным условиям соединения;

  4. Создавать декартово произведение всех строк из двух или более таблиц.

1. Выборка данных из нескольких таблиц.

Иногда требуются данные из более, чем одной таблицы. Отчёт в приведённом ниже примере содержит данные из двух разных таблиц:EMPLOYEESиDEPARTMENTS.

EMPLOYEE_ID

LAST_NAME

DEPARTMENT_ID

DEPARTMENT_ID

DEPARTMENT_NAME

LOCATION_ID

100

King

90

10

Administration

1700

101

Kochhar

90

20

Marketing

1800

. . .

50

Shipping

1500

202

Fay

20

60

IT

1400

205

Higgins

110

80

Sales

2500

206

Gietz

110

90

Executive

1700

110

Accounting

1700

190

Contracting

1700

Результат:

EMPLOYEE_ID

DEPARTMENT_ID

DEPARTMENT_NAME

100

90

Executive

101

90

Executive

. . .

202

20

Marketing

205

110

Accounting

206

110

Accounting

. . .

2. Виды соединений.

СУБД Oracle, начиная с версии 9i, позволяет использовать синтаксис стандарта SQL:1999 и поддерживает следующие типы соединений:

  1. Перекрестные соединения;

  2. Натуральные соединения;

  3. Опция USING;

  4. Полное (или двухстороннее) внешнее соединение;

  5. Произвольные условия соединения для внешнего соединения.

2.1 Соединение таблиц с помощью sql:1999

SELECT table1.column, table2.column

FROM table1

[NATURAL JOIN table2] |

[JOIN table2 USING (column_name)] |

[JOIN table2

ON (table1.column_name = table2.column_name)]|

[LEFT|RIGHT|FULL OUTER JOIN table2

ON (table1.column_name = table2.column_name)]|

[CROSS JOIN table2];

Для выборки данных из нескольких таблиц требуется условие соединения. Строки одной таблицы соединяются со строками другой с помощью общих значений в соответствующих столбцах – обычно в столбцах первичных и внешних ключей.

Указание 1.

Для соединения Nтаблиц требуется, по крайней мере, (N-1) условий соединения. Это правило не распространяется на таблицы с составным первичным ключом. В этом случае для однозначной идентификации строки требуется более одного столбца.

2.2 Создание натуральных соединений (natural join).

Правила:

  1. Предложение NATURAL JOINосновывается на всех столбцах двух таблиц, имеющих одинаковые имена;

  2. Выбираются строки из двух таблиц, которые имеют одинаковые значения во всех соответствующих столбцах;

  3. Если столбцы с одинаковыми именами имеют разные типы данных, возвращается сообщение об ошибке.

Пример 1.

SELECT department_id, department_name, location_id, city

FROM departments

NATURAL JOIN locations ;

Пример 2.

SELECT department_id, department_name, location_id, city

FROM departments

NATURAL JOIN locations

WHERE department_id in (20, 50) ;

Пример 3.

SELECT departments.department_id,

departments.department_name,

locations.location_id,

locations.city

FROM departments, locations

WHERE departments.location_id = locations.location_id ;

Примечание.

В основе натурального соединения лежит эквисоединение(equi-join) всех столбцов с одинаковыми именами.

Соседние файлы в папке OraLessons-I