MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Operator INTERSECT MariaDB Dijelaskan

Di MariaDB, INTERSECT operator memotong dua kueri dan hanya mengembalikan baris yang dikembalikan di kedua kueri.

Ini mengembalikan semua baris dari kiri SELECT kumpulan hasil yang juga ada di kanan SELECT kumpulan hasil.

Sintaks

Sintaks resminya seperti ini:

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}]

Di atas juga termasuk EXCEPT dan UNION operator dalam sintaks, karena sintaks yang sama berlaku untuk operator tersebut.

Dari MariaDB 10.4.0, tanda kurung dapat digunakan untuk menentukan prioritas.

Contoh

Misalkan kita memiliki tabel berikut:

SELECT * FROM Employees;
SELECT * FROM Customers;

Hasil:

+------------+--------------+
| 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       |
+------------+--------------+

Kita dapat menggunakan INTERSECT operator untuk mengembalikan karyawan yang juga pelanggan:

SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerName FROM Customers;

Hasil:

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

Jadi kami hanya mendapatkan nilai yang muncul di Employees tabel yang juga muncul di Customers meja.

Secara default, ini mengembalikan baris yang berbeda, jadi hanya satu baris yang dikembalikan untuk Monish, meskipun ada beberapa karyawan dan beberapa pelanggan dengan nama itu. Kita bisa mengubah ini sekalipun.

Sertakan Duplikat

Secara default, INTERSECT operator secara implisit menerapkan DISTINCT operasi. Dengan kata lain, ini hanya mengembalikan nilai yang berbeda secara default.

Sebelum MariaDB 10.5.0, implisit DISTINCT adalah satu-satunya pilihan kami – kami tidak dapat menentukan ALL . Namun, MariaDB 10.5.0 memperkenalkan INTERSECT ALL dan INTERSECT DISTINCT sintaksis.

Artinya, sekarang kita dapat melakukan kueri seperti ini:

SELECT EmployeeName FROM Employees
INTERSECT ALL
SELECT CustomerName FROM Customers;

Hasil:

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

Kali ini kami mendapat empat baris, bukan tiga baris yang kami dapatkan di contoh pertama kami.

Kita dapat melihat bahwa dua baris yang berisi nama Monish dikembalikan, bukan hanya satu seperti pada contoh pertama kita. Sebenarnya ada tiga pelanggan bernama Monish, tetapi hanya dua karyawan dengan nama itu. Oleh karena itu, operasi hanya memotong dua dari mereka.

Dan demi kelengkapan, berikut adalah contoh yang secara eksplisit menggunakan DISTINCT operator:

SELECT EmployeeName FROM Employees
INTERSECT DISTINCT
SELECT CustomerName FROM Customers;

Hasil:

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

Ini adalah hasil yang sama yang akan kita dapatkan jika kita menghapus DISTINCT operator.

Kueri Alternatif

Anda bisa mendapatkan hasil yang sama tanpa menggunakan INTERSECT operator. Misalnya, kita dapat menulis ulang contoh pertama kita menjadi ini:

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

Hasil:

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

Ingat, INTERSECT operator membantu menyederhanakan kode.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pencadangan Basis Data - Membandingkan MariaDB Mariabackup dan Percona Xtrabackup

  2. Cara Menginstal dan Mengonfigurasi MaxScale untuk MariaDB

  3. Bagaimana LOCATE() Bekerja di MariaDB

  4. Panduan untuk Otomatisasi Basis Data dengan Kontrol Cluster Somenines

  5. Bagaimana TIMESTAMPADD() Bekerja di MariaDB