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

SQL undtagen

I SQL bruger vi sandsynligvis JOIN-sætningen til at modtage det kombinerede resultat fra en eller mere end én tabel. Men nogle gange ønsker vi et resultat, der indeholder data fra én tabel, og posten bør ikke være tilgængelig i den anden tabel. I så fald har SQL konceptnavnet SQL Except.

For at rense dataene fra mere end én tabel brugte vi SQL Except. SQL Except er den samme som minusoperatoren, vi gør i matematik. SQL Except fletter først de to eller flere end to SELECT-sætninger i forespørgslen og returnerer dataene fra den første SELECT-sætning. Vi er ikke tilgængelige i et andet SELECT-udsagnsresultat.

SQL UNDTAGET regler

Vi bør forstå alle regler og bestemmelser, før vi bruger UNDTAGELSE forespørgslen i SQL:

  • Antallet og rækkefølgen af ​​kolonner i den givne tabel skal være det samme i hele SELECT-forespørgslen.
  • Kolonnens datatype skal være den samme eller kompatibel.

Syntaksen for SQL UNDTAGET

SELECT * FROM table1 EXCEPT SELECT * FROM table2;

Tabel1 og Tabel2 vil være navnet på tabeller.

Eksempel:

Antag, at vi har to tabeller med det samme antal kolonner og rækkefølgen af ​​kolonner.

  • Tabel 1:T1, Antal kolonner:3, Data:A, B, C, D
  • Tabel 2:T2, Antal kolonner:3, Data:B, D, F, G

Hver gang vi udfører EXCEPT-forespørgslen på disse to tabeller, får vi A og C, fordi disse to data ikke er til stede i tabel T2, B og D er fælles i begge tabeller, som kasseres.

Lad os forstå SQL UNDTAGET koncept med eksempler. Overvej følgende tabeller sammen med de givne poster.

Tabel1:Emp

EMPLOYEEID FIRST_NAME LAST_NAME LØN BY AFDELING 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 TEST 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA HVOR 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TEST 4

Tabel 2:Medarbejder

EMPLOYEEID FIRST_NAME LAST_NAME LØN BY AFDELING 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 TEST 4
3001 Deepam Jauhari 55500 PUNE JAVA 3
3002 ANUJA HVOR 50500 JAIPUR FMW 2
3003 Pranoti Shende 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TEST 4

Tabel3:Manager

Managerid manager_navn manager_afdeling
1 Snehdeep Kaur ORACLE
2 Kirti Kirtane FMW
3 Abhishek Manish JAVA
4 Anupam Mishra TEST

Tabel 4:Manager1

Managerid manager_navn manager_afdeling
1 Ishita Agrawal ORACLE
2 Kirti Kirtane FMW
3 Abhishek Manish JAVA
4 Paul Oakip TEST

Eksempel 1: Antag, at vi ønsker at forbinde ovenstående to tabeller Emp og Employee i vores SELECT-forespørgsel ved hjælp af operatoren 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 bruger INNER JOIN-klausulen mellem Emp- og Employee-tabellen, hvor vi viser medarbejder-id, navn, by, afdeling, leder-id og ledernavn ved brug af UNDTAGET operatør. Ovenstående forespørgsel vil kun vise de unikke værdier mellem begge tabeller.

Ovenstående forespørgsel giver følgende output:

Hvis vi observerer tabellernes data, er der to fælles data mellem begge tabeller Emp table og Employee table, dvs. medarbejder-id 3002 og 4001. Medarbejder-id 4001-detaljer vises undtagen 3002. Fordi medarbejder-id 3002 ledernavn er det samme i begge tabeller. og Manager1, men medarbejder-id 4001 Ledernavne er forskellige i begge tabeller, medarbejder-id 4002-detaljer vises.

Eksempel 2: Antag, at vi ønsker at forbinde ovenstående to tabeller Emp og Employee i vores SELECT-forespørgsel ved at bruge EXCEPT-operatoren og sortere resultatet sat efter deres løn i faldende rækkefølge. Vi vil bruge ORDER BY-udtrykket til at sortere resultatsættet i SQL-forespørgslen.

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;

Ovenstående forespørgsel viser følgende output:

Eksempel 3: Antag, at vi ønsker at forbinde de to ovenstående tabeller Emp og Employee i vores SELECT-forespørgsel ved at bruge UNDTAGET operator, hvor medarbejderløn større end 55000 fra Emp-tabellen og medarbejderby inkluderer 'Pune', 'Mumbai', 'Jaipur' fra Employee-tabellen.

SELECT * FROM EMP WHERE SALARY > 55000 EXCEPT SELECT * FROM EMPLOYEE WHERE CITY IN ('Pune', 'Mumbai', 'Jaipur');   

Ovenstående forespørgsel første SELECT-sætning henter alle detaljer om de medarbejdere, hvis løn er større end 55.000 fra Emp-tabellen. Den anden SELECT-sætning henter alle detaljerne om de medarbejdere, hvis byer inkluderer Pune, Mumbai, Jaipur fra medarbejdertabellen. Derefter vil EXCEPT-operatoren blive udført mellem Emp-tabellen og Employee-tabellen.

Dette giver følgende output:


  1. Forkert strengværdi, når du forsøger at indsætte UTF-8 i MySQL via JDBC?

  2. Sådan opretter du en tabel i SQL Server

  3. Sådan fungerer INTERSECT i PostgreSQL

  4. Hvordan krypteres adgangskoden i Oracle?