Предпоставки за появата на оператора JOIN
Тъй като количеството данни в таблиците нараства, в тях често се появяват дублирани стойности. Например tableта с продукти има имена на марки. които понякога се повтарят. Би било полезно да имате отделна table на марката за тях, която да съдържа например такива данни:
- id - идентификатор на марката;
- име – име на марка;
- company_owner - името на компанията собственик на марката;
- company_contacts - контакти на компанията на собственика на марката.
След това бихме искали да създадем table с addressи, в която можем да поставим всички addressи:
- id – id-addressи;
- държава;
- регион;
- град;
- улица;
- къща;
- цип.
Освен това в тази table би било възможно да се съхраняват addressите не само на компании, притежаващи марка, но и addressите на клиенти и служители. И този подход е просто следствие от нарастването на количеството данни (броя на редовете в таблиците). Това улеснява манипулирането на данните в таблиците и поддържането на тяхната цялост.
Когато имате 5 служители, можете просто да въведете тяхната професия в графата за професия . Ако имате 5 хиляди служители във вашата компания, тогава имате нужда от table със списък от x професии и техните отговорности.
В езика Java, между другото, има нещо подобно. Ако имате много code в метод, тогава има желание да го разделите на няколко метода. Ако има много методи в един клас, тогава искам да го разделя на няколко класа.
Ето защо големите бази данни имат хиляди таблици. И почти всички заявки се изпълняват на няколко таблици наведнъж. А декартовото произведение на редовете от три таблици, във всяка от които има хиляда записа, вече е мorард реда.
Но самото филтриране на мorард редове с помощта на WHERE може да отнеме часове. Затова създателите на езика SQL предложиха своето решение - операторът JOIN.
Въведение в оператора JOIN
Операторът JOIN се използва, за да каже изрично на SQL сървъра, че не се нуждаем от декартово произведение на всички редове от таблици за всички, а от интелигентно залепване на редове от различни таблици, които се отнасят една към друга с помощта на ID (or по друг начин) . Сървърът има отделен алгоритъм за обработка на присъединяване на таблици с помощта на оператора JOIN, което позволява подобни операции да се извършват много по-бързо. Общата форма на оператора JOIN е следната:
table 1 JOIN table 2 ON condition
Тук се казва, че трябва да комбинирате таблиците table1 и table2 в една table и да използвате conditionто като критерий за свързване .
Да вземем нашия стар пример:
SELECT * FROM employee, task WHERE emploee.id = task.emploee_id
И го пренапишете с помощта на оператора JOIN:
SELECT * FROM employee JOIN task ON emploee.id = task.emploee_id
И двете заявки ще дадат един и същ резултат в нашия случай, но това е само защото заявките са много прости. В бъдеще WHERE ви позволява да изградите точно филтъра за редове, а посоченият след ON ви позволява да пишете сложни скриптове за свързване на таблици. Можете също да използвате псевдоними (псевдоними на таблици), когато използвате израза JOIN. Пример:
SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id