In questo articolo impareremo il concetto di INNER JOIN e come usarlo in SQL con la clausola WHERE.
Cos'è INNER JOIN in SQL?
Inner Join è un tipo di join nell'SQL. Inner Join in SQL è un join ampiamente utilizzato. Questo join restituisce solo le righe comuni in entrambe le tabelle. L'unione interna viene utilizzata per unire due tabelle.
Sintassi di Inner Join nell'SQL:
SELECT table1.columname1, table1.columnname2, table2.columnname1, table2.columnname2 FROM TABLE1 INNER JOIN TABLE2 ON table1.column = table2.column;
Table1.column =table2.column è la colonna comune che mantiene la relazione padre figlio tra queste due tabelle.
Ci sono alcuni passaggi che dobbiamo usare nell'Inner Join nella query SQL:
1. Crea un nuovo database o utilizza un database esistente selezionando il database utilizzando la parola chiave USE seguita dal nome del database.
2. Crea una nuova tabella all'interno del database selezionato, oppure puoi utilizzare una tabella già creata.
3. Se la tabella è stata appena creata, inserire i record nel database appena creato utilizzando la query INSERT.
4. Visualizza i dati inseriti utilizzando la query SELECT senza la query Inner Join.
5 Ora siamo pronti per utilizzare l'Inner Join nelle query SQL.
Passaggio 1:crea un nuovo database o utilizza un database già creato.
Ho già creato un database. Utilizzerò il nome del database creato esistente, Società.
USE Company;
Società è il nome del database.
Coloro che non hanno creato un database seguono la query seguente per creare il database:
CREATE DATABASE database_name;
Dopo aver creato il database, selezionare il database utilizzando la parola chiave USE seguita dal nome del database.
Passaggio 2:crea una nuova tabella o utilizza una tabella già esistente:
Ho già creato una tabella. Userò la tabella esistente denominata Employees and Manager mentre stiamo eseguendo la query Inner Join.
Per creare la nuova tabella, segui la seguente sintassi CREATE TABLE:
CREATE TABLE table_name(
columnname1 datatype(column size),
columnname2 datatype(column size),
columnname3 datatype(column size)
);
Passaggio 3:inserisci i record nella tabella appena creata utilizzando la query INSERT
Utilizza la sintassi seguente per inserire nuovi record nella tabella:
INSERT INTO table_name VALUES(value1, value2, value3);
Passaggio 4: Visualizza i record utilizzando la query SELECT.
Visualizza i record dalla tabella utilizzando la seguente sintassi:
SELECT * FROM table_name;
La seguente query visualizzerà i record dei dipendenti.
SELECT * FROM Employees;
L'output della query SELECT sopra è:
ID DIPENDENTE | FIRST_NAME | COGNOME | STIPENDIO | CITTÀ | REPARTO | RIDESTORE |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C# | 5 |
1003 | NICHIL | VANI | 50500 | JAIPUR | FM | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FM | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | C# | 5 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FM | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | PROVA | 4 |
4002 | ASHWINI | BAGAGLIO | 54500 | NOIDA | JAVA | 3 |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI | ORACLE | 1 |
5001 | ARCHIT | SHARMA | 55500 | DELHI | PROVA | 4 |
5002 | SANKET | CHAUHAN | 70000 | HYDERABAD | JAVA | 3 |
5003 | ROSHAN | NEHTE | 48500 | CHANDIGARH | C# | 5 |
6001 | RAHUL | NIKAM | 54500 | BANGALORE | PROVA | 4 |
6002 | ATISH | JADHAV | 60500 | BANGALORE | C# | 5 |
6003 | NIKITA | INGALE | 65000 | HYDERABAD | ORACLE | 1 |
La seguente query visualizzerà i record di Manager.
SELECT * FROM Manager;
L'output della query SELECT sopra è:
ID gestore | nome_gestore | dipartimento_direttore |
1 | Snehdeep Kaur | ORACLE |
2 | Kirti Kirtane | FM |
3 | Abhishek Manish | JAVA |
4 | Anupam Mishra | PROVA |
5 | Akash Kadam | C# |
La seguente query visualizzerà i record di Laptop.
SELECT * FROM Laptop;
L'output della query SELECT sopra è:
LAPTOPID | NOME | ID DIPENDENTE |
101 | DELL | NULLO |
102 | HP | 1002 |
103 | LENOVO | NULLO |
104 | HP | 3003 |
105 | DELL | 4002 |
106 | LENOVO | 4003 |
107 | DELL | 5001 |
108 | HP | NULLO |
109 | DELL | NULLO |
110 | HP | NULLO |
111 | LENOVO | 2002 |
112 | LENOVO | 6003 |
113 | HP | 1003 |
Passaggio 5:siamo pronti per utilizzare l'INNER JOIN nelle query
Comprendiamo l'Inner Join con l'aiuto di esempi.
Esempio 1: Scrivi una query per visualizzare l'ID dipendente, il nome, il cognome, lo stipendio, la città dalla tabella del dipendente e l'ID manager e il nome del manager dalla tabella manager utilizzando l'Inner join.
SELECT E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, E.SALARY, E.CITY, M.MANAGERID, M.MANAGER_NAME FROM EMPLOYEES E INNER JOIN MANAGER M ON E.MANAGERID =M.MANAGERID;
Nella query precedente, abbiamo recuperato ID dipendente, nome, cognome, stipendio, città dalla tabella del dipendente e ID manager, nome manager dalla tabella manager in cui la colonna ID manager della tabella dei dipendenti è uguale alla colonna ID manager della tabella manager. La query restituirà tutti i record delle corrispondenze da entrambe le tabelle. L'ID gestore è una colonna comune tra entrambe le tabelle. E è un nome alias per la tabella del dipendente, mentre M è per la tabella del manager. La colonna ID manager funziona come una chiave esterna nella tabella del dipendente. L'ID manager funziona come chiave primaria nella tabella manager, che crea una relazione padre-figlio tra le due tabelle.
L'output della query precedente è:
ID DIPENDENTE | FIRST_NAME | COGNOME | STIPENDIO | CITTÀ | REPARTO | RIDESTORE |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI | ORACLE | 1 |
6003 | NIKITA | INGALE | 65000 | HYDERABAD | ORACLE | 1 |
1003 | NICHIL | VANI | 50500 | JAIPUR | FM | 2 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FM | 2 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FM | 2 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4002 | ASHWINI | BAGAGLIO | 54500 | NOIDA | JAVA | 3 |
5002 | SANKET | CHAUHAN | 70000 | HYDERABAD | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | PROVA | 4 |
5001 | ARCHIT | SHARMA | 55500 | DELHI | PROVA | 4 |
6001 | RAHUL | NIKAM | 54500 | BANGALORE | PROVA | 4 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C# | 5 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | C# | 5 |
5003 | ROSHAN | NEHTE | 48500 | CHANDIGARH | C# | 5 |
6002 | ATISH | JADHAV | 60500 | BANGALORE | C# | 5 |
I record vengono visualizzati in ordine crescente in base all'ID gestore predefinito.
Esempio 2: Scrivi una query per visualizzare l'ID dipendente, il nome, il cognome, la città e il dipartimento dalla tabella del dipendente e l'ID manager e il nome del manager dalla tabella del manager utilizzando Inner Join dove il dipartimento del dipendente è C#.
SELECT E.EMPLOYEEID, E.FIRST_NAME, E.LAST_NAME, E.CITY, E.DEPARTMENT, M.MANAGERID, M.MANAGER_NAME FROM EMPLOYEES E INNER JOIN MANAGER M ON E.MANAGERID =M.MANAGERID WHERE DEPARTMENT = ‘C#’;
Nella query precedente, abbiamo recuperato l'ID dipendente, il nome, il cognome, la città e il dipartimento dalla tabella del dipendente, l'ID manager e il nome del manager dalla tabella manager dove ID manager dalla tabella dipendenti uguale all'id manager solo dalla tabella manager quei record dei dipendenti il cui dipartimento dei dipendenti è C#.
L'output della query precedente è:
ID DIPENDENTE | FIRST_NAME | COGNOME | STIPENDIO | CITTÀ | REPARTO | RIDESTORE |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C# | 5 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | C# | 5 |
5003 | ROSHAN | NEHTE | 48500 | CHANDIGARH | C# | 5 |
6002 | ATISH | JADHAV | 60500 | BANGALORE | C# | 5 |
Nell'output sopra, possiamo vedere solo i record recuperati dai dipendenti il cui dipartimento è C#. Usiamo la clausola WHERE con il join INNER.
Esempio 3: Scrivi una query per visualizzare l'ID dipendente, il nome, lo stipendio, la città e il dipartimento dal tavolo del dipendente e l'ID del laptop e il nome del laptop dal tavolo del laptop utilizzando Inner Join.
SELECT E.EMPLOYEEID, E.FIRST_NAME, E.SALARY, E.CITY, E.DEPARTMENT, L.LAPTOPID, L.NAME FROM EMPLOYEES E INNER JOIN LAPTOP L ON E.EMPLOYEEID = L.EMPLOYEEID;
Nella query precedente, abbiamo recuperato l'ID dipendente, il nome, lo stipendio, la città e il dipartimento dalla tabella dei dipendenti e l'ID del laptop e il nome dalla tabella del laptop in cui l'ID dipendente dalla tabella dei dipendenti è uguale all'ID dipendente dalla tabella del laptop . L'ID dipendente è una chiave esterna nella tabella Laptop, che crea una relazione padre-figlio tra la tabella Employee e la tabella Laptop.
L'output della query precedente è:
ID DIPENDENTE | FIRST_NAME | STIPENDIO | CITTÀ | REPARTO | LAPTOPID | NOME |
1002 | VAIBHAV | 60000 | NOIDA | C# | 102 | HP |
3003 | DEEPAM | 58500 | MUMBAI | JAVA | 104 | HP |
4002 | ASHWINI | 54500 | NOIDA | JAVA | 105 | DELL |
4003 | RUCHIKA | 60000 | DELHI | ORACLE | 106 | LENOVO |
5001 | ARCHIT | 55500 | DELHI | PROVA | 107 | DELL |
2002 | BHAVESH | 65500 | PUNE | FM | 111 | LENOVO |
6003 | NIKITA | 65000 | HYDERABAD | ORACLE | 112 | LENOVO |
1003 | NICHIL | 50500 | JAIPUR | FM | 113 | HP |
Solo i record vengono visualizzati nell'output specificato a cui è assegnato il laptop.
Esempio 4: Scrivi una query per visualizzare l'ID dipendente, il nome, lo stipendio e il reparto dalla tabella dipendenti e l'ID manager e il nome manager dalla tabella manager utilizzando inner join dove stipendio> 57000 o dipartimento è Oracle.
SELECT EMPLOYEEID, FIRST_NAME, SALARY, DEPARTMENT, M.MANAGERID, M.MANAGER_NAME FROM EMPLOYEES E INNER JOIN MANAGER M ON E.MANAGERID = M.MANAGERID WHERE SALARY > 57000 OR DEPARTMENT = 'ORACLE';
Nella query precedente, abbiamo recuperato l'ID dipendente, il nome, lo stipendio e il dipartimento dalla tabella del dipendente e l'ID manager e il nome manager dalla tabella manager dove ID manager dalla tabella dipendenti è uguale all'ID manager dal manager solo quei dipendenti i cui lo stipendio è maggiore di 57000 o il dipartimento è Oracle.
L'output della query precedente è:
ID DIPENDENTE | FIRST_NAME | COGNOME | STIPENDIO | CITTÀ | REPARTO | RIDESTORE |
1001 | VAIBHAVI | MISHRA | 65500 | PUNE | ORACLE | 1 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
4003 | RUCHIKA | AGARWAL | 60000 | DELHI | ORACLE | 1 |
6003 | NIKITA | INGALE | 65000 | HYDERABAD | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FM | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
5002 | SANKET | CHAUHAN | 70000 | HYDERABAD | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | PROVA | 4 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | C# | 5 |
6002 | ATISH | JADHAV | 60500 | BANGALORE | C# | 5 |
Nell'output sopra, vengono visualizzati solo i record dei dipendenti il cui stipendio è maggiore di 57000 o il dipartimento dei dipendenti è "Oracle". L'operatore OR visualizza i record se una delle condizioni specificate nella query è vera.