Якщо потрібні отримати дані з більш, ніж однієї таблиці бази даних, використовується операція з'єднання, певна в реляційній алгебрі. Рядки однієї таблиці з'єднуються з рядками іншої відповідно до загальних значень у шпальтах - шпальтах первинних і зовнішніх ключів.
СУБД Oracle7 підтримує такі способи з'єднання:- еквісоедіненія;
- Ні-еквісоедіненія;
- зовнішнє з'єднання;
- з'єднання таблиці з собою (рекурсія).
Відносини між таблицями.
При з'єднанні декількох таблиць можливий випадок, коли в якості результату запиту можна отримати Декартово твір, яке утворюється, якщо:
- опущено умова з'єднання;
- умова з'єднання недійсне;
- всі рядки першої таблиці з'єднуються з усіма рядками другої таблиці.
Щоб уникнути отримання декартова твори в пропозицію WHERE завжди необхідно включати допустимий умова з'єднання.
Простий запит з з'єднанням.
Цей вид з'єднання виникає, коли в якості умови для з'єднання вказується точне рівність значень одного стовпця значень іншого. Часто ці стовпці є компонентами первинного та зовнішнього ключа.
Приклад: З'єднання таблиць службовців і відділів для виведення прізвища службовця, номера і назви відділу.
Рядки двох таблиць комбінуються і в результат включаються лише ті рядки, у яких значення S_EMP.DEPT_ID і S_DEPT.ID рівні.
Для розрізнення однойменних стовпців з різних таблиць використовуються префікси у вигляді імен таблиць. Використання префіксів у вигляді імен таблиць збільшує продуктивність запиту. Однойменні стовпці з різних таблиць можна розрізняти по їх псевдонімів. Однак як бути в тому випадку, коли імена таблиць громіздкі або збігаються?
Для вирішення такої ситуації використовують псевдоніми таблиць. При цьому необхідно дотримуватися наступних правил:
- перед іменами стовпців рекомендується вказувати псевдоніми таблиць;
- псевдоніми таблиць дійсні тільки для даної команди SELECT;
- якщо псевдонім таблиці створений, перед посиланням на стовпець слід вказувати його, а не ім'я таблиці.
Приклад: Висновок найменування клієнта, номера регіону і назви регіону для всіх клієнтів. Використовуються псевдоніми стовпців, а для спрощення посилань на таблиці - псевдоніми таблиць.
Псевдоніми таблиць можуть містити до тридцяти символів, але чим вони коротші, тим краще. Дія псевдоніма таблиці поширюється лише на поточну команду SELECT. Використання псевдонімів таблиць дозволяє зменшити обсяг коду SQL, що скорочує витрату пам'яті.
Додаткові умови пошуку.
Крім з'єднання в реченні WHERE можна ставити й інші критерії для обмеження одержуваних в запиті рядків. Оскільки з'єднання необхідно для підбору відповідностей, додаткову умову додається за допомогою оператора AND.
Приклад: Висновок прізвища, номери відділу і назви відділу співробітника "Menchu".
Символ зовнішнього з'єднання; може використовуватися на будь-якій стороні умови в реченні WHERE. (+) Вказується після імені таблиці, в якій немає відповідних рядків
Оператор зовнішнього з'єднання може використовуватися тільки на одній стороні вирази, там, де мало інформації. Він повертає рядки таблиці, для яких в іншій таблиці немає відповідного рядка.
Умова, що припускає зовнішнє з'єднання, не може використовувати оператор IN і бути пов'язаним з іншими умовами за допомогою оператора OR.
Приклад: Висновок для кожного клієнта його найменування, а також прізвища та ідентифікаційного номера торгового представника. У список включаються найменування навіть тих клієнтів, які не мають торгового представника.