Онлайн час в Google Meet
Лого на 91. НЕГ „Проф. Константин Гълъбов“

12. клас · Модул 3 · Урок 23

Връзки между таблиците. Съединения

JOIN заявките: вътрешно съединяване (неявно и явно), съединяване на повече таблици, външно (LEFT/RIGHT OUTER) и рекурсивно (SELF JOIN).

Защо съединяваме таблици

При нормализацията разбихме сложните таблици на по-прости — но така се „разкъсват“ връзките между данните. Връзките запазихме в структурата: в едната таблица участва като атрибут стойност на външния ключ на друга. Когато трябва да съберем отново данните, използваме заявки за съединяване — SELECT заявки с клаузи от типа JOIN, чийто източник са две или повече свързани таблици. Резултатът отново е временна таблица.

Тип съединяванеSQLКакво влиза в резултата
ВътрешноINNER JOINсамо двойките кортежи, за които условието е вярно
ВъншноLEFT / RIGHT OUTER JOIN+ несъединените кортежи от лявата/дясната таблица (с празни атрибути)
РекурсивноSELF JOINтаблицата, съединена със самата себе си

Вътрешно съединяване

Всеки кортеж на резултата се получава от атрибути на два кортежа на свързаните таблици, за които стойностите на свързващите атрибути отговарят на условието (най-често — да са еднакви). Концептуално: произведение на всички двойки записи + филтър по условието за съединение.

Неявно съединение (през WHERE)

Името на таблицата пред атрибута е задължително само когато в двете таблици има едноименни атрибути.

Явно съединение (JOIN … ON)

SELECT атрибути FROM таблица1 {INNER} JOIN таблица2 ON условие | USING списък_атрибути;

INNER може да се пропусне (подразбира се). USING замества ON, когато свързващите атрибути в двете таблици са с еднакви имена.

Повече от две таблици

Съединяваме верижно: FROM (Ученик INNER JOIN Предмети USING Клас) INNER JOIN Учител ON …. Забележи как един кортеж от таблицата Учител се свързва с няколко кортежа от Предмети — учителят преподава в няколко класа.

Външно съединяване

При ляво външно (LEFT OUTER): ако в лявата таблица има кортежи без съответствие вдясно, те пак влизат в резултата, а атрибутите от дясната таблица остават празни. При дясното — огледално.

Рекурсивно съединяване (SELF JOIN)

Свързване на данни от една и съща таблица при наличие на рекурсивна връзка между редовете ѝ. Класически пример: прекият началник на всеки служител — атрибутът „Пряк началник“ е външен ключ към същата таблица.

Съставянето разглеждаме като свързване на две различни копия на една таблица (второто получава псевдоним) — и внимаваме кой атрибут от кое копие вземаме:

Какво трябва да запомниш

  • JOIN събира отново разкъсаното при нормализацията — по външните ключове.
  • Вътрешно: само съвпадащите двойки; неявно (WHERE =) или явно (JOIN … ON/USING).
  • Външно: LEFT/RIGHT OUTER — несъединените кортежи влизат с празни атрибути.
  • SELF JOIN: таблица към себе си чрез псевдоним — „пряк началник“.
  • Име на таблица пред атрибута — задължително при едноименни атрибути.