sql >> Databáze >  >> RDS >> Database

SQL kromě

V SQL pravděpodobně používáme klauzuli JOIN k získání kombinovaného výsledku z jedné nebo více než jedné tabulky. Někdy však chceme výsledek, který obsahuje data z jedné tabulky a záznam by neměl být dostupný v druhé tabulce. V takovém případě má SQL název konceptu SQL Except.

K čištění dat z více než jedné tabulky jsme použili SQL Except. SQL Except je stejný jako operátor mínus, který používáme v matematice. SQL Except nejprve sloučí dva nebo více než dva příkazy SELECT v dotazu a vrátí data z prvního příkazu SELECT. V jiném výsledku příkazu SELECT nejsme k dispozici.

SQL EXCEPT Rules

Před použitím dotazu EXCEPT v SQL bychom měli porozumět všem pravidlům a nařízením:

  • Počet a pořadí sloupců v dané tabulce musí být v celém dotazu SELECT stejné.
  • Datový typ sloupce musí být stejný nebo kompatibilní.

Syntaxe pro SQL EXCEPT

SELECT * FROM table1 EXCEPT SELECT * FROM table2;

Table1 a Table2 budou názvy tabulek.

Příklad:

Předpokládejme, že máme dvě tabulky se stejným počtem sloupců a pořadím sloupců.

  • Tabulka 1:T1, Počet sloupců:3, Údaje:A, B, C, D
  • Tabulka 2:T2, Počet sloupců:3, Údaje:B, D, F, G

Kdykoli provedeme dotaz EXCEPT na těchto dvou tabulkách, dostaneme A a C, protože tato dvě data nejsou přítomna v tabulce T2, B a D jsou společné v obou tabulkách, což se zahodí.

Pojďme pochopit SQL EXCEPT koncept s příklady. Zvažte následující tabulky spolu s danými záznamy.

Tabulka1:Emp

ID ZAMĚSTNANCE FIRST_NAME LAST_NAME PLAT MĚSTO ODDĚLENÍ ID SPRÁVCE
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 TESTOVÁNÍ 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA KDE 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TESTOVÁNÍ 4

Tabulka 2:Zaměstnanec

ID ZAMĚSTNANCE FIRST_NAME LAST_NAME PLAT MĚSTO ODDĚLENÍ ID SPRÁVCE
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 TESTOVÁNÍ 4
3001 Deepam Jauhari 55500 PUNE JAVA 3
3002 ANUJA KDE 50500 JAIPUR FMW 2
3003 Pranoti Shende 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TESTOVÁNÍ 4

Tabulka 3:Správce

Managerid název_manažera manažer_oddělení
1 Snehdeep Kaur ORACLE
2 Kirti Kirtane FMW
3 Abhishek Manish JAVA
4 Anupam Mishra TESTOVÁNÍ

Tabulka 4:Správce1

Managerid název_manažera manažer_oddělení
1 Ishita Agrawal ORACLE
2 Kirti Kirtane FMW
3 Abhishek Manish JAVA
4 Paul Oakip TESTOVÁNÍ

Příklad 1: Předpokládejme, že chceme spojit výše uvedené dvě tabulky Emp a Employee v našem SELECT dotazu pomocí operátoru 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;

Používáme klauzuli INNER JOIN mezi tabulkou Emp a Employee, kde zobrazujeme ID zaměstnance, jméno, město, oddělení, ID manažera a jméno manažera pomocí operátoru EXCEPT. Výše uvedený dotaz zobrazí pouze tyto jedinečné hodnoty mezi oběma tabulkami.

Výše uvedený dotaz poskytuje následující výstup:

Pokud se podíváme na data tabulek, jsou mezi oběma tabulkami Emp table a Employee table dva společné údaje, tj. ID zaměstnance 3002 a 4001. Podrobnosti ID zaměstnance 4001 se zobrazují kromě 3002. Protože ID zaměstnance 3002 Jméno manažera je v obou tabulkách stejné a Manager1, ale ID zaměstnance 4001 Jména manažerů se v obou tabulkách liší, zobrazí se podrobnosti s ID zaměstnance 4002.

Příklad 2: Předpokládejme, že chceme spojit dvě výše uvedené tabulky Emp a Employee v našem SELECT dotazu pomocí operátoru EXCEPT a setřídit výslednou sadu podle jejich platu v sestupném pořadí. Klauzuli ORDER BY použijeme k seřazení sady výsledků v dotazu 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;

Výše uvedený dotaz zobrazuje následující výstup:

Příklad 3: Předpokládejme, že chceme spojit dvě výše uvedené tabulky Emp a Employee v našem SELECT dotazu pomocí operátoru EXCEPT, kde mzda zaměstnance vyšší než 55000 z tabulky Emp a město zaměstnance zahrnuje 'Pune', 'Mumbai', 'Jaipur' z tabulky Employee.

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

Výše uvedený dotaz první příkaz SELECT načte všechny podrobnosti o těch zaměstnancích, jejichž plat je větší než 55 000 z tabulky Emp. Druhý příkaz SELECT načte všechny podrobnosti o těch zaměstnancích, jejichž města zahrnují Pune, Mumbai, Jaipur z tabulky Zaměstnanci. Poté bude mezi tabulkou Emp a tabulkou Zaměstnanci proveden operátor EXCEPT.

Výsledkem je následující výstup:


  1. sql server 2008 management studio nekontroluje syntaxi mého dotazu

  2. Volání notace pro podprogramy PL/SQL v databázi Oracle

  3. Chyba při pokusu o načtení textu chyby ORA-01804

  4. Chyby, úskalí a doporučené postupy T-SQL – pivotování a unpivoting