In SQL gebruiken we waarschijnlijk de JOIN-component om het gecombineerde resultaat van een of meer tabellen te ontvangen. Maar soms willen we een resultaat dat gegevens uit de ene tabel bevat en de record zou niet beschikbaar moeten zijn in de andere tabel. In dat geval heeft SQL de conceptnaam SQL Behalve.
Om de gegevens van meer dan één tabel te zuiveren, hebben we SQL Except gebruikt. De SQL Except is hetzelfde als de min-operator die we in de wiskunde gebruiken. SQL Except voegt eerst de twee of meer dan twee SELECT-instructies in de query samen en retourneert de gegevens van de eerste SELECT-instructie. We zijn niet beschikbaar in een ander SELECT-instructieresultaat.
SQL BEHALVE Regels
We moeten alle regels en voorschriften begrijpen voordat we de EXCEPT-query in SQL gebruiken:
- Het aantal en de volgorde van kolommen in de gegeven tabel moet hetzelfde zijn in de hele SELECT-query.
- Het gegevenstype van de kolom moet hetzelfde of compatibel zijn.
De syntaxis voor SQL BEHALVE
SELECT * FROM table1 EXCEPT SELECT * FROM table2;
Tabel1 en Tabel2 zullen de naam van tabellen zijn.
Voorbeeld:
Stel dat we twee tabellen hebben met hetzelfde aantal kolommen en de volgorde van de kolommen.
- Tabel 1:T1, aantal kolommen:3, gegevens:A, B, C, D
- Tabel 2:T2, aantal kolommen:3, gegevens:B, D, F, G
Telkens wanneer we de EXCEPT-query uitvoeren op deze twee tabellen, krijgen we A en C omdat deze twee gegevens niet aanwezig zijn in tabel T2, B en D zijn gebruikelijk in beide tabellen, die worden weggegooid.
Laten we het SQL BEHALVE concept met voorbeelden begrijpen. Bekijk de volgende tabellen samen met de gegeven records.
Tabel1:Emp
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD | AFDELING | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORAKLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORAKLE | 1 |
1003 | NIKHIL | VANI | 50000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORAKLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50000 | MUMBAI | TESTEN | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WAAR | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTEN | 4 |
Tabel 2:Werknemer
WERKNEMER-ID | FIRST_NAME | LAST_NAME | SALARIS | STAD | AFDELING | MANAGERID |
1001 | Vaibhav | Sharma | 65000 | PUNE | ORAKLE | 1 |
1002 | Nikhil | Vani | 60000 | NOIDA | ORAKLE | 1 |
1003 | Vaibhavi | Mishra | 50000 | JAIPUR | FMW | 2 |
2001 | Ruchika | Jain | 55500 | CHANDIGARH | ORAKLE | 1 |
2002 | Prachi | Sharma | 65500 | PUNE | FMW | 2 |
2003 | Bhavesh | Jain | 50000 | MUMBAI | TESTEN | 4 |
3001 | Deepam | Jauhari | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WAAR | 50500 | JAIPUR | FMW | 2 |
3003 | Pranoti | Shende | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | GOUD | 60500 | MUMBAI | TESTEN | 4 |
Tabel 3:Manager
Managerid | manager_name | manager_department |
1 | Snehdeep Kaur | ORAKLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Anupam Mishra | TESTEN |
Tabel4:Manager1
Managerid | manager_name | manager_department |
1 | Ishita Agrawal | ORAKLE |
2 | Kirti Kirtane | FMW |
3 | Abhishek Manish | JAVA |
4 | Paul Oakip | TESTEN |
Voorbeeld 1: Stel dat we de bovenstaande twee tabellen Werknemer en Werknemer willen samenvoegen in onze SELECT-query met behulp van de EXCEPT-operator.
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;
We gebruiken de INNER JOIN-clausule tussen Emp en Employee-tabel waar we Employee Id, Name, City, Department, Manager Id en Manager Name weergeven met de EXCEPT-operator. De bovenstaande zoekopdracht toont alleen die unieke waarden tussen beide tabellen.
De bovenstaande query geeft de volgende output:
Als we de tabelgegevens bekijken, zijn er twee gemeenschappelijke gegevens tussen beide tabellen Werk-tabel en Werknemer-tabel, d.w.z. Werknemer-ID 3002 en 4001. Werknemer-ID 4001 details worden weergegeven behalve 3002. Omdat Werknemer-ID 3002 Managernaam hetzelfde is in beide tabellen Manager en Manager1, maar Werknemer-ID 4001 Managernamen zijn verschillend in beide tabellen, details van werknemer-ID 4002 worden weergegeven.
Voorbeeld 2: Stel dat we de bovenstaande twee tabellen Werknemer en Werknemer willen samenvoegen in onze SELECT-query met behulp van de EXCEPT-operator en het resultaat willen sorteren op hun salaris in aflopende volgorde. We zullen de ORDER BY-component gebruiken om de resultatenset in de SQL-query te sorteren.
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;
De bovenstaande query toont de volgende uitvoer:
Voorbeeld 3: Stel dat we de bovenstaande twee tabellen Werknemer en Werknemer willen samenvoegen in onze SELECT-query met behulp van de operator EXCEPT, waarbij het werknemerssalaris hoger dan 55000 uit de Emp-tabel en de werknemersstad 'Pune', 'Mumbai', 'Jaipur' uit de werknemerstabel bevatten.
SELECT * FROM EMP WHERE SALARY > 55000 EXCEPT SELECT * FROM EMPLOYEE WHERE CITY IN ('Pune', 'Mumbai', 'Jaipur');
De bovenstaande query eerste SELECT-instructie haalt alle details op van die werknemers wiens salaris hoger is dan 55000 uit de Emp-tabel. De tweede SELECT-instructie haalt alle details op van die werknemers wiens steden Pune, Mumbai en Jaipur omvatten uit de tabel met werknemers. Vervolgens wordt de EXCEPT-operator uitgevoerd tussen de Emp-tabel en de Employee-tabel.
Dit geeft de volgende output: