SQL самостоятелно присъединяване

Sql Samostoatelno Pris Edinavane



Една от най-известните характеристики на релационните бази данни е присъединяването. Съединенията са една от най-мощните и сложни характеристики на релационните бази данни. Те позволяват широка модулност и много сложни връзки между таблиците на базата данни, без да се прави компромис с производителността.

Въпреки това, има тип присъединяване в SQL, който има тенденция да минава под радара, който е известен като самоприсъединяване.

В SQL самообединяването е мощна техника, която ни позволява да комбинираме редовете от една и съща таблица въз основа на свързана колона в рамките на същата таблица.







За разлика от другия тип обединения в SQL, където вземаме данните от множество таблици, самосъединяването работи върху една таблица.



Може би се чудите защо ми е необходимо самосъединяване, когато мога да търся данните от самата таблица? Въпреки че това може да е вярно, самообединяването може да помогне при задачи, когато трябва да извършите рекурсивни заявки за данни или да намерите йерархични данни.



По същество самообединяването играе основна роля, когато трябва да сравните редовете на една и съща таблица.





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

ЗАБЕЛЕЖКА: Преди да се потопим, ще настроим основна таблица за демонстрационни цели. Въпреки това можете да използвате всеки поддържан набор от данни.



Примерни данни

Следните заявки създават основна таблица, съдържаща информация за продукта и вмъкват примерните записи в таблицата. Това ни позволява да демонстрираме как да работим със самосъединяванията в SQL.

CREATE TABLE Продукти (
product_id INT ПЪРВИЧЕН КЛЮЧ,
име на продукт VARCHAR(255) NOT NULL,
parent_id INT
);

Добавете 10 примерни записа в таблицата.

INSERT INTO Продукти (product_id, product_name, parent_id) СТОЙНОСТИ
(1, „Електроника“, NULL),
(2, „Смартфони“, 1),
(3, „Лаптопи“, 1),
(4, „iPhone 13“, 2),
(5, „Samsung Galaxy S21“, 2),
(6, „MacBook Pro“, 3),
(7, „Dell XPS 15“, 3),
(8, „Аксесоари“, NULL),
(9, „Калъфи за телефони“, 8),
(10, „Чанти за лаптопи“, 8);

Получената таблица е както следва:

Пример 1: Основно самостоятелно присъединяване

Нека започнем с основно самосъединяване. Например, можем да използваме просто самосъединяване, за да извлечем връзката родител-дете на същата таблица.

Например, можем да го използваме, за да намерим всички продукти и съответните им основни продукти. Можем да изпълним запитване, както следва:

ИЗБЕРЕТЕ c.product_name КАТО подчинен_продукт, p.product_name КАТО родителски_продукт
ОТ Продукти c
LEFT JOIN Продукти p ON c.parent_id = p.product_id;

В дадената примерна заявка използваме „c“ като псевдоним за продуктовата таблица, която представлява дъщерните продукти.

Ние също така създаваме псевдонима „p“ за продуктовата таблица, за да представим основните продукти.

В следващата стъпка използваме основен SQL LEFT JOIN, за да гарантираме, че продуктите от най-високо ниво са включени в резултата.

И накрая, използваме клаузата ON, за да създадем връзка между дъщерните и родителските записи, използвайки колоните „parent_id“ и „product_id“.

Получената таблица е както следва:

Ще забележите, че родителските продукти нямат горна връзка, тъй като те са в горната част на йерархията, които също са известни като коренни елементи.

Пример 2: Извличане на йерархични данни

Една от най-фундаменталните роли на самосъединяването е извличането на йерархични данни. Да предположим например, че искаме да извлечем всички дъщерни продукти, където продуктът е равен на „Аксесоари“. Можем да изпълним заявката, като използваме самостоятелно присъединяване, както следва:

ИЗБЕРЕТЕ c.product_name КАТО child_product
ОТ Продукти c
ПРИСЪЕДИНЕТЕ СЕ Продукти p ON c.parent_id = p.product_id
WHERE p.product_name = 'Аксесоари';

В този случай използваме JOIN, за да комбинираме таблицата с продукти със самата нея и след това използваме клаузата WHERE, за да филтрираме резултатите, които искаме.

Заключение

В този урок проучихме какво е самосъединяване, как работи и как можем да го използваме в SQL таблицата за извличане на йерархични данни или извършване на рекурсивни заявки.