Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak działa Z WYJĄTKIEM w SQL Server

Możesz użyć T-SQL EXCEPT operator w SQL Server, aby zwrócić różne wiersze z lewego zapytania wejściowego, które nie są wyprowadzane przez prawe zapytanie wejściowe.

Składnia

Składnia wygląda tak:

{ <query_specification> | ( <query_expression> ) }   
{ EXCEPT }  
{ <query_specification> | ( <query_expression> ) }

Właściwie dokumentacja firmy Microsoft zawiera INTERSECT operator w swojej definicji, ponieważ ta sama składnia dotyczy EXCEPT i INTERSECT .

Składnia Microsoftu wygląda następująco:

{ <query_specification> | ( <query_expression> ) }   
{ EXCEPT | INTERSECT }  
{ <query_specification> | ( <query_expression> ) }

Przykład

Wyobraź sobie, że masz dwa stoły; Cats i Dogs .

Cats

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 1       | Brush     |
| 2       | Scarcat   |
| 3       | Flutter   |
| 4       | Flutter   |
+---------+-----------+

Dogs

+---------+-----------+
| DogId   | DogName   |
|---------+-----------|
| 1       | Yelp      |
| 2       | Woofer    |
| 3       | Brush     |
| 4       | Brush     |
+---------+-----------+

Możemy użyć EXCEPT operator, aby zwrócić tylko odrębne wiersze z lewego zapytania wejściowego, które nie są wyprowadzane przez prawe zapytanie wejściowe.

Oto przykład.

SELECT CatName FROM Cats
EXCEPT
SELECT DogName FROM Dogs;

Wynik:

+-----------+
| CatName   |
|-----------|
| Flutter   |
| Scarcat   |
+-----------+

Więc otrzymujemy tylko wartości, które pojawiają się w Cats tabela, która nie pojawia się również w Dogs stół. Jak wspomniano, zwraca różne wiersze, więc tylko jeden wiersz jest zwracany dla Flutter .

Możemy też to zmienić i umieścić Dogs tabela po lewej i Cats po prawej.

SELECT DogName FROM Dogs
EXCEPT
SELECT CatName FROM Cats;

Wynik:

+-----------+
| DogName   |
|-----------|
| Woofer    |
| Yelp      |
+-----------+

EXCEPT operator pojawia się jako LEFT ANTI SEMI JOIN w planie wykonania.

Nasz pierwszy przykład jest podobny do tego, co następuje:

SELECT 
    DISTINCT CatName
FROM Cats c 
WHERE NOT EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);

Wynik:

+-----------+
| CatName   |
|-----------|
| Flutter   |
| Scarcat   |
+-----------+

Zwróć uwagę, że używając EXCEPT , liczba i kolejność kolumn muszą być takie same we wszystkich zapytaniach. Ponadto typy danych muszą być zgodne. W rzeczywistości nie muszą być takie same, ale muszą być porównywalne poprzez niejawną konwersję.

Również podczas porównywania wartości kolumn w celu określenia DISTINCT wiersze, dwa NULL wartości są uważane za równe.

Jeśli zamierzasz używać EXCEPT w zapytaniach rozproszonych należy pamiętać, że jest on wykonywany tylko na serwerze lokalnym i nie jest przesyłany do serwera połączonego, co może wpłynąć na wydajność.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wartość wydajności prowadnic COMB

  2. Najpopularniejsze systemy zarządzania bazami danych na świecie

  3. Jak usunąć właściwość tożsamości kolumny w tabeli SQL Server — samouczek SQL Server / T-SQL 44

  4. SqlServer:Logowanie nie powiodło się dla użytkownika

  5. Jak znaleźć lokalizację plików danych i plików dziennika w SQL Server