MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Objaśnienie operatora MariaDB INTERSECT

W MariaDB INTERSECT operator przecina dwa zapytania i zwraca tylko te wiersze, które są zwracane w obu zapytaniach.

Zwraca wszystkie wiersze od lewej SELECT zestaw wyników, które są również obecne w prawym SELECT zestaw wyników.

Składnia

Oficjalna składnia wygląda następująco:

SELECT ...
(INTERSECT [ALL | DISTINCT] | EXCEPT [ALL | DISTINCT] | UNION [ALL | DISTINCT]) SELECT ...
[(INTERSECT [ALL | DISTINCT] | EXCEPT [ALL | DISTINCT] | UNION [ALL | DISTINCT]) SELECT ...]
[ORDER BY [column [, column ...]]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]

Powyższe obejmuje również EXCEPT i UNION operatorów w składni, ponieważ ta sama składnia dotyczy tych operatorów.

Od wersji MariaDB 10.4.0 do określenia pierwszeństwa można użyć nawiasów.

Przykład

Załóżmy, że mamy następujące tabele:

SELECT * FROM Employees;
SELECT * FROM Customers;

Wynik:

+------------+--------------+
| EmployeeId | EmployeeName |
+------------+--------------+
|          1 | Bart         |
|          2 | Jan          |
|          3 | Ava          |
|          4 | Rohit        |
|          5 | Monish       |
|          6 | Monish       |
|          7 | Monish       |
+------------+--------------+

+------------+--------------+
| CustomerId | CustomerName |
+------------+--------------+
|          1 | Mia          |
|          2 | Rohit        |
|          3 | Peter        |
|          4 | Ava          |
|          5 | Monish       |
|          6 | Monish       |
+------------+--------------+

Możemy użyć INTERSECT operator zwraca pracowników, którzy są również klientami:

SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerName FROM Customers;

Wynik:

+--------------+
| EmployeeName |
+--------------+
| Ava          |
| Rohit        |
| Monish       |
+--------------+

Więc otrzymujemy tylko wartości, które pojawiają się w Employees tabela, która pojawia się również w Customers stół.

Domyślnie zwraca różne wiersze, więc dla Monish zwracany jest tylko jeden wiersz, mimo że istnieje wielu pracowników i wielu klientów o tej nazwie. Możemy to jednak zmienić.

Dołącz duplikaty

Domyślnie INTERSECT operator domyślnie stosuje DISTINCT operacja. Innymi słowy, domyślnie zwraca tylko różne wartości.

Przed wersją MariaDB 10.5.0 niejawny DISTINCT była naszą jedyną opcją – nie mogliśmy określić ALL . Jednak MariaDB 10.5.0 wprowadziła INTERSECT ALL i INTERSECT DISTINCT składnia.

Oznacza to, że możemy teraz wykonywać takie zapytania:

SELECT EmployeeName FROM Employees
INTERSECT ALL
SELECT CustomerName FROM Customers;

Wynik:

+--------------+
| EmployeeName |
+--------------+
| Monish       |
| Ava          |
| Rohit        |
| Monish       |
+--------------+

Tym razem otrzymaliśmy cztery wiersze, zamiast trzech, które otrzymaliśmy w naszym pierwszym przykładzie.

Widzimy, że zostały zwrócone dwa wiersze zawierające nazwę Monish zamiast jednego, jak w naszym pierwszym przykładzie. W rzeczywistości jest trzech klientów o nazwie Monish, ale tylko dwóch pracowników o tej nazwie. Dlatego operacja przecina tylko dwa z nich.

A dla kompletności, oto przykład, który wyraźnie używa DISTINCT operator:

SELECT EmployeeName FROM Employees
INTERSECT DISTINCT
SELECT CustomerName FROM Customers;

Wynik:

+--------------+
| EmployeeName |
+--------------+
| Ava          |
| Rohit        |
| Monish       |
+--------------+

Jest to ten sam wynik, który otrzymalibyśmy, gdybyśmy usunęli DISTINCT operatora.

Alternatywne zapytanie

Możliwe jest uzyskanie tego samego wyniku bez użycia INTERSECT operator. Na przykład moglibyśmy przepisać nasz pierwszy przykład do tego:

SELECT 
    DISTINCT EmployeeName
FROM Employees e 
WHERE EXISTS (SELECT CustomerName FROM Customers c
WHERE e.EmployeeName = c.CustomerName);

Wynik:

+--------------+
| EmployeeName |
+--------------+
| Ava          |
| Rohit        |
| Monish       |
+--------------+

Pamiętaj, INTERSECT operator pomaga uprościć kod.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja SUM() w MariaDB

  2. MariaDB CEIL() Objaśnienie

  3. MariaDB DŁUGOŚĆB() Objaśnienie

  4. Pokaż sortowanie w MariaDB

  5. Jak działa MAKETIME() w MariaDB