MySQL is een open source relationele database management systeem ( RDBMS ) , dat particulieren en bedrijven vaak gebruiken om de back-end van web- applicaties te draaien . In SQL , joins vaak frustreren nieuwe gebruikers . Zoals databases groter worden , wordt het belangrijk om queries te gebruiken verbindt efficiënt . JOIN trefwoord MySQL's maakt het makkelijker om te werken met zowel nieuwe als legacy code . Inner joins Als je denkt aan het samenvoegen van twee tabellen , je waarschijnlijk denken aan een query met een simpele aansluiten van een tabel zoals Werknemers met een tafel als Afdelingen : SELECT Employees.last_name , Employees.first_name , Departments.department_nameFROM Afdelingen , EmployeesWHERE Departments.department_id = Employees.department_id ; p Dit is een inner join . Het haalt alleen de rijen waar de department_id is precies gelijk in beide tabellen . De bovenstaande code werkt in MySQL , maar u kunt vinden het minder leesbaar dan het volgende : SELECT Employees.last_name , Employees.first_name , Departments.department_nameFROM DepartmentsINNER JOIN EmployeesON Departments.department_id = Employees.department_id ; Deze twee queries produceren precies dezelfde output . Het verschil is dat met behulp van de MySQL JOIN trefwoord , heb je maakte het meer duidelijk wat voor soort samen met u gebruikt . Omdat inner join is de standaard , als je buiten de zoekwoord INNER , MySQL voert nog steeds een inner join . Outer joins Als u werknemers die niet zijn toegewezen aan een specifieke afdeling en hebben een NULL waarde voor hun department_id , de bovenstaande join zal niet deze werknemers helemaal geven . Als u wilt dat alle werknemers of ze een afdeling of niet , moet je een outer join gebruiken . MySQL gebruikt LINKS of RECHTS met de JOIN trefwoord op te geven dat u een outer join , en geef je aan welke tafel u wilt dat de NULL-waarden uit . Hier is onze herziene vraag : SELECT Employees.last_name , Employees.first_name , Departments.department_nameFROM EmployeesLEFT OUTER JOIN DepartmentON Departments.department_id = Employees.department_id ; Je krijgt elke werknemer in uw output , zelfs als MySQL vindt geen department_id aan dat werknemersrecord overeenkomen . De tabel die u wilt nulls toestaan van ( afdelingen ) is aan de linkerzijde van de gelijk-teken . Als je wilde afdelingen zien zonder personeel in uw output , zou u een RIGHT OUTER JOIN te gebruiken . De tabel die u wilt nulls toestaan uit in dat geval is aan de rechterkant van het gelijkteken . Kruis sluit zich Doing kruis voegt per ongeluk een voorkomende fout . Dat is wat er gebeurt als je niet opgeeft een join helemaal . Als je niet ofwel zet een join in uw WHERE-component , of gebruik een van de andere JOIN ... ON opties , krijg je alle mogelijke combinaties van de rijen in elk van de tabellen in uw FROM of ze een relatie hebben of niet . Als je trekt uit drie tafels met respectievelijk 10 , 20 , en 3 rijen , krijg je 10 x 20 x 3 rijen als uw totale productie . U kunt het probleem deze oorzaken als uw database heeft meer dan een paar records. Zelden zult u wilt doen een kruis mee op doel te zien . MySQL kunt u de CROSS JOIN te gebruiken ... ON syntax voor iedereen later dat het kruis join opzettelijk was uw code bewerken te tonen .
|