sql >> Databasteknik >  >> RDS >> Database

Typer av SQL JOIN

SQL JOIN kombinerar en eller flera tabeller baserat på deras relation. SQL JOIN involverar en överordnad tabell och en underordnad tabellrelation.

Det finns olika typer av SQL JOINS:

  1. Inre koppling
  2. Left Outer Join
  3. Right Outer Join
  4. Fullständig yttre sammanfogning
  5. Cross Join.

Låt oss förstå varje typ av SQL-kopplingar med hjälp av exempel.

Inre Join

Inner Join i SQL är en allmänt använd join. Den hämtade alla poster från båda tabellerna tills och om inte villkoret matchade. Det betyder att denna koppling endast returnerar de rader som är vanliga i båda tabellerna.

Syntax för SQL Inner Join:

VÄLJ  Tabellnamn1.Kolumn_Namn1,     Tabellnamn1.Kolumnnamn2, Tabellnamn1.Kolumnnamn3,Tabellnamn2.Kolumnnamn1,Tabellnamn2.Kolumnnamn2, Tabellnamn2.Kolumnnamn3, FROM Tabellnamn1.Kolumnnamn1 T_Kolumn tabell INNER T_Namn JOIN>Tabell_Namn T_Kolumn tabell_Namn. 

Tänk på de redan befintliga tabellerna som har vissa data:

Tabell 1:Anställda

ANSTÄLLDA ID FIRST_NAME LAST_NAME LÖN STAD AVDELNING MANAGERID
1001 VAIBHAVI MISHRA 65500 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60 000 NOIDA C# 5
1003 NIKHIL VANI 50500 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 CHANDIGARH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50 000 MUMBAI C# 5
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA WANRE 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TESTER 4
4002 ASHWINI BAGHAT 54500 NOIDA JAVA 3
4003 RUCHIKA AGARWAL 60 000 DELHI ORACLE 1
5001 ARCHIT SHARMA 55500 DELHI TESTER 4

Tabell 2:Manager

Managerid manager_name manager_department
1 Snehdeep Kaur ORACLE
2 Kirti Kirtane FMW
3 Abhishek Manish JAVA
4 Anupam Mishra TESTER
5 Akash Kadam C#

Tabell 3:Bärbar dator:

LAPTOPID NAMN ANSTÄLLD
L101 DELL NULL
L102 HP 1002
L103 LENOVO NULL
L104 HP 3003
L105 DELL 4002
L106 LENOVO 4003
L107 DELL 5001
L108 HP NULL
L109 DELL NULL
L110 HP NULL

Exempel på SQL Inner Join

Exempel 1: Kör en fråga för att gå med i Employee Table och Manager Table och visa anställdas detaljer som anställd-id, anställds namn, lön från den anställdes tabell och chefs-id och chefsnamn från chefstabellen.

VÄLJ E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, E.SALARY, M.MANAGERID, M.MANAGER_NAME FRÅN ANSTÄLLDA E INNER JOIN MANAGER M ON E.MANAGERID =M.MANAGERID;

I ovanstående fråga hämtade vi anställd-id, förnamn, efternamn, lön från medarbetarens tabell och chefs-id, chefsnamn från chefstabell där anställdas tabellchefs-id kolumn är lika med chefstabell chefs-id kolumn. Frågan returnerar alla matchningsposter från båda tabellerna. Manager-id är en gemensam kolumn mellan båda tabellerna. E är ett alias för den anställdes bord, medan M är för chefstabellen. Fältet för chefs-id placeras som en främmande nyckel på medarbetartabellen. Manager-id fungerar som primärnyckel i managertabellen, vilket skapar en förälder-underordnad relation mellan de två tabellerna.

Utdata:

ANSTÄLLDA ID FIRST_NAME LAST_NAME LÖN MANAGERID MANAGER_NAME
1001 VAIBHAVI MISHRA 65500 1 Sneedeep Kaur
2001 PRACHI SHARMA 55500 1 Sneedeep Kaur
4003 RUCHIKA AGARWAL 60 000 1 Sneedeep Kaur
1003 NIKHIL VANI 50500 2 Kirti kirtane
2002 BHAVESH JAIN 65500 2 Kirti kirtane
3002 ANUJA WANRE 50500 2 Kirti kirtane
3001 PRANOTI SHENDE 55500 3 Abhishek Manish
3003 DEEPAM JAUHARI 58500 3 Abhishek Manish
4002 ASHWINI BAGHAT 54500 3 Abhishek Manish
4001 RAJESH GOUD 60500 4 Anupam Mishra
5001 ARCHIT SHARMA 55500 4 Anupam Mishra
1002 VAIBHAV SHARMA 60 000 5 Akash Kadam
2003 RUCHIKA JAIN 50 000 4 Akash Kadam

Posterna visas i stigande ordning efter chefs-id.

Exempel 2: Kör en fråga för att gå med i anställdstabellen och chefstabellen och visa medarbetardetaljer som anställd-id, anställds namn, lön från medarbetarens tabell och chefs-id och chefsavdelning från chefstabellen där anställdas lön är högre än 58 000.

VÄLJ E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, E.LÖN, M.MANAGERID, M.MANAGER_DEPARTMENT FRÅN ANSTÄLLDA E INNER JOIN MANAGER M ON E.MANAGERID =M.MANAGERID WHERE LÖN> 58000;
>

I ovanstående fråga hämtade vi anställd-id, förnamn, efternamn, lön från medarbetarens tabell, chefs-id och chefsavdelning från chefstabellen där chefs-id från de anställdas tabell är lika med chefs-id från chefen tabell endast de anställda poster vars lön är högre än 58000.

Utdata:

ANSTÄLLDA ID FIRST_NAME LAST_NAME LÖN MANAGERID MANAGER_DEPARTMENT
1001 VAIBHAVI MISHRA 65500 1 ORACLE
4003 RUCHIKA AGARWAL 60 000 1 ORACLE
2002 BHAVESH JAIN 65500 2 FMW
3003 DEEPAM JAUHARI 58500 3 JAVA
4001 RAJESH GOUD 60500 4 TESTER
1002 VAIBHAV SHARMA 60 000 5 C#

Endast sex poster visas där en anställds lön överstiger 58 000.

Exempel 3: Kör en fråga för att gå med i Anställdas tabell och Laptop-tabell, visa anställdsinformation som anställd-id, anställds namn och lön, staden från den anställdes bord, laptop-id och laptop-namnet från laptop-tabellen

VÄLJ EMP.EMPLOYEEID, EMP.FIRST_NAME, EMP.SALARY, EMP.CITY, LAP.LAPTOPID, LAP. NAMN FRÅN ANSTÄLLDA EMP INNER JOIN LAPTOP LAP ON EMP.EMPLOYEEID =LAP.EMPLOYEEID;

I ovanstående fråga hämtade vi anställd-id, förnamn, lön, stad från de anställdas laptop-id och namn från laptop-tabellen där anställd-id från anställd-tabell är lika med anställd-id från laptop-tabell. Medarbetar-id är en främmande nyckel i Laptop-tabellen, som skapar en förälder-barn-relation mellan Employee-tabellen och Laptop-tabellen.

Utdata:

ANSTÄLLDA ID FIRST_NAME LÖN STAD LAPTOPID NAMN
1002 VAIBHAV 60 000 NOIDA L102 HP
3003 DEEPAM 58500 MUMBAI L104 HP
4002 ASHWINI 54500 NOIDA L105 DELL
4003 RUCHIKA 60 000 DELHI L106 LENOVO
5001 ARCHIT 55500 DELHI L107 DELL

Endast fem anställdas poster visas.

Exempel 4: Skriv en fråga för att visa medarbetar-id, förnamn, lön och avdelning från anställdas tabell Chefs-ID och chefsnamn från chefstabellen med hjälp av inre koppling där lön> 55 000 och avdelningen är Oracle.

VÄLJ ANSTÄLLDA ID, FIRST_NAME, LÖN, AVDELNING, M.MANAGERID, M.MANAGER_NAME FRÅN ANSTÄLLDA E INNER JOIN MANAGER M ON E.MANAGERID =M.MANAGERID VAR LÖN> 55000 OCH AVDELNING ='ORACLE';

I exemplet ovan med anslutningsförfrågan visar vi medarbetarens uppgifter som id, namn, lön och avdelning från medarbetarens tabell, chefs-ID och chefsnamn från chefstabellen där chefs-id från de anställdas tabell är lika med chefs-id från chefen endast de anställda vars lön är högre än 55 000 och avdelningen är Oracle.

Utdata:

ANSTÄLLDA ID FIRST_NAME LÖN AVDELNING MANAGERID MANAGER_NAME
1001 VAIBHAVI 65500 ORACLE 1 Snehdeep Kaur
2001 PRACHI 55500 ORACLE 1 Snehdeep Kaur
4003 RUCHIKA 60 000 ORACLE 1 Snehdeep Kaur

Endast tre anställda vars lön är högre än 55 000 och avdelningen är Oracle.

Exempel 5: Kör en kopplingsförfrågan i tabellen Anställda, Chef och Laptop, och visa anställdas uppgifter, chefs-ID och laptop-ID.

VÄLJ E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, M.MANAGERID, L.LAPTOPID FRÅN ANSTÄLLDA E INNER JOIN MANAGER M ON E.MANAGERID =M.MANAGERID INNER JOIN LAPTOP L PÅ E.EMPLOYEEID =LEMPLOYEEID.; 

Frågan ovan visar anställd-id, förnamn, efternamn, chefs-id och laptop-id från anställda, chef och laptop-tabeller. Vi slår samman tre bord. Medarbetar-ID är en vanlig kolumn mellan anställda och den bärbara datorn och skapar en förälder-barn-relation mellan dessa tre tabeller. Mellan anställda och chefer är tabellchefs-id den vanliga kolumnen.

Utdata:

ANSTÄLLDA ID FIRST_NAME LAST_NAME MANAGERID LAPTOPID
4003 RUCHIKA AGARWAL 1 L106
3003 DEEPAM JAUHARI 3 L104
4002 ASHWINI BAGHAT 3 L105
5001 ARCHIT SHARMA 4 L107
1002 VAIBHAV SHARMA 5 L102

Left Outer Join

Den vänstra yttre joinen kommer att returnera alla tabellposter på vänster sida av joinen och matchande poster för tabellen på höger sida av joinen. Resultatuppsättningen innehåller null för de poster som inte är vanliga på höger sida.

Syntax för vänster yttre koppling:

VÄLJ        Tabellnamn1.Kolumnnamn1,     Tabellnamn1.Kolumnnamn2, Tabellnamn1.Kolumnnamn3,Tabellnamn2.Kolumnnamn1,Tabellnamn2.Kolumnnamn2, Tabellnamn2.Kolumnnamn3, FRÅN T_NAMN T_FÖRREJT_KOLUMN>Kolumn_Namn FRÅN T_FÖR T_2Namn>Kolumn_Namn FRÅN T_FÖR T_FÖR T_KOLUMN 2Namn>Column_Namn. 

Tänk på de befintliga tabellerna, som har följande poster:

Tabell 1:Anställda

ANSTÄLLDA ID FIRST_NAME LAST_NAME LÖN STAD AVDELNING MANAGERID
1001 VAIBHAVI MISHRA 65500 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60 000 NOIDA C# 5
1003 NIKHIL VANI 50500 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 CHANDIGARH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50 000 MUMBAI C# 5
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA WANRE 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TESTER 4
4002 ASHWINI BAGHAT 54500 NOIDA JAVA 3
4003 RUCHIKA AGARWAL 60 000 DELHI ORACLE 1
5001 ARCHIT SHARMA 55500 DELHI TESTER 4

Tabell 2:Manager

Managerid manager_name manager_department
1 Snehdeep Kaur ORACLE
2 Kirti Kirtane FMW
3 Abhishek Manish JAVA
4 Anupam Mishra TESTER
5 Akash Kadam C#

Tabell 3:Bärbar dator

LAPTOPID NAMN ANSTÄLLD
L101 DELL NULL
L102 HP 1002
L103 LENOVO NULL
L104 HP 3003
L105 DELL 4002
L106 LENOVO 4003
L107 DELL 5001
L108 HP NULL
L109 DELL NULL
L110 HP NULL

Exempel på SQL Left Outer Join

Exempel 1: Kör en vänstra yttre kopplingsfråga på anställdas bord och laptoptabell, där anställd-id, anställds namn och laptop-id visas.

VÄLJ E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, L.LAPTOPID, L.NAME FRÅN ANSTÄLLDA E VÄNSTER YTTRE JOIN LAPTOP L PÅ E.EMPLOYEEID =L.EMPLOYEEID; 

I ovanstående fråga visade vi anställd-id, förnamn, efternamn från den anställdes laptop-id och namn från laptop-tabellen och utförde en vänstra yttre sammanfogningsfråga på dessa två tabeller. Frågan returnerar null-värden på höger sida av tabellen om raderna inte är lika mellan tabellerna.

Utdata:

ANSTÄLLDA ID FIRST_NAME LAST_NAME LAPTOPID NAMN
1001 VAIBHAVI MISHRA NULL NULL
1002 VAIBHAV SHARMA L102 HP
1003 NIKHIL VANI NULL NULL
2001 PRACHI SHARMA NULL NULL
2002 BHAVESH JAIN NULL NULL
2003 RUCHIKA JAIN NULL NULL
3001 PRANOTI SHENDE NULL NULL
3002 ANUJA WANRE NULL NULL
3003 DEEPAM JAUHARI L104 HP
4001 RAJESH GOUD NULL NULL
4002 ASHWINI BAGHAT L105 DELL
4003 RUCHIKA AGARWAL L106 LENOVO
5001 ARCHIT SHARMA L107 DELL

Exempel 2: Skriv en fråga för att hämta medarbetar-id, förnamn, efternamn, lön från anställds bord vänster yttre anslutning på laptopbord där lön> 55 000.

VÄLJ E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, E.LAST_NAME, E.LOYEEID, L.LAPTOPID, L.NAME FRÅN ANSTÄLLDA E VÄNSTER YTTRE JOIN LAPTOP L PÅ E.EMPLOYEEID =L.EMPLOYEEID WHERE LÖN> 55000; 

I ovanstående fråga hämtade vi personaluppgifterna från de anställdas tabell och laptopdetaljerna från laptoptabellen, men bara de anställdas uppgifter där lönen är större än 55 000. Vi utförde den vänstra yttre sammanfogningsfrågan på dessa två tabeller. Frågan returnerar null-värden på höger sida av tabellen om raderna inte är lika mellan tabellerna.

Utdata:

ANSTÄLLDA ID FIRST_NAME LAST_NAME LÖN LAPTOPID NAMN
1001 VAIBHAVI MISHRA 65500 NULL NULL
1002 VAIBHAV SHARMA 60 000 L102 HP
2001 PRACHI SHARMA 55500 NULL NULL
2002 BHAVESH JAIN 65500 NULL NULL
3001 PRANOTI SHENDE 55500 NULL NULL
3003 DEEPAM JAUHARI 58500 L104 HP
4001 RAJESH GOUD 60500 NULL NULL
4003 RUCHIKA AGARWAL 60 000 L106 LENOVO
5001 ARCHIT SHARMA 55500 L107 DELL

Right Outer Join

Den högra yttre joinen kommer att returnera alla tabellposter på höger sida av joinen och matchande poster för tabellen på vänster sida av joinen. Resultatuppsättningen innehåller null för de poster som inte är vanliga på vänster sida.

Syntax för höger yttre sammanfogning:

SELECT        Tabellnamn1.Kolumn_Namn1,     Tabell_Name1.Column_Name2, Table_Name1.Column_Name3,Table_Name2.Column_Name1,Table_Name2.Column_Name2, Table_Name2.Column_Name3, FROM TOUn_Nameable T_Column_Nameable 

Exempel på SQL Right Outer Join

Exempel 1: Kör en extern kopplingsförfrågan till höger på anställdas bord och tabell för bärbara datorer, där anställd-id, namn på de anställda visas.

VÄLJ E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, L.LAPTOPID, L.NAME FRÅN ANSTÄLLDA E Höger YTTRE JOIN LAPTOP L PÅ E.EMPLOYEEID =L.EMPLOYEEID; 

I ovanstående fråga visade vi anställd-id, förnamn, efternamn från den anställdes laptop-id och namn från laptop-tabellen och utförde den högra yttre sammanfogningsfrågan på dessa två tabeller. Frågan returnerar null-värden på vänster sida av tabellen om raderna inte är lika mellan tabellerna.

Utdata:

ANSTÄLLDA ID FIRST_NAME LAST_NAME LAPTOPID NAMN
NULL NULL NULL L101 DELL
1002 VAIBHAV SHARMA L102 HP
NULL NULL NULL L103 LENOVO
3003 DEEPAM JAUHARI L104 HP
4002 ASHWINI BAGHAT L105 DELL
4003 RUCHIKA AGARWAL L106 LENOVO
5001 ARCHIT SHARMA L107 DELL
NULL NULL NULL L108 HP
NULL NULL NULL L109 DELL
NULL NULL NULL L110 HP

Exempel 2: Skriv en fråga för att hämta medarbetar-id, förnamn och efternamn från medarbetarens tabell. Höger yttre koppling på laptopbord där bärbar dators namn inkluderar en av listorna är Dell, HP.

VÄLJ E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, E.LÖN, L.LAPTOPID, L.NAME FRÅN ANSTÄLLDA E HÖGER YTTRE JOIN LAPTOP L PÅ E.EMPLOYEEID =L.EMPLOYEEID DÄR L.NAME IN (' DELL', 'HP');

I frågan ovan visade vi de anställdas uppgifter från den anställdes bärbara dators bordsdetaljer på den bärbara datorn. Vi utförde rätt yttre kopplingsförfrågan på dessa två tabeller, bara den anställde vars bärbara dators namn inkluderar en av listorna är Dell och HP. Frågan returnerar null-värden på vänster sida av tabellen om raderna inte är lika mellan tabellerna.

Utdata:

ANSTÄLLDA ID FIRST_NAME LAST_NAME LAPTOPID NAMN
NULL NULL NULL L101 DELL
1002 VAIBHAV SHARMA L102 HP
3003 DEEPAM JAUHARI L104 HP
4002 ASHWINI BAGHAT L105 DELL
5001 ARCHIT SHARMA L107 DELL
NULL NULL NULL L108 HP
NULL NULL NULL L109 DELL
NULL NULL NULL L110 HP

Fullständig yttre sammanfogning

Full Outer Join slår samman resultatet av både Left Outer Join och Right Outer Join. Full Outer Join är detsamma som Cross Join. Full Outer Joins returnerar utdata, där rader är vanliga eller ovanliga mellan tabellerna.

Syntax för fullständig yttre sammanfogning:

VÄLJ COLUMNNAME1, COLUMNNAME2 FRÅN TABLE1 FULL GÅ MED TABLE2;

Exempel 1: Skriv en fråga för att visa anställd-id, förnamn, efternamn från chefs-id från anställds tabell fullständig yttre anslutning Chefstabell där anställdas lön är högre än 65 000.

VÄLJ ANSTÄLLDA ID, FIRST_NAME, LAST_NAME, M.MANAGERID FRÅN ANSTÄLLDA FULL GÅ MED MANAGER M WHERE LÖN> 65000;

I ovanstående fråga visade vi de anställdas detaljer och chefsdetaljer från tabellen för anställda och chefer där anställdas lön är högre än 65 000 med full koppling. Gå med i varje rad på den anställdes bord över varje rad på chefens bord, det vill säga den kartesiska produkten kommer att ske. M * N

Utdata:

ANSTÄLLDA ID FIRST_NAME LAST_NAME MANAGERID
1001 VAIBHAVI MISHRA 1
1001 VAIBHAVI MISHRA 2
1001 VAIBHAVI MISHRA 3
1001 VAIBHAVI MISHRA 4
1001 VAIBHAVI MISHRA 5
2002 BHAVESH JAIN 1
2002 BHAVESH JAIN 2
2002 BHAVESH JAIN 3
2002 BHAVESH JAIN 4
2002 BHAVESH JAIN 5

Som vi kan se, korsfogar anställd-id 1001 med varje chefs-id, samma med anställd-id 2002.

Exempel 2: Kör en fullständig yttre anslutningsförfrågan på bordet för anställda och bordet för bärbara datorer, där anställdas lön är högre än 60 000, och den anställdes plats är Pune.

VÄLJ LAPTOPID, E.EMPLOYEEID, E.FIRST_NAME, E.LÖN, E.CITY FRÅN LAPTOP FULL GÅ MED ANSTÄLLDA E DÄR LÖN> 60000 OCH CITY ='PUNE';

I ovanstående fråga visar vi laptop-id, anställd-id, förnamn, lön och stad från laptop full join anställda endast de vars lön är högre än 60000 och staden är Pune. Om båda villkoren matchar endast för anställda, hämtas posten.

Utdata:

Korsanslutning

Korskopplingar i SQL kallas bara en kartesisk produkt. Varje rad i en tabell kombineras eller slås samman med varje rad i den andra tabellen. M * N är cross Join

Syntax of Cross join:

VÄLJ COLUMNNAME1, COLUMNNAME2 FRÅN TABLE1 CROSS JOIN TABLE2;

Exempel 1: Skriv en fråga för att utföra korskopplingsoperationer på anställdas tabell och chefstabell där anställds förnamn börjar med A

VÄLJ ANSTÄLLDA ID, FIRST_NAME, M.MANAGERID FRÅN ANSTÄLLDA CROSS JOIN MANAGER M WHERE FIRST_NAME SOM "A%";

I exemplet ovan med fullständig yttre anslutning hämtade vi anställdsinformation och chefsinformation från anställdtabellen och chefstabellen men bara de poster där medarbetarens förnamn börjar med bokstaven "A".

Utdata:

Resultatet visar att anställd-id är en korskoppling med varje chefs-id-rad.

M * N Här är M =3; anställd-id från anställds tabeller

N =5; chefs-id från chefstabell 3 * 5 =15 rader.

Exempel 2: Skriv en fråga för att utföra korskopplingsoperationer på laptopbord och anställdas bord där anställdas lön är högre än 58 000 och Mumbai.

VÄLJ LAPTOPID, NAMN, E.EMPLOYEEID FRÅN LAPTOP CROSS GÅ MED MED ANSTÄLLDA E DÄR LÖN> 58000 OCH STAD ='MUMBAI';

I ovanstående fråga visade vi laptop-id, namn och anställd-id från laptoptabellen för att utföra korskopplingsoperation på de anställdas bord där anställdas lön är högre än 58 000 och staden är Pune. Cross join uppträder som M * N.

Utdata:


  1. ALTER TABLE-satsen kom i konflikt med FOREIGN KEY-begränsningen i SQL Server - SQL Server / TSQL Tutorial Del 69

  2. Hur man jämför två scheman i PostgreSQL

  3. BESTÄLL EFTER IN-värdelistan

  4. MySQL fel 1064 syntax men allt verkar bra