Резюме :в този урок ще научите за специален тип присъединяване, наречен SQLite self-join, който ви позволява да присъедините таблицата към себе си.
Имайте предвид, че трябва да сте запознати с INNER JOIN
и LEFT JOIN
клаузи, преди да продължите с този урок.
Въведение в SQLite самостоятелно присъединяване
Самоприсъединяването е специален вид свързвания, които ви позволяват да присъедините таблица към себе си, като използвате или LEFT JOIN
или INNER JOIN
клауза. Използвате самостоятелно присъединяване, за да създадете набор от резултати, който свързва редовете с другите редове в същата таблица.
Тъй като не можете да препращате към една и съща таблица повече от една в заявка, трябва да използвате псевдоним на таблица, за да присвоите на таблицата различно име, когато използвате самостоятелно присъединяване.
Самоприсъединяването сравнява стойностите на едни и същи или различни колони в една и съща таблица. Само една маса участва в самоприсъединяването.
Често използвате самоприсъединяване, за да зададете заявка за връзката родител/дете, съхранена в таблица, или за получаване на текущи суми.
Примери за самостоятелно присъединяване в SQLite
Ще използваме employees
таблица в примерната база данни за демонстрация.
employees
таблицата съхранява не само данни за служителите, но и организационни данни. ReportsTo
колоната посочва взаимоотношенията за отчитане между служителите.
Ако служител се отчита на мениджър, стойността на ReportsTo
колона на реда на служителя е равна на стойността на EmployeeId
колона на реда на мениджъра. В случай, че служител не докладва на никого, ReportsTo
колоната е NULL
.
За да получите информация кой на кого е пряк докладчик, използвате следното изявление:
SELECT m.firstname || ' ' || m.lastname AS 'Manager',
e.firstname || ' ' || e.lastname AS 'Direct report'
FROM employees e
INNER JOIN employees m ON m.employeeid = e.reportsto
ORDER BY manager;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Изявлението използва INNER JOIN
клауза за присъединяване към employees
към себе си. employees
таблицата има две роли:служители и мениджъри.
Тъй като използвахме INNER JOIN
клауза за присъединяване към employees
таблица за себе си, резултантният набор няма реда, чиято колона на мениджъра съдържа NULL
стойност.
Обърнете внимание, че операторът за конкатенация ||
конкатенира множество низове в един низ. В примера използваме оператора за конкатенация до от пълните имена на служителите, като обединяваме името, интервала и фамилията.
В случай, че искате да попитате главния изпълнителен директор, който не се отчита на никого, трябва да промените INNER JOIN
клауза за LEFT JOIN
клауза в заявката по-горе.
Andrew Adams
е главен изпълнителен директор, защото не докладва за никого.
Можете да използвате техниката на самостоятелно присъединяване, за да намерите служителите, намиращи се в същия град като следната заявка:
SELECT DISTINCT
e1.city,
e1.firstName || ' ' || e1.lastname AS fullname
FROM
employees e1
INNER JOIN employees e2 ON e2.city = e1.city
AND (e1.firstname <> e2.firstname AND e1.lastname <> e2.lastname)
ORDER BY
e1.city;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Условието за присъединяване има два израза:
e1.city = e2.city
за да се уверите, че и двамата служители се намират в един и същи градe.firstname <> e2.firstname AND e1.lastname <> e2.lastname
за да се гарантира, чеe1
иe2
не са един и същи служител с допускането, че няма служители, които имат едно и също име и фамилия.
В този урок ви показахме как да използвате техниката за самостоятелно присъединяване на SQLite, за да присъедините таблица към себе си.