Database
 sql >> Database >  >> RDS >> Database

SQL tranne

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: