Database
 sql >> Baza danych >  >> RDS >> Database

SQL z wyjątkiem

W SQL prawdopodobnie używamy klauzuli JOIN, aby otrzymać łączny wynik z jednej lub więcej niż jednej tabeli. Czasami jednak potrzebujemy wyniku zawierającego dane z jednej tabeli, a rekord nie powinien być dostępny w drugiej tabeli. W takim przypadku SQL ma nazwę koncepcyjną z wyjątkiem SQL.

Do oczyszczenia danych z więcej niż jednej tabeli użyliśmy SQL Except. Wyjątek SQL jest tym samym, co operator minus, który stosujemy w matematyce. SQL Z wyjątkiem first łączy dwie lub więcej niż dwie instrukcje SELECT w zapytaniu i zwraca dane z pierwszej instrukcji SELECT. Nie jesteśmy dostępni w innym wyniku instrukcji SELECT.

Zasady SQL EXCEPT

Powinniśmy zrozumieć wszystkie zasady i przepisy przed użyciem zapytania EXCEPT w SQL:

  • Liczba i kolejność kolumn w danej tabeli muszą być takie same w całym zapytaniu SELECT.
  • Typ danych kolumny musi być taki sam lub zgodny.

Składnia SQL Z WYJĄTKIEM

SELECT * FROM table1 EXCEPT SELECT * FROM table2;

Tabela1 i Tabela2 będą nazwami tabel.

Przykład:

Załóżmy, że mamy dwie tabele z taką samą liczbą kolumn i kolejnością kolumn.

  • Tabela 1:T1, Liczba kolumn:3, Dane:A, B, C, D
  • Tabela 2:T2, Liczba kolumn:3, Dane:B, D, F, G

Za każdym razem, gdy wykonamy zapytanie EXCEPT na tych dwóch tabelach, otrzymamy A i C, ponieważ te dwa dane nie są obecne w tabeli T2, B i D są wspólne w obu tabelach, które są odrzucane.

Rozumiemy koncepcję SQL EXCEPT na przykładach. Rozważ poniższe tabele wraz z podanymi rekordami.

Tabela1:Emp

ID PRACOWNIKA FIRST_NAME LAST_NAME WYNAGRODZENIE MIASTO DZIAŁ IDENTYFIKATOR KIEROWCY
1001 VAIBHAVI MISHRA 65000 PUNE WYROCZNIA 1
1002 VAIBHAV SHARMA 60000 NOIDA WYROCZNIA 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACI SHARMA 55500 CZANDIGAR WYROCZNIA 1
2002 PRZYJMUJ SIĘ JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 MUMBAJ TESTOWANIE 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA GDZIE 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAJ JAVA 3
4001 RAJESH GOUD 60500 MUMBAJ TESTOWANIE 4

Tabela2:Pracownik

ID PRACOWNIKA FIRST_NAME LAST_NAME WYNAGRODZENIE MIASTO DZIAŁ IDENTYFIKATOR KIEROWCY
1001 Vaibhav Szarma 65000 PUNE WYROCZNIA 1
1002 Nikhil Wani 60000 NOIDA WYROCZNIA 1
1003 Waibhavi Miszra 50000 JAIPUR FMW 2
2001 Ruchika Jain 55500 CZANDIGAR WYROCZNIA 1
2002 Praci Szarma 65500 PUNE FMW 2
2003 Bhawesz Jain 50000 MUMBAJ TESTOWANIE 4
3001 Deepam Jauhari 55500 PUNE JAVA 3
3002 ANUJA GDZIE 50500 JAIPUR FMW 2
3003 Pranoti Shende 58500 MUMBAJ JAVA 3
4001 RAJESH GOUD 60500 MUMBAJ TESTOWANIE 4

Tabela3:Menedżer

Identyfikator menedżera nazwa_menedżera manager_department
1 Snehdeep Kaur WYROCZNIA
2 Kirti Kirtane FMW
3 Abhishek Manish JAVA
4 Anupam Mishra TESTOWANIE

Tabela 4:Menedżer1

Identyfikator menedżera nazwa_menedżera manager_department
1 Ishita Agrawal WYROCZNIA
2 Kirti Kirtane FMW
3 Abhishek Manish JAVA
4 Paweł Oakip TESTOWANIE

Przykład 1: Załóżmy, że chcemy połączyć powyższe dwie tabele Emp i Employee w naszym zapytaniu SELECT za pomocą operatora 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;

Używamy klauzuli INNER JOIN między tabelą Emp i Employee, w której wyświetlamy identyfikator pracownika, imię i nazwisko, miasto, dział, identyfikator menedżera i nazwisko menedżera przy użyciu operatora EXCEPT. Powyższe zapytanie wyświetli tylko te unikalne wartości między obiema tabelami.

Powyższe zapytanie daje następujące dane wyjściowe:

Jeśli obserwujemy dane w tabelach, istnieją dwa wspólne dane między obiema tabelami Tabela Emp i Tabela pracownika, tj. Identyfikator pracownika 3002 i 4001. Wyświetlane są szczegóły id pracownika 4001 z wyjątkiem 3002. Ponieważ identyfikator pracownika 3002 Nazwa menedżera jest taka sama w obu tabelach Menedżer i Manager1, ale identyfikator pracownika 4001 Nazwiska menedżera są różne w obu tabelach, wyświetlane są szczegóły identyfikatora pracownika 4002.

Przykład 2: Załóżmy, że chcemy połączyć powyższe dwie tabele Emp i Employee w naszym zapytaniu SELECT za pomocą operatora EXCEPT i posortować zestaw wyników według ich wynagrodzenia w kolejności malejącej. Użyjemy klauzuli ORDER BY, aby posortować zestaw wyników w zapytaniu 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;

Powyższe zapytanie pokazuje następujące dane wyjściowe:

Przykład 3: Załóżmy, że chcemy połączyć powyższe dwie tabele Emp i Employee w naszym zapytaniu SELECT za pomocą operatora EXCEPT, w którym wynagrodzenie pracownika większe niż 55000 z tabeli Emp i miasta pracownika to „Pune”, „Mumbai”, „Jaipur” z tabeli Employee.

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

Powyższe zapytanie pierwsze polecenie SELECT pobiera wszystkie szczegóły pracowników, których wynagrodzenie jest większe niż 55000 z tabeli Emp. Drugie polecenie SELECT pobiera wszystkie dane pracowników, których miasta obejmują Pune, Mumbai, Jaipur z tabeli Employee. Następnie operator EXCEPT zostanie wykonany między tabelą Emp a tabelą Employee.

Daje to następujący wynik:


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Twój kompletny przewodnik po SQL Join:CROSS JOIN – część 3

  2. Schemat Switch-A-Roo:Część 2

  3. Połączenie lewe SQL

  4. AKTUALIZACJE statystyk

  5. Tworzenie kopii zapasowych baz danych SQL za pomocą VDP Advanced SQL Agent