In SQL, probabilmente utilizziamo la clausola JOIN per ricevere il risultato combinato da una o più tabelle. Ma a volte, vogliamo un risultato che contenga i dati di una tabella e il record non dovrebbe essere disponibile nell'altra tabella. In tal caso, SQL ha il nome del concetto SQL tranne.
Per purificare i dati da più di una tabella, abbiamo utilizzato SQL Except. L'eccezione SQL è lo stesso dell'operatore meno che facciamo in matematica. SQL Except prima unisce le due o più di due istruzioni SELECT nella query e restituisce i dati dalla prima istruzione SELECT. Non siamo disponibili in un altro risultato dell'istruzione SELECT.
Regole SQL EXCEPT
Dovremmo comprendere tutte le regole e i regolamenti prima di utilizzare la query EXCEPT in SQL:
- Il numero e l'ordine delle colonne nella tabella data devono essere gli stessi nell'intera query SELECT.
- Il tipo di dati della colonna deve essere lo stesso o compatibile.
La sintassi per SQL EXCEPT
SELECT * FROM table1 EXCEPT SELECT * FROM table2;
Table1 e Table2 saranno i nomi delle tabelle.
Esempio:
Supponiamo di avere due tabelle con lo stesso numero di colonne e l'ordine delle colonne.
- Tabella 1:T1, Numero di colonne:3, Dati:A, B, C, D
- Tabella 2:T2, Numero di colonne:3, Dati:B, D, F, G
Ogni volta che eseguiamo la query EXCEPT su queste due tabelle, otterremo A e C perché questi due dati non sono presenti nella tabella T2, B e D sono comuni in entrambe le tabelle, che scartano.
Comprendiamo il concetto di SQL EXCEPT con esempi. Considera le seguenti tabelle insieme ai record forniti.
Tabella1:Emp
ID DIPENDENTE | FIRST_NAME | COGNOME | STIPENDIO | CITTÀ | REPARTO | RIDESTORE |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NICHIL | VANI | 50000 | JAIPUR | FM | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FM | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | PROVA | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | DOVE | 50500 | JAIPUR | FM | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | PROVA | 4 |
Tabella2:Dipendente
ID DIPENDENTE | FIRST_NAME | COGNOME | STIPENDIO | CITTÀ | REPARTO | RIDESTORE |
1001 | Vaibhav | Sharma | 65000 | PUNE | ORACLE | 1 |
1002 | Nikhil | Vani | 60000 | NOIDA | ORACLE | 1 |
1003 | Vaibhavi | Mishra | 50000 | JAIPUR | FM | 2 |
2001 | Ruchika | Jain | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | Prachi | Sharma | 65500 | PUNE | FM | 2 |
2003 | Bhavesh | Jain | 50000 | MUMBAI | PROVA | 4 |
3001 | Deepam | Jauhari | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | DOVE | 50500 | JAIPUR | FM | 2 |
3003 | Prano | Shende | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | PROVA | 4 |
Tabella 3:Gestore
ID gestore | nome_gestore | dipartimento_direttore |
1 | Snehdeep Kaur | ORACLE |
2 | Kirti Kirtane | FM |
3 | Abhishek Manish | JAVA |
4 | Anupam Mishra | PROVA |
Tabella 4:Manager1
ID gestore | nome_gestore | dipartimento_direttore |
1 | Ishita Agrawal | ORACLE |
2 | Kirti Kirtane | FM |
3 | Abhishek Manish | JAVA |
4 | Paolo Oakip | PROVA |
Esempio 1: Supponiamo di voler unire le due tabelle precedenti Emp e Employee nella nostra query SELECT utilizzando l'operatore EXCEPT.
SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, DEPARTMENT MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER ON EMP.MANAGERID = MANAGER.MANAGERID EXCEPT SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, DEPARTMENT, MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER1 ON EMPLOYEE.MANAGERID = MANAGER1.MANAGERID;
Stiamo utilizzando la clausola INNER JOIN tra la tabella Emp e Employee in cui mostriamo l'ID dipendente, il nome, la città, il dipartimento, l'ID manager e il nome manager utilizzando l'operatore EXCEPT. La query precedente visualizzerà solo quei valori univoci tra entrambe le tabelle.
La query precedente fornisce il seguente output:
Se osserviamo i dati delle tabelle, ci sono due dati comuni tra le due tabelle Emp table e Employee table, ovvero l'ID dipendente 3002 e 4001. I dettagli dell'ID dipendente 4001 vengono visualizzati tranne 3002. Poiché l'ID dipendente 3002 Il nome del manager è lo stesso in entrambe le tabelle Manager e Manager1 ma ID dipendente 4001 I nomi dei manager sono diversi in entrambe le tabelle, vengono visualizzati i dettagli ID dipendente 4002.
Esempio 2: Supponiamo di voler unire le due tabelle precedenti Emp e Employee nella nostra query SELECT utilizzando l'operatore EXCEPT e ordinare il risultato impostato in base al loro stipendio in ordine decrescente. Useremo la clausola ORDER BY per ordinare il set di risultati nella query SQL.
SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, SALARY, MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER ON EMP.MANAGERID = MANAGER.MANAGERID EXCEPT SELECT EMPLOYEEID, CONCAT(FIRST_NAME, LAST_NAME) AS NAME, CITY, SALARY, MANAGER1.MANAGERID, MANAGER1.MANAGER_NAME FROM EMPLOYEE INNER JOIN MANAGER1 ON EMPLOYEE.MANAGERID = MANAGER1.MANAGERID ORDER BY SALARY;
La query precedente mostra il seguente output:
Esempio 3: Supponiamo di voler unire le due tabelle precedenti Emp e Employee nella nostra query SELECT utilizzando l'operatore EXCEPT in cui lo stipendio dei dipendenti superiore a 55000 dalla tabella Emp e la città dei dipendenti includono "Pune", "Mumbai", "Jaipur" dalla tabella Employee.
SELECT * FROM EMP WHERE SALARY > 55000 EXCEPT SELECT * FROM EMPLOYEE WHERE CITY IN ('Pune', 'Mumbai', 'Jaipur');
La prima istruzione SELECT della query precedente recupera tutti i dettagli di quei dipendenti il cui stipendio è maggiore di 55000 dalla tabella Emp. La seconda istruzione SELECT recupera tutti i dettagli di quei dipendenti le cui città includono Pune, Mumbai, Jaipur dalla tabella Employee. Quindi, l'operatore EXCEPT verrà eseguito tra la tabella Emp e la tabella Employee.
Questo fornisce il seguente output: