sql >> Database >  >> RDS >> Database

SQL behalve

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:


  1. Parameters doorgeven aan mysql-querycallback in nodejs

  2. Geschat aantal te lezen rijen

  3. Kan ik een binaire tekenreeks opslaan in de CLOB-kolom?

  4. Gebruik OBJECT_NAME() om de naam van een object op te halen uit zijn object_id in SQL Server