Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana INTERSECT Bekerja di SQL Server

Di SQL Server, Anda dapat menggunakan T-SQL INTERSECT operator untuk mengembalikan baris berbeda yang dihasilkan oleh kueri input kiri dan kanan.

Sintaks

Sintaksnya seperti ini:

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

Sebenarnya, dokumentasi Microsoft menyertakan EXCEPT operator dalam definisinya, karena sintaks yang sama berlaku untuk INTERSECT dan EXCEPT .

Sintaks Microsoft seperti ini:

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

Contoh

Bayangkan Anda memiliki dua tabel; Cats dan Dogs .

Cats

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

Dogs

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

Perhatikan bahwa ada seekor kucing bernama Brush dan ada juga dua anjing bernama Brush.

Kita dapat menggunakan INTERSECT operator untuk mengembalikan hanya baris berbeda yang dihasilkan oleh kueri input kiri dan kanan.

Dengan kata lain, ini akan mengembalikan nilai apa pun yang muncul di kedua tabel, tetapi hanya akan mengembalikan satu baris (bahkan jika ada beberapa baris). Oleh karena itu, dalam kasus kami ini akan mengembalikan Brush .

Ayo lakukan.

SELECT 
    CatName AS PetName
FROM Cats
INTERSECT
SELECT 
    DogName AS PetName
FROM Dogs;

Hasil:

Brush

Seperti disebutkan, ini mengembalikan baris yang berbeda, jadi hanya satu baris yang dikembalikan dalam kasus ini.

Ini muncul sebagai LEFT SEMI JOIN dalam rencana eksekusi.

Ini mirip dengan melakukan hal berikut:

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

Hasil:

Brush

Perhatikan bahwa saat menggunakan INTERSECT , jumlah dan urutan kolom harus sama di semua kueri. Juga, tipe data harus kompatibel. Sebenarnya tidak harus sama, tetapi harus sebanding melalui konversi implisit.

Juga, saat membandingkan nilai kolom untuk menentukan DISTINCT baris, dua NULL nilai dianggap sama.

Jika Anda ingin menggunakan INTERSECT dalam kueri terdistribusi, perhatikan bahwa ini hanya dijalankan di server lokal dan tidak didorong ke server tertaut, dan karena itu dapat memengaruhi kinerja.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengatasi SQL Server Database Terjebak dalam Masalah Mode Tersangka Secara Efisien

  2. Tidak dapat memuat secara massal. Kode kesalahan sistem operasi 5 (Akses ditolak.)

  3. Cara Mengubah Warna dan Font di SQL Server Management Studio ( SSMS) - Tutorial SQL Server / TSQL Bagian 12

  4. 5 Cara Menghitung Jumlah Tabel Buatan Pengguna dalam Database SQL Server

  5. Lewati tabel sebagai parameter ke sql server UDF