Quando si pensa di unire due tabelle , probabilmente pensate di una query con un semplice join di una tabella come dipendenti con una tabella come Dipartimenti :
SELEZIONA Employees.last_name , Employees.first_name , Departments.department_nameFROM Dipartimenti , EmployeesWHERE Departments.department_id = Employees.department_id ;
Questo è un inner join . Si recupera solo le righe in cui il department_id è esattamente uguale in entrambe le tabelle . Il codice sopra funziona in MySQL , ma si può trovare meno leggibile la seguente :
Seleziona Employees.last_name , Employees.first_name , Departments.department_nameFROM DepartmentsINNER JOIN EmployeesON Departments.department_id = Employees.department_id ;
Queste due query producono esattamente lo stesso output . La differenza è che utilizzando la parola chiave di MySQL JOIN , che hai fatto più evidente di che tipo di join che hai utilizzato . Dal inner join è l'impostazione predefinita , se si lascia fuori la parola chiave INNER , MySQL esegue ancora un join interno .
Outer join
Se avete dipendenti che non sono assegnati ad uno specifico reparto e hanno un valore NULL per la loro department_id , quanto sopra join non visualizzerà tali dipendenti a tutti. Se si desidera che tutti i dipendenti siano essi hanno un reparto o non , è necessario utilizzare un outer join .
MySQL usa sinistra o destra con la parola chiave JOIN per specificare che si desidera che un join esterno , e dirgli che da tavolo si desidera che i valori NULL da . Ecco la nostra rivista ricerca:
SELEZIONA Employees.last_name , Employees.first_name , Departments.department_nameFROM EmployeesLEFT outer join DepartmentON Departments.department_id = Employees.department_id ;
Ottenete tutti i dipendenti in uscita , anche se MySQL non trova department_id per abbinare il record dipendente . La tabella che si desidera consentire valori null da ( dipartimenti ) si trova a sinistra del segno di uguale .
Se si voleva vedere reparti senza dipendenti nel vostro output , è necessario utilizzare un right outer join . La tabella che si desidera consentire valori null da in questo caso si trova sulla destra del segno di uguale .
Cross join
Facendo croce si unisce per caso è un errore comune . E ' quello che succede quando non si specifica un join a tutti. Se non si dispone né mettere un join nella clausola WHERE , oppure utilizzare uno degli altri JOIN ... ON opzioni , si ottiene ogni combinazione possibile di righe in ciascuna delle tabelle nel vostro DAL se hanno una relazione o no .
Se si tira da tre tabelle che hanno , rispettivamente , 10, 20 , e 3 righe , si ottiene 10 x 20 x 3 righe come la vostra produzione totale . Potete vedere il problema che ne consegue se il database ha più di qualche record .
Raramente , si vuole fare un cross join di proposito. MySQL permette di utilizzare la CROSS JOIN ... ON sintassi per mostrare a chiunque modificare il codice dopo che il join croce era intenzionale .
Programmazione © www.354353.com