Предпоставки за появата на оператора 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