mysql join tutorial inner
Lees meer over verschillende MySQL JOIN-instructies zoals Inner, Outer, Cross, Left, Right en Self met syntaxis en programmeervoorbeelden:
In deze zelfstudie leren we over MySQL JOIN en begrijpen we ook de verschillende soorten joins die worden ondersteund in MySQL. JOIN in zijn eenvoudigste vorm kan worden gezien als een middel om gegevens uit meerdere tabellen op te halen / bij te werken of te verwijderen met een enkele query.
In wezen combineert JOIN dus 2 of meer tabellen om gegevens op te halen tegen een bepaalde voorwaarde.
MySQL ondersteunt ook andere verschillende manieren om gegevens uit meerdere tabellen op te vragen met - subquery's en door meerdere query's te combineren met UNION, enz.
Wat je leert:
- Genormaliseerde tabellen
- MySQL WORD LID
- Soorten MySQL JOIN
- MySQL WORD LID met UPDATE en VERWIJDER
- Gevolgtrekking
Genormaliseerde tabellen
In genormaliseerde MySQL-databases hebben tabellen relaties met gemeenschappelijke kolommen door middel van sleutelbeperkingen zoals externe sleutels.
Laten we dit proberen te begrijpen met behulp van een voorbeeld - Stel dat er 2 tabellen zijn, EMPLOYEE en EMPLOYEE_DEPARTMENT. Nu in een gedenormaliseerde database - d.w.z. een enkele tabel met alle kolommen, zou veel informatie over bijvoorbeeld de afdeling worden gedupliceerd, omdat er veel werknemers kunnen zijn die deel uitmaken van dezelfde afdeling.
Om die duplicaties te verminderen en op opslag te besparen, worden databases in een genormaliseerde staat gehouden.
Dus in dit geval verwijzen we naar de Afdeling met een veld Afdeling_id in de WERKNEMER-tabel en alle relevante informatie met betrekking tot Afdeling - zoals Afdelingsinfo, Afdelingshoofd, enz. Kan worden bewaard als onderdeel van de EMPLOYEE_DEPARTMENT-tabel.
Dus in een notendop: EMPLOYEE en EMPLOYEE_DEPARTMENT zijn aan elkaar gekoppeld via het Department_id-veld, dat fungeert als een BUITENLANDSE SLEUTEL voor de EMPLOYEE-tabel en PRIMAIRE SLEUTEL voor de EMPLOYEE_DEPARTMENT-tabel.
Onderstaande afbeelding is een picturale weergave met een relatie tussen beide tabellen door middel van Beperking buitenlandse sleutel
MySQL WORD LID
MySQL JOIN wordt gebruikt om gegevens van 2 of meer tabellen op te halen, bij te werken of te verwijderen tegen een bepaalde voorwaarde. Daarom wordt JOIN altijd gebruikt in combinatie met SELECT-, UPDATE- of DELETE-instructies
Syntaxis van de opdracht JOIN:
WORD LID met SELECT
WORD LID met UPDATE
WORD LID met DELETE
Houd er rekening mee dat JOIN kan worden toegepast op meerdere tabellen in een enkele zoekopdracht, maar laten we voor de eenvoud eerst proberen te begrijpen hoe Joins met 2 tabellen werkt.
De verschillende delen van de syntaxis zijn:
- {column_list} - Dit vertegenwoordigt de namen van kolommen die we willen ophalen als resultaat van onze zoekopdracht.
- {JoinType} - Dit geeft het type Join aan dat we aanvragen. Er zijn de volgende verschillende soorten JOINS die gegevens kunnen ophalen:
- BINNENKOM
- BUITENKOM
- LINKER BUITEN WORD LID
- RECHTS BUITEN MEEDOEN
- CROSS JOIN
We zullen over al deze verschillende soorten MySQL JOINS leren in de komende secties van de tutorial.
- {JoinCondition} - Dit zijn de kolomvoorwaarden die zouden worden gebruikt voor de JOIN om gegevens op te vragen en op te halen.
In de volgende sectie zullen we verschillende soorten joins bespreken die beschikbaar zijn in MySQL.
Soorten MySQL JOIN
Monstergegevens voorbereiding
Om de JOINS te gebruiken, gebruiken we 2 tabellen Employee en Employee_Department met de onderstaande gegevens. U kunt een nuttige site gebruiken / verwijzen hier om dummy-gegevens voor het schema te genereren.
Lijstquery's voor het maken en invoegen van tabellen:
BINNENKOM
INNER JOIN is de meest voorkomende vorm van JOIN en wordt veel gebruikt. U had dit bijna allemaal op een of ander moment moeten gebruiken. Laten we de syntaxis bekijken en vervolgens enkele voorbeeldquery's.
Syntaxis:
Vraag om afdelingsnamen op te halen voor alle werknemers uit de hierboven aangegeven tabellen (werknemer en werknemer_afdeling):
Hier is de uitvoer van de bovenstaande zoekopdracht:
Naam werknemer | Afdelingsnaam |
---|---|
dingen | Veiligheid |
WHO | Informatie Technologie |
En | HR |
overkomen | HR |
ik | Financiën |
behoeften | Boekhouding |
Fgit | Huishouding |
snacks | Veiligheid |
alstublieft | Veiligheid |
Dat | Ondersteuning |
En | Contractpersoneel |
gretigheid | Contractpersoneel |
veerkracht | Contractpersoneel |
lichaam | Contractpersoneel |
Eerlijk | Contractpersoneel |
kantoren | verkoop |
dingen | verkoop |
ergernissen | Beheer |
Pijnen | Beheer |
Uit | Beheer |
Notitie: Hier hebben we aliassen voor kolomnamen gebruikt. Voorbeeld: Employee.name als Employee_name - alleen om de resultaten leesbaarder en vollediger te maken.
Laten we deze zoekopdracht aanpassen om alleen de namen op te halen die beginnen met de letter ‘m’.
Hieronder is de output:
Naam werknemer | Afdelingsnaam | |||||
---|---|---|---|---|---|---|
snacks | 7 | 6961 Weissnat Drive Donnellyfort, MT 53947 | 6 | NUL | NUL | NUL |
ergernissen | Beheer | |||||
veerkracht | Contractpersoneel |
En laten we nu de INNER JOIN begrijpen met behulp van het Venn-diagram zoals hieronder. De resulterende rijen die worden geretourneerd, bestaan uit de overlappende gegevens tussen beide tabellen, zoals vergeleken met de voorwaarde JOIN.
BUITENKOM
OUTER JOIN wordt gebruikt om gegevens op te halen uit 2 of meer tabellen, met uitzondering van het opnemen van niet-overeenkomende rijen (of rijen met null-gegevens voor de opgevraagde kolommen).
Om Outer Join beter te begrijpen, voegt u een nieuwe tabel office_locations met velden - id en adres toe en voegt u een nieuwe kolom met de naam `office_id` toe aan de oorspronkelijk gemaakte Employee-tabel.
Hier zijn de vragen voor hetzelfde:
Raadpleeg het onderstaande Venn-diagram om de BUITENVERBINDINGEN picturaal te begrijpen:
Er zijn 2 soorten BUITENGEWRICHTEN
a) LINKER BUITEN VERBINDEN
Zoals de naam suggereert, haalt dit type Join alle rijen (inclusief NULL-waarden) op uit de tabel aan de linkerkant van de JOIN-query. In eenvoudige woorden, alle resultaten / rijen die niet overeenkomen met de JOIN-voorwaarde, worden geretourneerd met als resultaat NULL-waarden voor de juiste tabel.
Bijvoorbeeld, we hebben locatiegegevens nodig voor alle werknemers - d.w.z. zoek uit wat het kantooradres is van alle werknemers.
Uitvoer van de bovenstaande vraag:
Naam | ID kaart | Adres | Department_id | Office_id | Kantoor adres | ID kaart |
---|---|---|---|---|---|---|
ik | 1 | 640 Damon Junction East Mathew, NY 68818 | 3 | NUL | NUL | NUL |
ergernissen | twee | 6658 Hollis Club Ernamouth, TX 19743 | 10 | 1 | Bangalore | 1 |
kantoren | 3 | 59965 Mason Neck Apt. 985 Kareemborough, NV 85535 | 9 | twee | Mumbai | twee |
dingen | 4 | 91067 Fort Geovany] Hanefort, WA 92863 | 6 | 1 | Bangalore | 1 |
En | 5 | 7647 Reva Shores Suite 970 Nieuwe Audrafort, OH 17846-5397 | twee | NUL | NUL | NUL |
En | 6 | 9419 Carmela Burg Apt. 687 Aimeebury, SD 32389-4489 | 8 | twee | Mumbai | twee |
gretigheid | 8 | 117 Nellie Summit Suite 982 South Heavenfurt, CA 45675 | 8 | 1 | Bangalore | 1 |
overkomen | 9 | 9086 Mariam Square Suite 698 South Dulce, MT 82861-3079 | twee | twee | Mumbai | twee |
dingen | 10 | 783 Goodwin Burgs Apt. 429 Willmsfort, UT 42820-1019 | 9 | 1 | Bangalore | 1 |
WHO | elf | 42928 Ernesto Trail East Jules, WV 87169-2851 | 1 | NUL | NUL | NUL |
Dat | 12 | 161 Kassulke Stravenue Apt. 937 Williamsonton, MS 62622 | 7 | twee | Mumbai | twee |
Pijnen | 13 | 22811 Liliana Trail Apt. 890 South Ernesto, MT 04134 | 10 | NUL | NUL | NUL |
Uit | 14 | 981 Laron Viaduct Suite 361 West Olahaven, FL 46982-7801 | 10 | 1 | Bangalore | 1 |
veerkracht | vijftien | 411 Louisa Mill South Maximefort, MA 04903 | 8 | twee | Mumbai | twee |
behoeften | 16 | 2853 Jonathon Turnpike Quitzonville, KY 54776 | 4 | 1 | Bangalore | 1 |
FLED | 17 | 3647 Rosalinda Corner Maureenstad, RI 96605 | 5 | NUL | NUL | NUL |
lichaam | 18 | 03559 Nicholas Circle Apt. 364 West Zettaberg, ID 58592-3447 | 8 | twee | Mumbai | twee |
of | 19 | 56111 Alysson Gateway Apt. 212 Leschbury, VT 90605-2306 | 8 | NUL | NUL | NUL |
alstublieft | twintig | 263 O'Keefe Avenue Apt. 884 West Missouri, IL 50303 | 6 | 1 | Bangalore | 1 |
b) RECHTS BUITENKANT
Net als bij LEFT JOIN, worden bij dit type Join alle records die niet overeenkomen met de rechtertabel, geretourneerd met NULL-waarden op de kolommen voor de linkerzijtabel.
beoordelingen van youtube naar mp3 online converter
Bijvoorbeeld, met onze voorbeeldtabellen, als we de RIGHT JOIN uitvoeren tegen dezelfde query die we hebben gebruikt voor LEFT JOIN, krijgen we NULL-waarden voor steden 'Seattle' en 'Santa Clara' omdat er geen rijen in de Employee-tabel zijn met een locatie-set aan deze waarden.
Uitvoer van de bovenstaande vraag:
Naam | ID kaart | Adres | Department_id | Office_id | Kantoor adres | ID kaart |
---|---|---|---|---|---|---|
alstublieft | twintig | 263 O'Keefe Avenue Apt. 884 West Missouri, IL 50303 | 6 | 1 | Bangalore | 1 |
ergernissen | twee | 6658 Hollis Club Ernamouth, TX 19743 | 10 | 1 | Bangalore | 1 |
dingen | 4 | 91067 Fort Geovany Hanefort, WA 92863 | 6 | 1 | Bangalore | 1 |
gretigheid | 8 | 117 Nellie Summit Suite 982 South Heavenfurt, CA 45675 | 8 | 1 | Bangalore | 1 |
dingen | 10 | 783 Goodwin Burgs Apt. 429 Willmsfort, UT 42820-1019 | 9 | 1 | Bangalore | 1 |
Uit | 14 | 981 Laron Viaduct Suite 361 West Olahaven, FL 46982-7801 | 10 | 1 | Bangalore | 1 |
behoeften | 16 | 2853 Jonathon Turnpike Quitzonville, KY 54776 | 4 | 1 | Bangalore | 1 |
kantoren | 3 | 59965 Mason Neck Apt. 985 Kareemborough, NV 85535 | 9 | twee | Mumbai | twee |
En | 6 | 9419 Carmela Burg Apt. 687 Aimeebury, SD 32389-4489 | 8 | twee | Mumbai | twee |
overkomen | 9 | 9086 Mariam Square Suite 698 South Dulce, MT 82861-3079 | twee | twee | Mumbai | twee |
Dat | 12 | 161 Kassulke Stravenue Apt. 937 Williamsonton, MS 62622 | 7 | twee | Mumbai | twee |
veerkracht | vijftien | 411 Louisa Mill South Maximefort, MA 04903 | 8 | twee | Mumbai | twee |
lichaam | 18 | 03559 Nicholas Circle Apt. 364 West Zettaberg, ID 58592-3447 | 8 | twee | Mumbai | twee |
NUL | NUL | NUL | NUL | NUL | Seattle | 3 |
NUL | NUL | NUL | NUL | NUL | Santa Clara | 4 |
Opmerkingen / tips:
- In andere relationele databases, zoals Microsoft SQL, kunt u een ander type OUTER JOIN vinden dat FULL OUTER JOIN wordt genoemd. Het is niets anders dan een combinatie van zowel INNER- als OUTER-joins, d.w.z. het retourneert NULL-waarden uit zowel de LINKS- als de RECHTER-tabellen.
- Raadpleeg onze tutorial voor een gedetailleerde bespreking met uitleg en voorbeelden over verschillen tussen INNERLIJKE en BUITENGEWRICHTEN hier.
- In de OUTER JOIN-query's kunnen de RIGHT OUTER JOIN en LEFT OUTER JOIN gewoon worden opgegeven als respectievelijk RIGHT JOIN en LEFT JOIN voor meer leesbaarheid.
CROSS JOIN
CROSS JOIN wordt ook wel Cartesiaans product genoemd. Het retourneert een resultaat tegen overeenkomende Join-voorwaarden met een totaal van m x n rijen waarbij m en n een aantal overeenkomende rijen zijn in table1 en table2 tegen de JOIN-voorwaarde.
Laten we eens kijken naar een voorbeeldquery voor een CROSS JOIN om resultaten te krijgen van 2 tabellen: Employee en office_locations
De geretourneerde uitvoer bevat in totaal 80 rijen, wat niets anders is dan het product van rijen in beide tabellen - Werknemer (20) x office_locations (4) => 80
Houd er rekening mee dat, terwijl je CROSS JOIN doet, hoef je geen JOIN-voorwaarde op te geven, omdat je hoe dan ook het m x n-resultaat zou krijgen.
Opmerkingen / tips:
U zult niet vaak CROSS JOIN gebruiken, omdat er niet veel use-cases aan gekoppeld zijn. Deze join wordt over het algemeen uitgevoerd wanneer iemand alle mogelijke combinaties zoekt tegen gegevens uit 2 tabellen.
Bijvoorbeeld: Stel dat u een kledingexporteur bent en u heeft 2 tabellen: een met kleurgegevens en een andere met maatgegevens. Hier kunt u, om de inventaris te garanderen, overwegen om een CROSS JOIN te doen van beide tafels om ervoor te zorgen dat alle kledingstukken voor alle maat- en kleurencombinaties worden aangeschaft.
ZELF AANMELDEN
SELF JOIN is net als elke andere INNER of OUTER Join, met als enige uitzondering dat beide tabellen, d.w.z. de Joining- en Joined-tabel, hetzelfde zijn.
Over het algemeen gebruiken we SELF Joins als we de relatie tussen rijen van dezelfde tabel willen achterhalen. Bijvoorbeeld, als een tafel zowel Werknemer-ID als Supervisor Werknemer-ID heeft, kunnen we tegen zichzelf aan de tafel deelnemen als we de naam van de manager willen achterhalen tegenover de naam van de Werknemer.
Houd er rekening mee dat u voor SELF JOIN tabelaliassen moet gebruiken, zodat Join-voorwaarden kunnen worden gespecificeerd met verwijzing naar de juiste tabel.
Laten we hier een voorbeeld bekijken:
Hier hebben we ons aan de Medewerkerstabel toegevoegd om de namen van medewerkers te vinden die dezelfde kantoorlocatie en dezelfde afdeling hebben
Werknemer 1 | Werknemer 2 |
---|---|
En | veerkracht |
ergernissen | ergernissen |
ergernissen | Uit |
Oficiis | kantoren |
dingen | dingen |
dingen | alstublieft |
En | En |
En | lichaam |
gretigheid | gretigheid |
overkomen | overkomen |
dingen | dingen |
Dat | Dat |
Uit | ergernissen |
Uit | Uit |
veerkracht | En |
veerkracht | veerkracht |
veerkracht | lichaam |
behoeften | behoeften |
lichaam | En |
lichaam | veerkracht |
lichaam | lichaam |
alstublieft | dingen |
alstublieft | alstublieft |
Zoals we hadden besproken, heeft SELF JOIN alleen Joining en Joined-tabellen hetzelfde, we kunnen SELF JOIN gebruiken met INNER of OUTER Joins.
wat is een goede site om anime te kijken
MySQL WORD LID met UPDATE en VERWIJDER
Tot nu toe hebben we Joins besproken met SELECT-statements. Joins kunnen echter ook worden gebruikt met MySQL DELETE- en UPDATE-instructies.
De syntaxis blijft hier hetzelfde. Laten we een paar voorbeelden bekijken om het concept beter te begrijpen.
UPDATE met INNER JOIN
Stel dat we het adres in de tabel Werknemer willen wijzigen in de naam van de kantoorlocatie die aanwezig is in de tabel kantoorlocaties. Hier kunnen we INNER JOIN gebruiken om de stadsnaam op te halen uit office_locations en dezelfde query bij te werken.
Voorbeeldquery:
Op dezelfde manier kan UPDATE ook worden gebruikt met andere typen joins, afhankelijk van de vereisten voor specifieke gebruiksscenario's.
VERWIJDEREN met INNER JOIN
We zullen tabellen, Employee en Employee_Departments als voorbeeld gebruiken. Stel dat we alle medewerkersrecords die bij de verkoopafdeling horen willen verwijderen en we willen ook de boeking voor de verkoopafdeling verwijderen.
Omdat we Department_id hebben gebruikt als de FOREIGN KEY-beperking, moeten we die beperking daarom eerst DROP voordat we DELETE met JOIN gebruiken voor meerdere tabellen.
Laten we eerst eens kijken naar de naam van de beperking die is gemaakt voor Department_id in de tabel Werknemer. Voer gewoon de opdracht uit om de opdracht CREATE TABLE te krijgen.
U krijgt de uitvoer als:
Nu kunt u de naam van de FOREIGN_KEY-beperking van de bovenstaande opdracht, die ‘Employee_ibfk_1’ is, verwijzen en we kunnen deze naam gebruiken om deze beperking uit de Employee-tabel te verwijderen door de onderstaande opdracht uit te voeren:
Laten we nu de DELETE-opdracht uitvoeren met INNER JOIN
De uitvoer van deze opdracht zou nee zijn. rijen verwijderd (en dit zou met succes de rijen moeten VERWIJDEREN uit beide tabellen waarnaar wordt verwezen in de JOIN-query hierboven)
Veel Gestelde Vragen
V # 1) Hoeveel soorten joins zijn er in MySQL?
Antwoord: MySQL ondersteunt voornamelijk 3 soorten joins. Dit zijn:
- Innerlijke verbinding
- Buitenste verbinding - Linker buitenste verbinding en rechter buitenste verbinding
- Cross Join
V # 2) Kan Join alleen voor 2 tafels worden gebruikt?
Antwoord: Joins kunnen worden toegepast op 2 of meer dan 2 tafels. Meestal worden Joins gebruikt voor 2 tafels.
Hieronder ziet u een voorbeeld van een INNER JOIN met 3 tabellen:
Uitvoer van de bovenstaande vraag:
emp_naam | afdelingsnaam | kantoor locatie |
---|---|---|
Uit | Beheer | Bangalore |
ergernissen | Beheer | Bangalore |
dingen | Veiligheid | Bangalore |
En | Contractpersoneel | Mumbai |
gretigheid | Contractpersoneel | Bangalore |
overkomen | HR | Mumbai |
Dat | Ondersteuning | Mumbai |
veerkracht | Contractpersoneel | Mumbai |
behoeften | Boekhouding | Bangalore |
lichaam | Contractpersoneel | Mumbai |
alstublieft | Veiligheid | Bangalore |
V # 3) Hoe gebruik je tabelaliassen met joins?
Antwoord: Aliassen zijn een manier om een tijdelijke naam te hebben voor een tabel waarnaar in een query moet worden verwezen. Omdat JOIN-query's soms complex zijn en om de query's leesbaar te maken en te vermijden dat naar tabelnamen voor elke kolomverwijzing wordt verwezen, kunnen we namen met aliassen verkorten.
Laten we een INNER JOIN-query schrijven om gegevens op te halen voor alle namen van werknemers en namen van afdelingen uit respectievelijk de tabellen Employee en Employee_Departments.
In de bovenstaande zoekopdracht kunt u zien dat we de Medewerkerstabel als emp en de Medewerkerstabel als Afdeling hebben gealiast en de aliassen hebben gebruikt voor het verwijzen naar kolomnamen en Join-voorwaarden.
V # 4) Wat is CROSS JOIN?
Antwoord: CROSS JOIN is een type Join waarbij de gebruiker het Cartesiaans product wil ophalen van de tabellen die worden samengevoegd.
Het resultaat van CROSS JOIN is m x n waarbij m het aantal overeenkomende rijen in de eerste tabel is en n het aantal overeenkomende rijen in de tweede tabel.
Q # 5) Hoe FULL OUTER JOIN te verkrijgen in MySQL
Antwoord: MySQL biedt geen FULL OUTER JOIN als een apart Join-type in tegenstelling tot andere databases zoals Microsoft SQL. Om resultaten te verkrijgen zoals een FULL OUTER JOIN zou hebben opgehaald, kunnen we de resultaten van LEFT OUTER JOIN en RIGHT OUTER JOIN combineren.
We kunnen bijvoorbeeld gegevens van werknemers en afdelingen ophalen en unie toepassen op Left en Right Outer Joins.
Aanbevolen literatuur = >> MySQL Union-operator
Gevolgtrekking
In deze tutorial hebben we geleerd over verschillende soorten joins die beschikbaar zijn in MySQL.
We bespraken INNER-, OUTER-, CROSS- en SELF Joins en zagen ook hoe JOIN-query's konden worden gebruikt met UPDATE- en DELETE-instructies om efficiënte en geoptimaliseerde query's te hebben voor samengevoegde gegevens tussen 2 of meer dan 2 tabellen.
JOINS is een van de meest elementaire queries en iedereen die SQL-gebaseerde databases gebruikt of leert, moet een grondige kennis hebben van SQL Joins.
Aanbevolen literatuur
- Inner Join Vs Outer Join: exact verschil met voorbeelden
- MySQL Create Bekijk zelfstudie met codevoorbeelden
- MySQL Delete-instructie - Verwijder opdrachtsyntaxis en voorbeelden
- MySQL invoegen in tabel - Verklaring syntaxis en voorbeelden invoegen
- MySQL Update Statement Tutorial - Update Query Syntax & Voorbeelden
- Verschil tussen SQL versus MySQL versus SQL Server (met voorbeelden)
- Wat is MySQL en waarom wordt het gebruikt?
- 20+ MongoDB-zelfstudie voor beginners: gratis MongoDB-cursus