MySQL er en åpen kildekode relasjonell database management system ( RDBMS ) som enkeltpersoner og bedrifter ofte bruker til å kjøre baksiden slutten av web-applikasjoner . I SQL, tiltrer frustrere ofte nye brukere . Som databasene blir større , blir det avgjørende for spørringer til å bruke tiltrer effektivt. MySQL oss bli søkeordet gjør det lettere å jobbe med både nye og eldre kode . Indre tiltrer
Når du tenker på å bli med to bord , har du sannsynligvis tenke på en spørring med en enkel delta på et bord som ansatte med en tabell som Avdelinger : en
SELECT Employees.last_name , Employees.first_name , Departments.department_nameFROM Avdelinger , EmployeesWHERE Departments.department_id = Employees.department_id ;
p Dette er en indre sammenføyning . Den henter bare de radene der department_id er nøyaktig lik i begge tabellene . Listen koden fungerer i MySQL , men du kan finne det mindre lesbar enn følgende : en
SELECT Employees.last_name , Employees.first_name , Departments.department_nameFROM DepartmentsINNER JOIN EmployeesON Departments.department_id = Employees.department_id ;
Disse to spørringer produsere nøyaktig samme utgang. Forskjellen er at ved å bruke MySQL JOIN søkeord , har du gjort det mer åpenbart hva slags bli med du brukte . Siden indre join er standard , hvis du la ut søkeordet INNER , MySQL fortsatt utfører en indre sammenføyning .
Ytre tiltrer
p Hvis du har ansatte som ikke er tilordnet til en bestemt avdeling, og har en NULL verdi for department_id deres , vil ovennevnte join ikke vise disse ansatte i det hele tatt . Hvis du vil at alle ansatte om de har en avdeling eller ikke , må du bruke en ytre delta .
MySQL bruker venstre eller høyre med sammenføyningen nøkkelord for å angi at du vil ha en ytre delta, og fortelle det som tabellen du vil at NULL fra . Her er vår reviderte søket : en
SELECT Employees.last_name , Employees.first_name , Departments.department_nameFROM EmployeesLEFT ytre delta DepartmentON Departments.department_id = Employees.department_id ;
Du får hver ansatt i utskriften, selv hvis MySQL finner ingen department_id å matche det ansatt posten. Tabellen du vil tillate nuller fra ( avdelinger ) er på venstre side av likhetstegnet.
P Hvis du ønsket å se avdelinger med ingen ansatte i produksjonen din , vil du bruke en høyre ytre sammenføyning. Tabellen du vil tillate nuller fra i så fall er på høyre side av likhetstegnet.
Cross tiltrer
Doing kryss tiltrer ved et uhell er en vanlig feil . Det er hva som skjer når du ikke spesifiserer en delta i det hele tatt . Hvis du ikke heller sette en bli med i WHERE klausulen , eller bruke en av de andre BLI ... PÅ alternativer , får du alle mulige kombinasjoner av radene i hver av tabellene i FROM om de har et forhold eller ikke .
p Hvis du trekker fra tre tabeller har henholdsvis 10 , 20 og 3 rader, får du 10 x 20 x 3 rader som den totale produksjonen . Du kan se problemet dette medfører hvis databasen har mer enn noen få poster.
Sjelden , vil du ønsker å gjøre et kors delta med vilje. MySQL kan du bruke CROSS JOIN ... PÅ syntaks for å vise hvem som helst å redigere koden senere at korset join var bevisst .