mysql join tutorial inner
Dozviete sa tu o rôznych príkazoch MySQL JOIN, ako sú Inner, Outer, Cross, Left, Right a Self, pomocou príkladov syntaxe a programovania:
V tomto tutoriáli sa dozvieme o MySQL JOIN a tiež pochopíme rôzne typy spojení, ktoré sú podporované v MySQL. JOIN v najjednoduchšej podobe možno považovať za prostriedok na získanie / aktualizáciu alebo odstránenie údajov z viacerých tabuliek na základe jedného dotazu.
JOIN teda v podstate kombinuje 2 alebo viac tabuliek na načítanie údajov oproti danej podmienke.
MySQL podporuje aj ďalšie rôzne spôsoby dotazovania sa na dáta z viacerých tabuliek pomocou - poddotazov a kombináciou viacerých dotazov pomocou UNION atď.
Čo sa dozviete:
- Normalizované tabuľky
- PRIPOJTE SA k MySQL
- Typy pripojenia MySQL
- MySQL SA PRIPOJTE S AKTUALIZÁCIOU A ODSTRÁNENÍM
- Záver
Normalizované tabuľky
V normalizovaných databázach MySQL majú tabuľky vzťahy s bežnými stĺpcami prostredníctvom kľúčových obmedzení, ako sú Cudzie kľúče.
Pokúsme sa to pochopiť pomocou príkladu - Predpokladajme, že existujú 2 tabuľky, EMPLOYEE a EMPLOYEE_DEPARTMENT. Teraz v denormalizovanej databáze - teda v jednej tabuľke so všetkými stĺpcami, by sa duplikovalo veľa informácií, napríklad o tomto oddelení, pretože tam môže byť veľa zamestnancov, ktorí sú súčasťou toho istého oddelenia.
Preto sa tieto duplikácie zmenšujú a šetria sa na úložisku. Databázy sa udržiavajú v normalizovanom stave.
Takže v takom prípade by sme na Oddělení odkazovali v poli EMPLOYEE pole Department_id a všetky relevantné informácie týkajúce sa Department, ako sú Department Info, vedúci oddelenia, atď. Môžu byť uchované ako súčasť tabuľky EMPLOYEE_DEPARTMENT.
Stručne povedané - EMPLOYEE a EMPLOYEE_DEPARTMENT sú navzájom prepojené prostredníctvom poľa Department_id, ktoré slúži ako ZAHRANIČNÝ KLÍČ pre tabuľku EMPLOYEE a PRIMARY KEY pre tabuľku EMPLOYEE_DEPARTMENT.
Pod obrázkom je obrázkové znázornenie, ktoré má vzťah medzi oboma týmito tabuľkami pomocou prostriedkov Obmedzenie cudzieho kľúča
PRIPOJTE SA k MySQL
MySQL JOIN sa používa na načítanie, aktualizáciu alebo odstránenie údajov z 2 alebo viacerých tabuliek za daných podmienok. Preto sa JOIN vždy používa v spojení s príkazmi SELECT, UPDATE alebo DELETE
Syntax príkazu JOIN:
PRIPOJTE SA S VÝBEROM
SELECT {column_list} FROM tableName1 {joinType} tableName2 ON {joinCondition}
PRIPOJTE SA S AKTUALIZÁCIOU
DELETE FROM tableName1 {joinType} tableName2 ON {joinCondition} WHERE {condition}
PRIPOJTE SA S DELETE
UPDATE tableName1 SET targetColumn = targetValue FROM tableName1 {joinType} tableName2 ON {joinCondition} WHERE {condition}
Upozorňujeme, že JOIN je možné použiť na viac tabuliek v jednom dotaze, ale pre jednoduchosť sa najskôr pokúsime porozumieť použitiu spojení s 2 tabuľkami.
Medzi rôzne časti syntaxe patria:
- {column_list} - Toto predstavuje názvy stĺpcov, ktoré chceme získať ako výsledok nášho dotazu.
- {JoinType} - To naznačuje typ spojenia, ktorý uplatňujeme. Existujú nasledujúce rôzne typy JOINS, ktoré môžu načítať údaje:
- VNÚTORNÉ PRIPOJENIE
- VONKAJŠÍ SPOJ
- ĽAVÝ VONKAJŠÍ PRÍSTUP
- PRAVÉ VONKAJŠIE PRIPOJENIE
- CROSS JOIN
O všetkých týchto rôznych druhoch MySQL JOINS sa dozvieme v nasledujúcich častiach tohto tutoriálu.
- {JoinCondition} - Toto sú podmienky stĺpca, ktoré by sa použili pre JOIN na dopytovanie a načítanie údajov.
V nasledujúcej časti si rozoberieme rôzne typy pripojení, ktoré sú k dispozícii v MySQL.
Typy pripojenia MySQL
Príprava vzorových údajov
Na použitie SPOJENÍ použijeme 2 tabuľky Employee a Employee_Department s podrobnosťami uvedenými nižšie. Môžete použiť / odkazovať na užitočné stránky tu za účelom generovania fiktívnych údajov pre schému.
Zoznam dotazov na vytvorenie a vloženie tabuľky:
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'),
VNÚTORNÉ PRIPOJENIE
INNER JOIN je najbežnejšia forma pripojenia a je veľmi široko používaná. Takmer všetci ste to niekedy mali používať. Pozrime sa na syntax a potom na niektoré vzorové dotazy.
Syntax:
SELECT {column_list} FROM tableName1 INNER JOIN tableName2 ON {joinCondition}
Dotaz na načítanie mien Department_names pre všetkých zamestnancov z vyššie deklarovaných tabuliek (Employee and 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
Tu je výstup z vyššie uvedeného dotazu:
Meno zamestnanca | Názov oddelenia |
---|---|
veci | Bezpečnosť |
SZO | Informačné technológie |
A | HR |
postihnúť | HR |
Ja | Financie |
potreby | Účtovníctvo |
Fgit | Vedenie domácnosti |
občerstvenie | Bezpečnosť |
prosím | Bezpečnosť |
To | podpora |
A | Zmluvný zamestnanec |
dychtivosť | Zmluvný zamestnanec |
odolnosť | Zmluvný zamestnanec |
telo | Zmluvný zamestnanec |
Fér | Zmluvný zamestnanec |
úrady | Predaj |
veci | Predaj |
nepríjemnosti | Zvládanie |
Bolesti | Zvládanie |
Von | Zvládanie |
Poznámka: Tu sme použili aliasy názvov stĺpcov. Príklad: Employee.name ako Employee_name - len aby boli výsledky čitateľnejšie a komplexnejšie.
Upravme tento dopyt tak, aby načítal iba mená začínajúce písmenom „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%'
Nižšie je uvedený výstup:
Meno zamestnanca | Názov oddelenia | |||||
---|---|---|---|---|---|---|
občerstvenie | 7 | 6961 Weissnat Drive Donnellyfort, MT 53947 | 6 | NULOVÝ | NULOVÝ | NULOVÝ |
nepríjemnosti | Zvládanie | |||||
odolnosť | Zmluvný zamestnanec |
A teraz poďme pochopiť VNÚTORNÉ PRIPOJENIE pomocou Vennovho diagramu, ako je uvedené nižšie. Výsledné vrátené riadky pozostávajú z prekrývajúcich sa údajov medzi oboma tabuľkami porovnaných s podmienkou JOIN.
VONKAJŠÍ SPOJ
OUTER JOIN sa používa na načítanie údajov z 2 alebo viacerých tabuliek, s výnimkou zahrnutia tiež nezodpovedajúcich riadkov (alebo riadkov s nulovými údajmi pre dotazované stĺpce).
Aby ste lepšie porozumeli vonkajšiemu spojeniu, pridajte novú tabuľku office_locations s poľami - id a adresa a do pôvodne vytvorenej tabuľky zamestnancov pridajte nový stĺpec s názvom `office_id`.
Tu sú rovnaké dotazy:
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;
Nižšie je uvedený Vennov diagram, aby ste obrazne pochopili VONKAJŠIE SPOJENIA:
Existujú 2 typy VONKAJŠÍCH SPOJENÍ
a) VĽAVO VONKAJŠÍ
Ako naznačuje názov, tento typ spojenia by načítal všetky riadky (vrátane hodnôt NULL) z tabuľky, ktorá sa nachádza na ľavej strane dotazu JOIN. Jednoducho povedané, všetky výsledky / riadky, ktoré sa nezhodujú s podmienkou JOIN, sa vrátia s výsledkom, ktorý má pre správnu tabuľku hodnoty NULL.
Napríklad, potrebujeme lokalizačné údaje o všetkých zamestnancoch - teda zistiť, aká je adresa kancelárie všetkých zamestnancov.
SELECT * from Employee LEFT OUTER JOIN office_locations ON Employee.office_id = office_locations.id
Výstup vyššie uvedeného dotazu:
názov | Id | Adresa | Identifikačné číslo oddelenia | Office_id | Adresa kancelárie | Id |
---|---|---|---|---|---|---|
Ja | jeden | 640 Damon Junction East Mathew, NY 68818 | 3 | NULOVÝ | NULOVÝ | NULOVÝ |
nepríjemnosti | dva | 6658 Hollis Club Ernamouth, TX 19743 | 10 | jeden | Bangalore | jeden |
úrady | 3 | 59965 Mason Neck Apt. 985 Kareemborough, NV 85535 | 9 | dva | Bombaj | dva |
veci | 4 | 91067 Pevnosť Geovany) Hanefort, WA 92863 | 6 | jeden | Bangalore | jeden |
A | 5 | 7647 Reva Shores Suite 970 New Audrafort, OH 17846-5397 | dva | NULOVÝ | NULOVÝ | NULOVÝ |
A | 6 | 9419 Carmela Burg Apt. 687 Aimeebury, SD 32389-4489 | 8 | dva | Bombaj | dva |
dychtivosť | 8 | 117 Nellie Summit Suite 982 South Heavenfurt, CA 45675 | 8 | jeden | Bangalore | jeden |
postihnúť | 9 | Suita 9086 Mariam Square 698 South Dulce, MT 82861-3079 | dva | dva | Bombaj | dva |
veci | 10 | 783 Goodwin Burgs Apt. 429 Willmsfort, UT 42820-1019 | 9 | jeden | Bangalore | jeden |
SZO | jedenásť | 42928 Ernesto Trail East Jules, WV 87169-2851 | jeden | NULOVÝ | NULOVÝ | NULOVÝ |
To | 12 | 161 Kassulke Stravenue Apt. 937 Williamsonton, MS 62622 | 7 | dva | Bombaj | dva |
Bolesti | 13 | 22811 Liliana Trail Apt. 890 South Ernesto, MT 04134 | 10 | NULOVÝ | NULOVÝ | NULOVÝ |
Von | 14 | 981 Nadjazd Laron Suite 361 West Olahaven, FL 46982-7801 | 10 | jeden | Bangalore | jeden |
odolnosť | pätnásť | 411 Louisa Mill South Maximefort, MA 04903 | 8 | dva | Bombaj | dva |
potreby | 16 | 2853 diaľnica Jonathon Quitzonville, KY 54776 | 4 | jeden | Bangalore | jeden |
FLED | 17 | 3647 Roh Rosalindy Maureenstad, RI 96605 | 5 | NULOVÝ | NULOVÝ | NULOVÝ |
telo | 18 | 03559 Nicholas Circle Apt. 364 West Zettaberg, IČO 58592-3447 | 8 | dva | Bombaj | dva |
alebo | 19 | 56111 Alysson Gateway Apt. 212 Leschbury, VT 90605-2306 | 8 | NULOVÝ | NULOVÝ | NULOVÝ |
prosím | dvadsať | 263 O'Keefe Avenue Apt. 884 West Missouri, IL 50303 | 6 | jeden | Bangalore | jeden |
b) PRAVÉ VONKAJŠIE SPOJENIE
Podobne ako LEFT JOIN, aj v tomto type spojenia sa všetky záznamy, ktoré sa nezhodujú z pravej tabuľky, vrátia s hodnotami NULL v stĺpcoch tabuľky na ľavej strane.
Otázky a odpovede na skúšku CSQA vo formáte PDF
Napríklad, s našimi vzorovými tabuľkami, ak spustíme RIGHT JOIN proti rovnakému dotazu, ktorý sme použili pre LEFT JOIN, dostaneme hodnoty NULL pre mestá „Seattle“ a „Santa Clara“, pretože v tabuľke Zamestnanci nie sú žiadne riadky, ktoré majú nastavené umiestnenie k týmto hodnotám.
SELECT * from Employee RIGHT OUTER JOIN office_locations ON Employee.office_id = office_locations.id
Výstup vyššie uvedeného dotazu:
názov | Id | Adresa | Identifikačné číslo oddelenia | Office_id | Adresa kancelárie | Id |
---|---|---|---|---|---|---|
prosím | dvadsať | 263 O'Keefe Avenue Apt. 884 West Missouri, IL 50303 | 6 | jeden | Bangalore | jeden |
nepríjemnosti | dva | 6658 Hollis Club Ernamouth, TX 19743 | 10 | jeden | Bangalore | jeden |
veci | 4 | 91067 Pevnosť Geovany Hanefort, WA 92863 | 6 | jeden | Bangalore | jeden |
dychtivosť | 8 | 117 Nellie Summit Suite 982 South Heavenfurt, CA 45675 | 8 | jeden | Bangalore | jeden |
veci | 10 | 783 Goodwin Burgs Apt. 429 Willmsfort, UT 42820-1019 | 9 | jeden | Bangalore | jeden |
Von | 14 | 981 Nadjazd Laron Suite 361 West Olahaven, FL 46982-7801 | 10 | jeden | Bangalore | jeden |
potreby | 16 | 2853 diaľnica Jonathon Quitzonville, KY 54776 | 4 | jeden | Bangalore | jeden |
úrady | 3 | 59965 Mason Neck Apt. 985 Kareemborough, NV 85535 | 9 | dva | Bombaj | dva |
A | 6 | 9419 Carmela Burg Apt. 687 Aimeebury, SD 32389-4489 | 8 | dva | Bombaj | dva |
postihnúť | 9 | Suita 9086 Mariam Square 698 South Dulce, MT 82861-3079 | dva | dva | Bombaj | dva |
To | 12 | 161 Kassulke Stravenue Apt. 937 Williamsonton, MS 62622 | 7 | dva | Bombaj | dva |
odolnosť | pätnásť | 411 Louisa Mill South Maximefort, MA 04903 | 8 | dva | Bombaj | dva |
telo | 18 | 03559 Nicholas Circle Apt. 364 West Zettaberg, IČO 58592-3447 | 8 | dva | Bombaj | dva |
NULOVÝ | NULOVÝ | NULOVÝ | NULOVÝ | NULOVÝ | Seattle | 3 |
NULOVÝ | NULOVÝ | NULOVÝ | NULOVÝ | NULOVÝ | Santa Clara | 4 |
Poznámky / tipy:
- V iných relačných databázach, ako je Microsoft SQL, môžete nájsť iný typ VONKAJŠIEHO SPOJENIA, ktorý sa nazýva FULL OUTER JOIN. Nie je to nič iné ako kombinácia INNER aj OUTER Joins - tj. Vráti hodnoty NULL z tabuliek LEFT aj RIGHT.
- Podrobnú diskusiu, vysvetlenie a príklady rozdielov medzi VNÚTORNÝM a VONKAJŠÍM SPOJENÍM nájdete v našom výučbe tu.
- V dotazoch OUTER JOIN - RIGHT OUTER JOIN a LEFT OUTER JOIN je možné kvôli lepšej čitateľnosti len zadať ako RIGHT JOIN a LEFT JOIN.
CROSS JOIN
CROSS JOIN sa nazýva aj karteziánsky produkt. Vráti výsledok proti vyhovujúcim podmienkam spojenia s celkovým počtom m x n riadkov, kde m a n sú počet zodpovedajúcich riadkov v tabuľke1 a tabuľke2 proti podmienke JOIN.
Pozrime sa na ukážku dopytu CROSS JOIN na získanie výsledkov z 2 tabuliek - Employee and office_locations
SELECT * from Employee CROSS JOIN office_locations
Vrátený výstup bude obsahovať celkom 80 riadkov, čo nie je nič iné ako súčin riadkov v oboch tabuľkách - Employee (20) x office_locations (4) => 80
Vezmite prosím na vedomie, že, pri vytváraní CROSS JOIN nemusíte špecifikovať žiadnu podmienku JOIN, pretože by ste aj tak dostali m x n výsledok.
Poznámky / tipy:
Pri použití CROSS JOIN nenájdete veľa krát, pretože nie je spojených veľa prípadov použitia. Toto spojenie sa zvyčajne vykonáva, keď niekto hľadá všetky možné kombinácie s údajmi z 2 tabuliek.
Napríklad: Predpokladajme, že ste vývozcovia odevov a máte 2 tabuľky - jednu s farebnými údajmi a druhú s veľkosťou. Tu, aby ste zaistili inventár, môžete zvážiť PRIROZENÉ SPOJENIE oboch tabuliek, aby ste zaistili, že všetky odevy budú obstarané pre všetky veľkosti a farebné kombinácie.
tutoriál pre Microsoft Dynamics Axe 2012 pre začiatočníkov
SAMO PRIPOJTE SA
SAMOSTATNÉ PRIPOJENIE je ako každé iné VNÚTORNÉ alebo VONKAJŠIE spojenie, iba s výnimkou, že obidve tabuľky, t. J. Tabuľka Joining aj Joined Table, sú rovnaké.
Spravidla používame SELF Joins, keď chceme zistiť vzťah medzi riadkami tej istej tabuľky. Napríklad, ak má tabuľka ID zamestnanca aj zamestnanca vedúceho zamestnanca, môžeme sa k nej pripojiť sami, ak chceme zistiť meno manažéra podľa mena zamestnanca.
Upozorňujeme, že pre SELF JOIN by ste mali používať aliasy tabuliek, aby bolo možné určiť podmienky spojenia s odkazom na správnu tabuľku.
Pozrime sa na príklad:
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
Tu sme sa k sebe pripojili k tabuľke Zamestnanci, aby sme zistili mená zamestnancov, ktorí majú rovnaké pracovisko a oddelenie
Zamestnanec1 | Zamestnanec2 |
---|---|
A | odolnosť |
nepríjemnosti | nepríjemnosti |
nepríjemnosti | Von |
Oficiis | úrady |
veci | veci |
veci | prosím |
A | A |
A | telo |
dychtivosť | dychtivosť |
postihnúť | postihnúť |
veci | veci |
To | To |
Von | nepríjemnosti |
Von | Von |
odolnosť | A |
odolnosť | odolnosť |
odolnosť | telo |
potreby | potreby |
telo | A |
telo | odolnosť |
telo | telo |
prosím | veci |
prosím | prosím |
Ako sme už diskutovali, SELF JOIN má práve Joining aj Joined tabuľky rovnaké, môžeme teda SELF JOIN použiť s INNER alebo OUTER Joins.
MySQL SA PRIPOJTE S AKTUALIZÁCIOU A ODSTRÁNENÍM
Zatiaľ sme diskutovali o spojeniach pomocou príkazov SELECT. Spojenia sa však dajú použiť aj s príkazmi MySQL DELETE a UPDATE.
Syntax tu zostáva rovnaká. Pozrime sa na niekoľko príkladov, aby sme koncept lepšie pochopili.
AKTUALIZÁCIA S VNÚTORNÝM PRIPOJENÍM
Predpokladajme, že chceme zmeniť adresu v tabuľke Zamestnanci na názov umiestnenia kancelárie, ktorý je uvedený v tabuľke office_locations. Tu môžeme použiť INNER JOIN na načítanie názvu mesta z office_locations a aktualizáciu rovnakého dotazu.
Ukážka dopytu:
UPDATE Employee emp inner join office_locations off_loc on emp.office_id = off_loc.id set emp.address = off_loc.address;
Podobne je možné UPDATE použiť aj s inými typmi pripojení, v závislosti od požiadavky na konkrétne prípady použitia.
ODSTRÁNIŤ S VNÚTORNÝM PRIPOJENÍM
Ako príklad použijeme tabuľky, Employee a Employee_Departments. Predpokladajme, že chceme vymazať všetky záznamy o zamestnancoch, ktoré patria do obchodného oddelenia, a chceme vymazať aj záznam pre obchodné oddelenie.
Pretože sme použili Department_id ako obmedzenie FOREIGN KEY, mali by sme teda najskôr DROP toto obmedzenie predtým, ako použijeme DELETE s JOIN pre viac tabuliek.
Najprv zistíme názov obmedzenia, ktoré bolo vytvorené pre Department_id v tabuľke Zamestnanci. Jednoduchým spustením príkazu získate príkaz CREATE TABLE.
show create table Employee
Výstup dostanete ako:
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
Teraz môžete odkázať na názov obmedzenia FOREIGN_KEY z vyššie uvedeného príkazu, ktorý je „Employee_ibfk_1“, a pomocou tohto názvu môžeme toto obmedzenie zrušiť z tabuľky Employee spustením nasledujúceho príkazu:
alter table Employee drop constraint Employee_ibfk_1
Teraz spustíme príkaz DELETE s 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
Výstup tohto príkazu by bol č. riadkov odstránených (a to by malo úspešne ODSTRÁNIŤ riadky z oboch tabuliek, na ktoré sa odkazuje v dotaze JOIN vyššie)
často kladené otázky
Otázka č. 1) Koľko typov pripojení existuje v MySQL?
Odpoveď: MySQL podporuje primárne 3 typy pripojení. Sú to:
- Vnútorné pripojenie
- Vonkajší spoj - ľavý vonkajší spoj a pravý vonkajší spoj
- Krížový spoj
Otázka č. 2) Môže sa program Join použiť len pre 2 stoly?
Odpoveď: Spojenia je možné použiť na 2 alebo na viac ako 2 tabuľky. Väčšinou sa spojenia používajú pre 2 stoly.
Nižšie je uvedený príklad VNÚTORNÉHO SPOJENIA pomocou 3 tabuliek:
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
Výstup vyššie uvedeného dotazu:
emp_name | dept_name | office_location |
---|---|---|
Von | Zvládanie | Bangalore |
nepríjemnosti | Zvládanie | Bangalore |
veci | Bezpečnosť | Bangalore |
A | Zmluvný zamestnanec | Bombaj |
dychtivosť | Zmluvný zamestnanec | Bangalore |
postihnúť | HR | Bombaj |
To | podpora | Bombaj |
odolnosť | Zmluvný zamestnanec | Bombaj |
potreby | Účtovníctvo | Bangalore |
telo | Zmluvný zamestnanec | Bombaj |
prosím | Bezpečnosť | Bangalore |
Otázka č. 3) Ako používať aliasy tabuliek s Joins?
Odpoveď: Aliasy sú spôsob, ako získať dočasný názov pre tabuľku, na ktorú sa má odkazovať v rámci dotazu. Pretože JOIN dotazy sú niekedy zložité a aby boli dotazy čitateľné a aby sa zabránilo odkazom na názvy tabuliek pre každý odkaz na stĺpec, môžeme mať skrátené názvy s aliasmi.
Poďme napísať dotaz INNER JOIN na načítanie údajov pre všetky mená zamestnancov a názvy oddelení z tabuliek Employee a 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
Vo vyššie uvedenom dotaze môžete vidieť, že sme aliasovali tabuľku zamestnancov ako emp a tabuľku Employee_Department ako oddelenie a aliasy sme použili na odkazovanie na názvy stĺpcov a podmienky spojenia.
Otázka č. 4) Čo je CROSS JOIN?
Odpoveď: CROSS JOIN je typ spojenia, pri ktorom chce používateľ načítať karteziánsky súčin tabuliek, ku ktorým sa pripája.
Výsledok CROSS JOIN je m x n, kde m je počet zodpovedajúcich riadkov v prvej tabuľke an je počet zodpovedajúcich riadkov v druhej tabuľke.
Otázka č. 5) Ako získať FULL OUTER JOIN v MySQL
Odpoveď: MySQL neposkytuje FULL OUTER JOIN ako samostatný typ spojenia na rozdiel od iných databáz, ako je Microsoft SQL. Avšak na získanie výsledkov, ktoré by priniesol FULL OUTER JOIN, môžeme kombinovať výsledky LEFT OUTER JOIN a RIGHT OUTER JOIN.
Napríklad môžeme načítať podrobnosti o zamestnancovi a oddelení a použiť spojenie na ľavé a pravé vonkajšie spojenie.
Odporúčané čítanie = >> Prevádzkovateľ únie MySQL
Záver
V tomto tutoriáli sme sa dozvedeli o rôznych druhoch pripojení, ktoré sú k dispozícii v MySQL.
Diskutovali sme o INNER, OUTER, CROSS a SELF Joins a tiež sme videli, ako je možné použiť dotazy JOIN s príkazmi UPDATE a DELETE na efektívne a optimalizované dotazy na spojené dáta medzi 2 alebo viac ako 2 tabuľkami.
JOINS sú jedným z najzákladnejších používaných dotazov a každý, kto používa alebo sa učí databázy založené na SQL, by mal dôkladne porozumieť spojeniam SQL.
Odporúčané čítanie
- Vnútorný spoj vs Vonkajší spoj: Presný rozdiel s príkladmi
- Výukový program na vytvorenie prehľadu MySQL s príkladmi kódu
- Príkaz na odstránenie MySQL - odstránenie syntaxe príkazov a príkladov
- MySQL Vložiť do tabuľky - Vložiť syntax príkazov a príklady
- Výukový program pre vyhlásenie o aktualizácii MySQL - aktualizácia syntaxe dotazov a príklady
- Rozdiel medzi serverom SQL Vs MySQL Vs SQL Server (s príkladmi)
- Čo je MySQL a prečo sa používa?
- 20+ výučba MongoDB pre začiatočníkov: bezplatný kurz MongoDB