MySQL är en öppen källkod relationsdatabas management system ( RDBMS ) som individer och företag ofta använder för att köra tillbaka i slutet av webbapplikationer . I SQL , kopplingar frustrera ofta nya användare . Som databaser blir större , blir det viktigt för frågor att använda kopplingar effektivt . MySQL : s JOIN sökord gör det lättare att arbeta med både nya och gamla kod . Inre kopplingar
När du tänker på att gå två tabeller , tänker du förmodligen på en fråga med ett enkelt delta i en tabell som anställda med en tabell som Avdelningar :
SELECT Employees.last_name , Employees.first_name , Departments.department_nameFROM avdelningar , EmployeesWHERE Departments.department_id = Employees.department_id ;
Detta är en inre koppling . Den hämtar bara de rader där department_id är exakt lika i båda tabellerna . Ovanstående kod fungerar i MySQL , men du kan finna det mindre läsbart än följande :
SELECT Employees.last_name , Employees.first_name , Departments.department_nameFROM DepartmentsINNER JOIN EmployeesON Departments.department_id = Employees.department_id ;
Dessa två frågor ger exakt samma effekt . Skillnaden är att med hjälp av MySQL JOIN nyckelordet , har du gjort det mer uppenbart vilken typ av koppling du använde . Eftersom inre koppling är standard , om du lämnar bort sökordet INNER , MySQL fortfarande utför en inre koppling .
Yttre kopplingar
p Om du har anställda som inte tilldelats till en viss avdelning och har ett NULL värde för deras department_id , kommer ovanstående join visas inte de anställda alls . Om du vill att alla medarbetare oavsett om de har en avdelning eller inte , måste du använda en yttre koppling .
MySQL använder vänster eller höger med Gå sökord för att ange att du vill ha en yttre koppling , och berätta det som tabell du vill nollorna från . Här är vår reviderade fråga :
SELECT Employees.last_name , Employees.first_name , Departments.department_nameFROM EmployeesLEFT OUTER JOIN DepartmentON Departments.department_id = Employees.department_id ;
Du får varje medarbetare i din produktion , även om MySQL finner inget department_id att matcha den anställde rekord . Tabellen du vill tillåta nollor från ( departement ) är till vänster om likhetstecknet .
P Om du ville se avdelningar med några anställda i din produktion , skulle du använda en höger yttre koppling . Tabellen du vill tillåta nollor från i så fall är på rätt om likhetstecknet .
Cross förenar
gör kors går genom olycka är en vanligt misstag . Det är vad som händer när du inte anger en gå alls . Om du inte heller sätta en koppling i din WHERE , eller använd någon av de andra JOIN ... ON alternativ , du får varje möjlig kombination av raderna i varje tabeller i FROM huruvida de har en relation eller inte .
Om du drar från tre tabeller med respektive 10 , 20 och 3 rader , får du 10 x 20 x 3 rader som din totala produktion . Du kan se problemet orsakar detta , om din databas har mer än ett par skivor .
Sällan , kommer du vill göra ett kors med flit . MySQL kan du använda CROSS JOIN ... ON syntax för att visa alla som redigerar din kod senare att korset join var avsiktlig .