mysql join tutorial inner
Научете за различни MySQL JOIN изрази като Inner, Outer, Cross, Left, Right и And Self със синтаксис и примери за програмиране:
В този урок ще научим за MySQL JOIN и също така ще разберем различните видове Joins, които се поддържат в MySQL. JOIN в най-простата си форма може да се разглежда като средство за извличане / актуализиране или изтриване на данни от множество таблици срещу една заявка.
Така че по същество JOIN комбинира 2 или повече таблици за извличане на данни спрямо дадено условие.
MySQL също така поддържа други различни начини за заявки за данни от множество таблици, използвайки - подзаявки и чрез комбиниране на множество заявки с помощта на UNION и т.н.
Какво ще научите:
- Нормализирани таблици
- Присъединете се към MySQL
- Типове MySQL ПРИСЪЕДИНЯВАНЕ
- MySQL ПРИСЪЕДИНЕТЕ С АКТУАЛИЗИРАНЕ И ИЗТРИВАНЕ
- Заключение
Нормализирани таблици
В нормализираните бази данни на MySQL таблиците имат връзки срещу общи колони посредством ключови ограничения като чужди ключове.
Нека се опитаме да разберем това с помощта на пример - Да предположим, че има 2 таблици, EMPLOYEE и EMPLOYEE_DEPARTMENT. Сега в денормализирана база данни - т.е. в една таблица, съдържаща всички колони, много информация, например за Отдела, ще бъде дублирана, тъй като може да има много служители, които са част от същия отдел.
Следователно, за да се намалят тези дублирания и да се спести съхранение, базите данни се поддържат в нормализирано състояние.
Така че в този случай бихме се обърнали към отдела чрез поле Department_id в таблицата EMPLOYEE и цялата съответна информация, свързана с отдел - като информация за отдела, ръководител на отдел и т.н., може да се съхранява като част от таблицата EMPLOYEE_DEPARTMENT.
Така накратко - EMPLOYEE и EMPLOYEE_DEPARTMENT са свързани помежду си чрез полето Department_id, което действа като ЧУЖДЕСТРЕН КЛЮЧ за таблицата EMPLOYEE и PRIMARY KEY за таблицата EMPLOYEE_DEPARTMENT.
Под изображението е изобразено изображение, имащо връзка между двете таблици чрез Ограничение за външен ключ
Присъединете се към MySQL
MySQL JOIN се използва за извличане, актуализиране или изтриване на данни от 2 или повече таблици спрямо дадено условие. Следователно JOIN винаги се използва заедно с инструкции SELECT, UPDATE или DELETE
Синтаксис на командата JOIN:
ПРИСЪЕДИНЕТЕ се с SELECT
SELECT {column_list} FROM tableName1 {joinType} tableName2 ON {joinCondition}
ПРИСЪЕДИНЕТЕ С АКТУАЛИЗАЦИЯ
DELETE FROM tableName1 {joinType} tableName2 ON {joinCondition} WHERE {condition}
ПРИСЪЕДИНЕТЕ СИ ИЗТРИВАНЕ
UPDATE tableName1 SET targetColumn = targetValue FROM tableName1 {joinType} tableName2 ON {joinCondition} WHERE {condition}
Моля, обърнете внимание, че JOIN може да се приложи към множество таблици в една заявка, но за простота нека първо се опитаме да разберем използването на Joins с 2 таблици.
Различните части на синтаксиса включват:
- {column_list} - Това представлява имената на колони, които искаме да извлечем в резултат на нашата заявка.
- {JoinType} - Това показва вида на присъединяване, който прилагаме. Има следните различни видове СЪЕДИНЕНИЯ, които могат да извличат данни:
- ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ
- ВЪНШНО ПРИСЪЕДИНЯВАНЕ
- ЛЯВО ВЪНШНО ПРИСЪЕДИНЯВАНЕ
- ДЯСНО ВЪНШНО ПРИСЪЕДИНЯВАНЕ
- КРЪСТНО ПРИСЪЕДИНЯВАНЕ
Ще научим за всички тези различни видове MySQL JOINS в следващите раздели на урока.
- {JoinCondition} - Това са условията на колоната, които биха били използвани за JOIN за заявка и извличане на данни.
В следващия раздел ще обсъдим различни видове присъединявания, които се предлагат в MySQL.
Типове MySQL ПРИСЪЕДИНЯВАНЕ
Подготовка на примерни данни
За да използваме JOINS, ще използваме 2 таблици Employee и Employee_Department с подробностите по-долу. Можете да използвате / да се обърнете към полезен сайт тук за да се генерират фиктивни данни за схемата.
Заявки за списък за създаване и вмъкване на таблици:
CREATE TABLE IF NOT EXISTS Employee_Department ( name varchar(100), id INT NOT NULL auto_increment, PRIMARY KEY (id) ); CREATE TABLE IF NOT EXISTS Employee ( name varchar(100), id int not null auto_increment, address varchar(100), Department_id int, PRIMARY KEY (id), FOREIGN KEY (Department_id) references Employee_Department(id) ); INSERT INTO `Employee_Department` VALUES ('Information Technology','1'), ('HR','2'), ('Finance','3'), ('Accounting','4'), ('Housekeeping','5'), ('Security','6'), ('Support','7'), ('Contract Staff','8'), ('Sales','9'), ('Management','10'); INSERT INTO `Employee` VALUES ('Veniam','1','640 Damon Junction
East Mathew, NY 68818','3'), ('Molestiae','2','6658 Hollis Club
Ernamouth, TX 19743','10'), ('Officiis','3','59965 Mason Neck Apt. 985
Kareemborough, NV 85535','9'), ('Rerum','4','91067 Geovany Fort
Hanefort, WA 92863','6'), ('Et','5','7647 Reva Shores Suite 970
New Audrafort, OH 17846-5397','2'), ('Et','6','9419 Carmela Burg Apt. 687
Aimeebury, SD 32389-4489','8'), ('Laborum','7','6961 Weissnat Drive
Donnellyfort, MT 53947','6'), ('Cupiditate','8','117 Nellie Summit Suite 982
South Heavenfurt, CA 45675','8'), ('Eveniet','9','9086 Mariam Square Suite 698
South Dulce, MT 82861-3079','2'), ('Rerum','10','783 Goodwin Burgs Apt. 429
Willmsfort, UT 42820-1019','9'), ('Quis','11','42928 Ernesto Trail
East Jules, WV 87169-2851','1'), ('Esse','12','161 Kassulke Stravenue Apt. 937
Williamsonton, MS 62622','7'), ('Dolores','13','22811 Liliana Trail Apt. 890
South Ernesto, MT 04134','10'), ('Ut','14','981 Laron Overpass Suite 361
West Olahaven, FL 46982-7801','10'), ('Mollitia','15','411 Louisa Mill
South Maximefort, MA 04903','8'), ('Necessitatibus','16','2853 Jonathon Turnpike
Quitzonville, KY 54776','4'), ('Fugit','17','3647 Rosalinda Corner
Maureenstad, RI 96605','5'), ('Corporis','18','03559 Nicholas Circle Apt. 364
West Zettaberg, ID 58592-3447','8'), ('Neque','19','56111 Alysson Gateway Apt. 212
Leschbury, VT 90605-2306','8'), ('Velit','20','263 O'Keefe Avenue Apt. 884
West Missouri, IL 50303','6'),
ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ
INNER JOIN е най-често срещаната форма на JOIN и се използва много широко. Почти всички от вас би трябвало да са използвали това в някакъв момент. Нека видим синтаксиса и след това някои примерни заявки.
Синтаксис:
SELECT {column_list} FROM tableName1 INNER JOIN tableName2 ON {joinCondition}
Заявка за извличане на имена на отдели за всички служители от декларираните по-горе таблици (Employee и Employee_Department):
SELECT Employee.name as Employee_name, Employee_Department.name as Department_name FROM Employee INNER JOIN Employee_Department ON Employee.Department_id = Employee_Department.id
Ето резултата от горната заявка:
Име на служителя | Име на отдела |
---|---|
нещата | Сигурност |
Който | Информационни технологии |
И | HR |
попадат | HR |
Аз | Финанси |
нужди | Счетоводство |
Fgit | Домакинство |
закуски | Сигурност |
Моля те | Сигурност |
Че | поддържа |
И | Договорен персонал |
нетърпение | Договорен персонал |
устойчивост | Договорен персонал |
тяло | Договорен персонал |
Честно | Договорен персонал |
офиси | Продажби |
нещата | Продажби |
ядове | Управление |
Болки | Управление |
Вън | Управление |
Забележка: Тук използвахме псевдоними на имена на колони. Пример: Employee.name като Employee_name - само за да направим резултатите по-четливи и изчерпателни.
Нека модифицираме тази заявка, за да извлечем само имената, започващи с буквата „m“.
SELECT Employee.name as Employee_name, Employee_Department.name as Department_name FROM Employee INNER JOIN Employee_Department ON Employee.Department_id = Employee_Department.id WHERE Employee.name like 'm%'
По-долу е изходът:
Име на служителя | Име на отдела | |||||
---|---|---|---|---|---|---|
закуски | 7 | 6961 Вайснат Драйв Donnellyfort, MT 53947 | 6 | НУЛА | НУЛА | НУЛА |
ядове | Управление | |||||
устойчивост | Договорен персонал |
А сега нека разберем ВЪТРЕШНАТА ПРИСЪЕДИНЕНИЕ с помощта на диаграмата на Вен, както е показано по-долу. Върнатите получени редове се състоят от припокриващи се данни между двете таблици, съответстващи на условието JOIN.
ВЪНШНО ПРИСЪЕДИНЯВАНЕ
OUTER JOIN се използва за извличане на данни от 2 или повече таблици, с изключение на включването на несравними редове (или редове с нулеви данни за заявените колони).
За да разберете по-добре Външното присъединяване, добавете нова таблица office_locations с полета - id и адрес и добавете нова колона с име `office_id` към първоначално създадената таблица на служителите.
Ето запитванията за същото:
CREATE TABLE IF NOT EXISTS office_locations ( address varchar(100), id INT NOT NULL auto_increment, PRIMARY KEY (id) ); ALTER TABLE Employee ADD COLUMN office_id int; INSERT INTO `office_locations`(address) VALUES('Bangalore'), ('Mumbai'), ('Seattle'), ('Santa Clara'); UPDATE Employee SET office_id=1 where id % 2 = 0; UPDATE Employee SET office_id=2 where id % 3 = 0;
Моля, обърнете се към диаграмата на Venn по-долу, за да разберете ВЪНШНИТЕ ПРИСЪЕДИНЕНИЯ нагледно:
Има 2 вида ВЪНШНИ ПРИСЪЕДИНЯВАНИЯ
а) ЛЯВО ВЪНШНО ПРИСЪЕДИНЯВАНЕ
Както подсказва името, този тип Join ще извлече всички редове (включително NULL стойности) от таблицата, която е в лявата страна на JOIN заявката. С прости думи, всички резултати / редове, които не отговарят на условието JOIN, ще бъдат върнати, като резултатът има NULL стойности за дясната таблица.
Например, имаме нужда от данни за местоположението за всички служители - т.е. да разберем какъв е адресът на офиса на всички служители.
SELECT * from Employee LEFT OUTER JOIN office_locations ON Employee.office_id = office_locations.id
Резултат от горната заявка:
Име | Документ за самоличност | Адрес | Department_id | Office_id | Офис адрес | Документ за самоличност |
---|---|---|---|---|---|---|
Аз | 1 | 640 Деймон Джанкшън Източен Матю, Ню Йорк 68818 | 3 | НУЛА | НУЛА | НУЛА |
ядове | две | 6658 Клуб Холис Ернамут, Тексас 19743 | 10 | 1 | Бангалор | 1 |
офиси | 3 | 59965 Mason Neck Apt. 985 Kareemborough, NV 85535 | 9 | две | Мумбай | две |
нещата | 4 | 91067 крепост Geovany) Ханефорт, Вашингтон 92863 | 6 | 1 | Бангалор | 1 |
И | 5 | 7647 Reva Shores Suite 970 New Audrafort, OH 17846-5397 | две | НУЛА | НУЛА | НУЛА |
И | 6 | 9419 Кармела Бург Ап. 687 Еймбъри, SD 32389-4489 | 8 | две | Мумбай | две |
нетърпение | 8 | 117 Nellie Summit Suite 982 Южен Небесен град, Калифорния 45675 | 8 | 1 | Бангалор | 1 |
попадат | 9 | Апартамент 9086 Mariam Square 698 South Dulce, MT 82861-3079 | две | две | Мумбай | две |
нещата | 10 | 783 Гудуин Бъргс Ап. 429 Willmsfort, UT 42820-1019 | 9 | 1 | Бангалор | 1 |
Който | единадесет | 42928 пътека Ернесто Източен Жул, WV 87169-2851 | 1 | НУЛА | НУЛА | НУЛА |
Че | 12 | 161 Kassulke Stravenue Apt. 937 Уилямсънтън, MS 62622 | 7 | две | Мумбай | две |
Болки | 13 | 22811 Liliana Trail Apt. 890 Южен Ернесто, MT 04134 | 10 | НУЛА | НУЛА | НУЛА |
Вън | 14. | 981 Laron Overpass Suite 361 Западен Олахафен, Флорида 46982-7801 | 10 | 1 | Бангалор | 1 |
устойчивост | петнадесет | 411 Луиза Мил Южен Максимефорт, Масачузетс 04903 | 8 | две | Мумбай | две |
нужди | 16. | 2853 Магистрала Джонатан Quitzonville, KY 54776 | 4 | 1 | Бангалор | 1 |
FLED | 17 | 3647 Ъгъл на Розалинда Maureenstad, RI 96605 | 5 | НУЛА | НУЛА | НУЛА |
тяло | 18. | 03559 Никълъс Кръг Ап. 364 Западен Зетаберг, ID 58592-3447 | 8 | две | Мумбай | две |
или | 19. | 56111 Alysson Gateway Apt. 212 Лешбъри, VT 90605-2306 | 8 | НУЛА | НУЛА | НУЛА |
Моля те | двайсет | 263 O'Keefe Avenue Apt. 884 Западен Мисури, IL 50303 | 6 | 1 | Бангалор | 1 |
б) ДЯСНО ВЪНШНО ПРИСЪЕДИНЯВАНЕ
Подобно на LEFT JOIN, при този тип Join всички записи, които не съвпадат от дясната таблица, се връщат с NULL стойности в колоните за лявата странична таблица.
урок за Visual Studio Team Foundation Server 2015
Например, с нашите примерни таблици, ако изпълним ПРАВИЛНОТО ПРИСЪЕДИНЯВАНЕ срещу същата заявка, която използвахме за НАЛЯВО ПРИСЪЕДИНЯВАНЕ, ще получим NULL стойности за градовете „Сиатъл“ и „Санта Клара“, тъй като в таблицата на служителите няма редове, които имат зададено местоположение към тези стойности.
SELECT * from Employee RIGHT OUTER JOIN office_locations ON Employee.office_id = office_locations.id
Резултат от горната заявка:
Име | Документ за самоличност | Адрес | Department_id | Office_id | Офис адрес | Документ за самоличност |
---|---|---|---|---|---|---|
Моля те | двайсет | 263 O'Keefe Avenue Apt. 884 Западен Мисури, IL 50303 | 6 | 1 | Бангалор | 1 |
ядове | две | 6658 Клуб Холис Ернамут, Тексас 19743 | 10 | 1 | Бангалор | 1 |
нещата | 4 | 91067 крепост Geovany Ханефорт, Вашингтон 92863 | 6 | 1 | Бангалор | 1 |
нетърпение | 8 | 117 Nellie Summit Suite 982 Южен Небесен град, Калифорния 45675 | 8 | 1 | Бангалор | 1 |
нещата | 10 | 783 Гудуин Бъргс Ап. 429 Willmsfort, UT 42820-1019 | 9 | 1 | Бангалор | 1 |
Вън | 14. | 981 Laron Overpass Suite 361 Западен Олахафен, Флорида 46982-7801 | 10 | 1 | Бангалор | 1 |
нужди | 16. | 2853 Магистрала Джонатан Quitzonville, KY 54776 | 4 | 1 | Бангалор | 1 |
офиси | 3 | 59965 Mason Neck Apt. 985 Kareemborough, NV 85535 | 9 | две | Мумбай | две |
И | 6 | 9419 Кармела Бург Ап. 687 Еймбъри, SD 32389-4489 | 8 | две | Мумбай | две |
попадат | 9 | Апартамент 9086 Mariam Square 698 South Dulce, MT 82861-3079 | две | две | Мумбай | две |
Че | 12 | 161 Kassulke Stravenue Apt. 937 Уилямсънтън, MS 62622 | 7 | две | Мумбай | две |
устойчивост | петнадесет | 411 Луиза Мил Южен Максимефорт, Масачузетс 04903 | 8 | две | Мумбай | две |
тяло | 18. | 03559 Никълъс Кръг Ап. 364 Западен Зетаберг, ID 58592-3447 | 8 | две | Мумбай | две |
НУЛА | НУЛА | НУЛА | НУЛА | НУЛА | Сиатъл | 3 |
НУЛА | НУЛА | НУЛА | НУЛА | НУЛА | Санта Клара | 4 |
Бележки / съвети:
- В други релационни бази данни като Microsoft SQL - може да намерите друг тип ВЪНШНО ПРИСЪЕДИНЯВАНЕ, който се нарича ПЪЛНО ВЪНШНО ПРИСЪЕДИНЯВАНЕ. Това не е нищо друго освен комбинация както от INNER, така и от OUTER Joins - т.е. ще върне NULL стойности от двете НАЛЯВО и НАДЯСНО таблици.
- За подробна дискусия, заедно с обяснения и примери за разликите между ВЪТРЕШНИ И ВЪНШНИ ПРИСЪЕДИНЕНИЯ, вижте нашия урок тук.
- В заявките OUTER JOIN - НАДЯСНОТО ВЪНШНО ПРИСЪЕДИНЯВАНЕ и НАЛЯВО ВЪНШНО ПРИСЪЕДИНЯВАНЕ могат да бъдат точно посочени като НАДЯСНО СЪЕДИНЕНИЕ и ЛЯВО СЪЕДИНЕНИЕ съответно за повече четливост.
КРЪСТНО ПРИСЪЕДИНЯВАНЕ
КРЪСТНО ПРИСЪЕДИНЯВАНЕ също се нарича декартов продукт. Той връща резултат срещу съвпадащи условия за присъединяване с общо m x n редове, където m и n са брой съвпадащи редове в table1 и table2 спрямо условието JOIN.
Нека да видим примерна заявка за КРЪСТНО ПРИСЪЕДИНЯВАНЕ за получаване на резултати от 2 таблици - Служител и office_locations
SELECT * from Employee CROSS JOIN office_locations
Върнатият изход ще съдържа общо 80 реда, което не е нищо друго освен произведение на редове в двете таблици - Служител (20) x office_locations (4) => 80
Моля, имайте предвид, че, докато правите CROSS JOIN, не е необходимо да указвате никакво условие JOIN, тъй като така или иначе бихте получили m x n резултат.
Бележки / съвети:
Няма да намерите много пъти, използвайки CROSS JOIN, тъй като не са свързани много случаи на употреба. Това присъединяване обикновено се изпълнява, когато някой иска да получи всички възможни комбинации срещу данни от 2 таблици.
Например: Да предположим, че сте износител на дрехи и имате 2 таблици - едната има цветни данни, а другата има данни за размера. Тук, за да осигурите инвентаризация, можете да помислите да направите КРЪСТО СЪЕДИНЕНИЕ на двете маси, за да сте сигурни, че всички дрехи са доставени за всички комбинации от размери и цветове.
САМО ПРИСЪЕДИНЯВАНЕ
SELF JOIN е точно като всяко друго ВЪТРЕШНО или ВЪНШНО присъединяване, с единствените изключения, че и двете таблици, т.е. таблицата за присъединяване и присъединяване, са еднакви.
Обикновено използваме SELF Joins, когато искаме да разберем връзката между редовете на една и съща таблица. Например, ако таблицата има и идентификатор на служител, и идентификатор на служител на надзорник, можем да се присъединим към таблицата срещу самата нея, ако искаме да разберем името на мениджъра спрямо името на служителя.
Моля, обърнете внимание, че за САМО СЪЕДИНЕНИЕ трябва да използвате псевдоними на таблици, за да могат да бъдат посочени условията за присъединяване, позовавайки се на правилната таблица.
Нека да видим пример тук:
SELECT e1.name as Employee1, e2.name as Employee2 from Employee e1 inner join Employee e2 on e1.office_id = e2.office_id where e1.Department_id = e2.Department_id
Тук се присъединихме към таблицата на служителите, за да открием имената на служителите, които имат едно и също местоположение на офиса и отдел
Служител1 | Служител2 |
---|---|
И | устойчивост |
ядове | ядове |
ядове | Вън |
Oficiis | офиси |
нещата | нещата |
нещата | Моля те |
И | И |
И | тяло |
нетърпение | нетърпение |
попадат | попадат |
нещата | нещата |
Че | Че |
Вън | ядове |
Вън | Вън |
устойчивост | И |
устойчивост | устойчивост |
устойчивост | тяло |
нужди | нужди |
тяло | И |
тяло | устойчивост |
тяло | тяло |
Моля те | нещата |
Моля те | Моля те |
Както вече бяхме обсъждали, SELF JOIN просто има таблици за присъединяване и присъединяване, можем да използваме SELF JOIN с INNER или OUTER Joins.
MySQL ПРИСЪЕДИНЕТЕ С АКТУАЛИЗИРАНЕ И ИЗТРИВАНЕ
Досега сме обсъждали Joins с инструкции SELECT. Въпреки това, Joins също могат да се използват с MySQL DELETE и UPDATE изрази.
Синтаксисът тук остава същият. Нека да видим няколко примера, за да разберем по-добре концепцията.
АКТУАЛИЗИРАНЕ С ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ
Да предположим, че искаме да променим адреса в таблицата на служителя на името на местоположението на офиса, което присъства в таблицата office_locations. Тук можем да използваме INNER JOIN, за да извлечем името на града от office_locations и да актуализираме същата заявка.
Примерна заявка:
UPDATE Employee emp inner join office_locations off_loc on emp.office_id = off_loc.id set emp.address = off_loc.address;
Подобно на това, UPDATE може да се използва и с други видове присъединявания, в зависимост от изискването срещу конкретни случаи на употреба.
ИЗТРИВАНЕ С ВЪТРЕШНО ПРИСЪЕДИНЕНИЕ
Ще използваме таблици, Employee и Employee_Departments като пример. Да предположим, че искаме да изтрием всички записи на служителите, които принадлежат към отдела за продажби, и искаме да изтрием и записа за отдел продажби.
Тъй като използвахме Department_id като ограничение FOREIGN KEY, следователно първо трябва ДА СТРАНИМ това ограничение, преди да използваме DELETE с JOIN за множество таблици.
Нека първо разберем името на ограничението, създадено за Department_id в таблицата на служителя. Просто изпълнете командата, за да получите командата CREATE TABLE.
show create table Employee
Ще получите изхода като:
CREATE TABLE `Employee` ( `name` varchar(100) DEFAULT NULL, `id` int NOT NULL AUTO_INCREMENT, `address` varchar(100) DEFAULT NULL, `Department_id` int DEFAULT NULL, `office_id` int DEFAULT NULL, PRIMARY KEY (`id`), KEY `Department_id` (`Department_id`), CONSTRAINT `Employee_ibfk_1` FOREIGN KEY (`Department_id`) REFERENCES `Employee_Department` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
Сега можете да препратите името на ограничението FOREIGN_KEY от горната команда, която е ‘Employee_ibfk_1’, и можем да използваме това име, за да изпуснем това ограничение от таблицата на служителя, като изпълним командата по-долу:
alter table Employee drop constraint Employee_ibfk_1
Сега нека изпълним командата DELETE с INNER JOIN
delete emp_dept, emp from Employee emp inner join Employee_Department emp_dept on emp.Department_id = emp_dept.id where emp.Department_id = 9
Резултатът от тази команда ще бъде не. от изтрити редове (и това трябва успешно да ИЗТРИВА редовете от двете таблици, посочени в заявката JOIN по-горе)
често задавани въпроси
В # 1) Колко вида присъединения има в MySQL?
Отговор: MySQL поддържа предимно 3 вида присъединявания. Това са:
- Вътрешно присъединяване
- Външно присъединяване - ляво външно присъединяване и дясно външно присъединяване
- Кръстосано присъединяване
В # 2) Може ли Join да се използва само за 2 маси?
Отговор: Обединенията могат да бъдат приложени към 2 или повече от 2 таблици. Повечето пъти присъединяванията се използват за 2 таблици.
По-долу е даден пример за ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ, използващо 3 таблици:
select Employee.name as emp_name, Employee_Department.name as dept_name, office_locations.address as office_location from Employee inner join Employee_Department on Employee.Department_id = Employee_Department.id inner join office_locations on Employee.office_id = office_locations.id
Резултат от горната заявка:
emp_name | dept_name | местоположение на офиса |
---|---|---|
Вън | Управление | Бангалор |
ядове | Управление | Бангалор |
нещата | Сигурност | Бангалор |
И | Договорен персонал | Мумбай |
нетърпение | Договорен персонал | Бангалор |
попадат | HR | Мумбай |
Че | поддържа | Мумбай |
устойчивост | Договорен персонал | Мумбай |
нужди | Счетоводство | Бангалор |
тяло | Договорен персонал | Мумбай |
Моля те | Сигурност | Бангалор |
В # 3) Как да използвам псевдоними на таблици с Joins?
Отговор: Псевдонимите са начин да се получи временно име за таблица, към която да се препраща в рамките на заявка. Тъй като заявките JOIN са понякога сложни и за да направят заявките четливи и да се избегне позоваване на имена на таблици за всяка препратка на колона, можем да съкратим имената с псевдоними.
Нека напишем INNER JOIN заявка, за да извлечем данни за всички имена на служители и имена на отдели от таблици съответно Employee и Employee_Departments.
select emp.name as emp_name, Department.name as dept_name from Employee emp inner join Employee_Department as Department on emp.Department_id = Department.id
В горната заявка можете да видите, че имаме псевдоним таблица на служителя като emp и таблица на служител_департамент като отдел и използваме псевдонимите за препращане към имена на колони и условия за присъединяване.
В # 4) Какво е КРЪСТНО ПРИСЪЕДИНЯВАНЕ?
Отговор: CROSS JOIN е вид присъединяване, при който потребителят иска да извлече декартовия продукт на присъединените таблици.
Резултатът от CROSS JOIN е m x n, където m е номерът на съвпадащите редове в първата таблица, а n е номерът на съвпадащите редове във втората таблица.
В # 5) Как да получите ПЪЛНО ВЪНШНО ПРИСЪЕДИНЕНИЕ в MySQL
Отговор: MySQL не предоставя ПЪЛНО ВЪНШНО ПРИСЪЕДИНЯВАНЕ като отделен тип Присъединяване за разлика от други бази данни като Microsoft SQL. За да получим резултати обаче, както би било извлечено ПЪЛНО ВЪНШНО ПРИСЪЕДИНЯВАНЕ, можем да комбинираме резултатите от ЛЯВО ВЪНШНО ПРИСЪЕДИНЯВАНЕ и ДЯСНО ВЪНШНО ПРИСЪЕДИНЯВАНЕ.
Например можем да извлечем подробности за служителите и отдела и да приложим обединение за ляво и дясно външно присъединяване.
Препоръчително четене = >> MySQL Union Operator
Заключение
В този урок научихме за различни видове присъединявания, които са налични в MySQL.
най-добрите приложения за шпиониране на някого
Обсъдихме INNER, OUTER, CROSS и SELF Joins и също така видяхме как JOIN заявките могат да бъдат използвани с UPDATE и DELETE изрази, за да има ефективни и оптимизирани заявки за обединени данни между 2 или повече от 2 таблици.
JOINS са една от най-основните използвани заявки и всеки, който използва или учи базирани на SQL бази данни, трябва да има задълбочено разбиране за SQL Joins.
Препоръчително четене
- Вътрешно присъединяване срещу външно присъединяване: Точна разлика с примери
- MySQL Урок за създаване на изглед с примери за кодове
- Изявление за изтриване на MySQL - Изтриване на синтаксис на командата и примери
- MySQL Вмъкване в таблица - Вмъкване на изявление Синтаксис и примери
- Урок за изявление за актуализация на MySQL - Синтаксис и примери за актуализиране на заявки
- Разлика между SQL Vs MySQL Vs SQL Server (с примери)
- Какво е MySQL и защо се използва?
- 20+ MongoDB урок за начинаещи: Безплатен курс на MongoDB