I SQL använder vi förmodligen JOIN-satsen för att ta emot det kombinerade resultatet från en eller fler än en tabell. Men ibland vill vi ha ett resultat som innehåller data från en tabell, och posten ska inte vara tillgänglig i den andra tabellen. I så fall har SQL begreppsnamnet SQL Except.
För att rena data från mer än en tabell använde vi SQL Except. SQL Except är samma som minusoperatorn vi gör i matematik. SQL Except slår först samman de två eller fler än två SELECT-satserna i frågan och returnerar data från den första SELECT-satsen. Vi är inte tillgängliga i ett annat SELECT-uttrycksresultat.
SQL UTOM regler
Vi bör förstå alla regler och föreskrifter innan vi använder EXCEPT-frågan i SQL:
- Antalet och ordningen på kolumner i den givna tabellen måste vara samma i hela SELECT-frågan.
- Kolumnens datatyp måste vara densamma eller kompatibel.
Syntaxen för SQL EXCEPT
SELECT * FROM table1 EXCEPT SELECT * FROM table2;
Tabell1 och Tabell2 kommer att vara namnet på tabeller.
Exempel:
Antag att vi har två tabeller med samma antal kolumner och kolumnernas ordning.
- Tabell 1:T1, Antal kolumner:3, Data:A, B, C, D
- Tabell 2:T2, Antal kolumner:3, Data:B, D, F, G
När vi kör EXCEPT-frågan på dessa två tabeller kommer vi att få A och C eftersom dessa två data inte finns i tabell T2, B och D är vanliga i båda tabellerna, som förkastas.
Låt oss förstå SQL UTOM koncept med exempel. Betrakta följande tabeller tillsammans med de givna posterna.
Tabell1:Emp
ANSTÄLLDA ID | FIRST_NAME | LAST_NAME | LÖN | STAD | AVDELNING | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65 000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60 000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50 000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50 000 | MUMBAI | TESTER | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | VAR | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTER | 4 |
Tabell2:Anställd
ANSTÄLLDA ID | FIRST_NAME | LAST_NAME | LÖN | STAD | AVDELNING | MANAGERID |
1001 | Vaibhav | Sharma | 65 000 | PUNE | ORACLE | 1 |
1002 | Nikhil | Vani | 60 000 | NOIDA | ORACLE | 1 |
1003 | Vaibhavi | Mishra | 50 000 | JAIPUR | FMW | 2 |
2001 | Ruchika | Jain | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | Prachi | Sharma | 65500 | PUNE | FMW | 2 |
2003 | Bhavesh | Jain | 50 000 | MUMBAI | TESTER | 4 |
3001 | Deepam | Jauhari | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | VAR | 50500 | JAIPUR | FMW | 2 |
3003 | Pranoti | Shende | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTER | 4 |
Tabell3:Manager
Managerid | manager_name | manager_department |
1 | Snehdeep Kaur | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Anupam Mishra | TESTER |
Tabell4:Manager1
Managerid | manager_name | manager_department |
1 | Ishita Agrawal | ORACLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Paul Oakip | TESTER |
Exempel 1: Anta att vi vill sammanfoga de två ovanstående tabellerna Emp och Employee i vår SELECT-fråga med operatorn 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;
Vi använder INNER JOIN-klausulen mellan Emp- och Employee-tabellen där vi visar medarbetar-ID, namn, stad, avdelning, chefs-ID och chefsnamn med UTOM operatorn. Ovanstående fråga visar endast de unika värdena mellan båda tabellerna.
Ovanstående fråga ger följande utdata:
Om vi observerar tabelldata finns det två vanliga data mellan båda tabellerna Emp table och Employee table, d.v.s. anställd-id 3002 och 4001. Anställd-id 4001-detaljer visas förutom 3002. Eftersom anställd-id 3002 är chefens namn detsamma i båda tabellerna. och Chef1 men medarbetar-id 4001 Chefsnamn är olika i båda tabellerna, information om anställd-id 4002 visas.
Exempel 2: Anta att vi vill sammanfoga de två ovanstående tabellerna Emp och Employee i vår SELECT-fråga med operatorn EXCEPT och sortera resultatet efter deras lön i fallande ordning. Vi kommer att använda ORDER BY-satsen för att sortera resultatuppsättningen i SQL-frågan.
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;
Frågan ovan visar följande utdata:
Exempel 3: Anta att vi vill sammanfoga de två ovanstående tabellerna Emp och Employee i vår SELECT-fråga med EXCEPT operatorn där anställdas lön över 55 000 från Emp-tabellen och anställds stad inkluderar 'Pune', 'Mumbai', 'Jaipur' från Employee-tabellen.
SELECT * FROM EMP WHERE SALARY > 55000 EXCEPT SELECT * FROM EMPLOYEE WHERE CITY IN ('Pune', 'Mumbai', 'Jaipur');
Ovanstående frågas första SELECT-sats hämtar alla detaljer om de anställda vars lön är högre än 55 000 från Emp-tabellen. Den andra SELECT-satsen hämtar alla detaljer om de anställda vars städer inkluderar Pune, Mumbai, Jaipur från tabellen Anställda. Sedan kommer EXCEPT-operatorn att köras mellan Emp-tabellen och Employee-tabellen.
Detta ger följande utdata: