Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Memahami Perbedaan antara Operator KECUALI dan NOT IN

Operator EXCEPT dan NOT IN digunakan untuk memfilter record dari tabel berdasarkan kriteria tertentu. Dalam artikel ini, kita akan melihat operator-operator ini secara mendetail dan akan menyelidiki perbedaan di antara mereka.

Sebelum kita melangkah lebih jauh, mari kita buat beberapa data dummy yang akan kita gunakan dalam contoh ini:

Menyiapkan Data Dummy

Jalankan skrip berikut untuk membuat database dan tabel dummy yang akan kita gunakan dalam artikel ini.

CREATE Database ShowRoom;
GO
USE ShowRoom;

CREATE TABLE Cars1
(
    id INT,
    name VARCHAR(50) NOT NULL,
    company VARCHAR(50) NOT NULL,
    power INT NOT NULL
 )


CREATE TABLE Cars2
(
    id INT,
    name VARCHAR(50) NOT NULL,
    company VARCHAR(50) NOT NULL,
    power INT NOT NULL
 )

Pada script di atas, kita membuat database ShowRoom dengan dua tabel, Cars1 dan Cars2.

Mari tambahkan beberapa catatan dummy ke tabel Cars1 dan Cars2.

Jalankan script berikut:

USE ShowRoom

INSERT INTO Cars1

VALUES
(1, 'Corrolla', 'Toyota', 1800),
(2, 'City', 'Honda', 1500),
(3, 'C200', 'Mercedez', 2000),
(4, 'Vitz', 'Toyota', 1300),
(5, 'Baleno', 'Suzuki', 1500),
(6, 'C500', 'Mercedez', 5000),
(7, '800', 'BMW', 8000),
(8, 'Mustang', 'Ford', 5000),
(9, '208', 'Peugeot', 5400),
(10, 'Prius', 'Toyota', 3200)


INSERT INTO Cars2

VALUES
(6, 'C500', 'Mercedez', 5000),
(7, '800', 'BMW', 8000),
(8, 'Mustang', 'Ford', 5000),
(9, '208', 'Peugeot', 5400),
(10, 'Prius', 'Toyota', 3200),
(11, 'Atlas', 'Volkswagen', 5000),
(12, '110', 'Bugatti', 8000),
(13, 'Landcruiser', 'Toyota', 3000),
(14, 'Civic', 'Honda', 1800),
(15, 'Accord', 'Honda', 2800)

Kami sekarang memiliki kumpulan data yang berguna.

Mari kita lihat perbedaan operator EXCEPT dan NOT IN satu sama lain menggunakan data ini.

KECUALI Operator

Operator KECUALI memfilter semua catatan dari hasil kueri kiri, yang juga ada di hasil kueri kanan dan mengembalikan hasil yang tersisa dari kueri kiri.

Sintaks operator KECUALI adalah sebagai berikut:

Right_Query EXCEPT Left_Query

Ada dua syarat yang harus dipenuhi sebelum eksekusi operator KECUALI. Mereka adalah:

  • Urutan dan jumlah kolom yang dikembalikan oleh kedua kueri harus sama.
  • Tipe data kolom harus cocok atau kompatibel.

Ini mungkin terdengar rumit. Namun, contoh berikut akan memperjelasnya.

Dalam tabel Cars1 dan Cars2, record dengan id 6 hingga id 10 adalah umum. Jika kita menggunakan operator EXCEPT dengan record dari tabel Cars1 di sebelah kiri dan tabel Cars2 di sebelah kanan, record dari tabel Cars1 tersebut akan dikembalikan yang tidak ada di Cars2.
Mari kita lihat operator EXCEPT beraksi.

USE ShowRoom
SELECT id, name, company, power FROM Cars1
Except
SELECT id, name, company, power FROM Cars2

Hasil query di atas akan terlihat seperti ini:

Query di sisi kiri mengambil semua record dari tabel Cars1 sedangkan di sisi kanan mengambil semua record dari tabel Cars2. Di tabel Cars1 record dengan id 6 sampai 10 juga ada di tabel Cars2, oleh karena itu, operator KECUALI hanya mengembalikan lima baris pertama dari tabel Cars1.

Demikian pula, jika Anda ingin mengembalikan semua catatan dari tabel Cars2 yang tidak ada di tabel Cars1, Anda cukup memindahkan tabel Cars2 ke kiri operator KECUALI seperti yang ditunjukkan dalam kueri berikut:

USE ShowRoom
SELECT id, name, company, power FROM  Cars2
Except
SELECT id, name, company, power FROM  Cars1

Menggunakan Operator KECUALI pada Satu Tabel

Pada contoh sebelumnya, kami menerapkan operator KECUALI pada dua tabel. Namun, operator KECUALI dapat digunakan untuk menyaring catatan dari satu tabel juga. Misalnya, jika Anda ingin memfilter semua catatan dari tabel Cars1 yang nilai dayanya lebih besar dari 3.000, Anda dapat menggunakan operator KECUALI sebagai berikut:

USE ShowRoom
SELECT id, name, company, power FROM Cars1 
Except
SELECT id, name, company, power from Cars1 WHERE power < 3000

Dalam skrip di atas, kueri di sisi kiri operator KECUALI mengambil semua catatan dari tabel Cars1. Kueri di sisi kanan operator KECUALI mengambil hanya catatan tersebut dari tabel Cars1 di mana nilai daya kurang dari 3.000. Operator KECUALI memfilter catatan dari kueri di sebelah kiri yang ada di hasil kueri di sebelah kanan. Oleh karena itu, semua catatan di tabel Cars1 di mana daya kurang dari 3.000 akan disaring dan catatan lainnya akan dikembalikan seperti yang ditunjukkan pada output di bawah ini:

TIDAK DI Operator

Operator NOT IN juga digunakan untuk memfilter baris. Mari temukan semua record dari tabel Cars1 yang juga ada di tabel Cars2 dan kembalikan record lainnya menggunakan operator NOT IN.

USE ShowRoom
SELECT id, name, company, power FROM Cars1 
WHERE id NOT IN (SELECT id from Cars2)

Hasil query di atas terlihat seperti ini:

Ini mirip dengan hasil yang diperoleh dengan menggunakan operator KECUALI.

Perbedaan antara Operator KECUALI dan NOT IN

Kita dapat melihat bahwa hasil yang diperoleh dengan menggunakan operator EXCEPT dan NOT IN adalah serupa. Namun, ada dua perbedaan utama antara Operator KECUALI dan NOT IN:

1- NOT IN Mengembalikan Data Duplikat sementara KECUALI Mengembalikan Catatan Berbeda saja

Operator KECUALI menghapus baris duplikat dari hasil dan hanya mengembalikan catatan DISTINCT. Di sisi lain, operator NOT IN akan mengembalikan record duplikat.
Mari kita lihat ini dengan bantuan sebuah contoh. Jalankan kueri berikut untuk menyisipkan rekaman duplikat di tabel Cars1.

INSERT INTO Cars1

VALUES
(1, 'Corrolla', 'Toyota', 1800)

Sekarang tabel Cars1 memiliki dua catatan duplikat. Anda dapat memverifikasi ini dengan menjalankan kueri berikut:

SELECT * FROM Cars1

Tabel Cars1 akan terlihat seperti ini:

Anda dapat melihat bahwa baris 1 dan 11 adalah duplikat satu sama lain.

Pertama-tama, gunakan operator KECUALI untuk memfilter semua record dari tabel Cars1 yang ada di tabel Cars2.

USE ShowRoom
SELECT id, name, company, power FROM Cars1
Except
SELECT id, name, company, power FROM Cars2

Hasilnya terlihat seperti ini:

Anda dapat melihat bahwa meskipun baris 1 dan 11 adalah duplikat di tabel Cars1 dan tidak ada di tabel Cars2, operator KECUALI tidak mengembalikan kedua baris ini. Itu hanya mengembalikan baris yang berbeda.

Sekarang mari kita gunakan operator NOT IN untuk tugas yang sama:

USE ShowRoom
SELECT id, name, company, power FROM Cars1 
WHERE id NOT IN (SELECT id from Cars2)

Output dari query di atas terlihat seperti ini:

Anda dapat melihat bahwa NOT IN mengembalikan duplikat baris yaitu baris 1 dan baris 6.

2- KECUALI membandingkan kolom sementara NOT IN membandingkan satu nilai

KECUALI operator membandingkan nilai dalam satu atau lebih dari satu kolom. Artinya jumlah kolom harus sama. Di sisi lain, operator NOT IN membandingkan nilai dalam satu kolom.

Misalnya, Anda tidak boleh memiliki jumlah kolom yang tidak sama untuk kueri di kiri dan kanan operator KECUALI seperti yang ditunjukkan pada contoh berikut:

USE ShowRoom
SELECT id, name, company, power FROM Cars1
Except
SELECT id, name,power FROM Cars2

Kueri di atas mengembalikan kesalahan berikut:

Untuk operator NOT IN, Anda tidak dapat memiliki lebih dari satu kolom di sub-kueri. Ini berarti bahwa kueri berikut akan mengembalikan kesalahan:

USE ShowRoom
SELECT id, name, company, power FROM Cars1 
WHERE id NOT IN (SELECT id, name from Cars2)

Pada script di atas, sub-query memiliki dua kolom yaitu id dan name. Oleh karena itu akan terjadi kesalahan:

Bacaan Lebih Lanjut:

  • Sekolah W3:Contoh IN dan NOT IN
  • TechontheNet:Operator KECUALI
  • YouTube:Operator KECUALI

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rethink Flask – Daftar Todo Sederhana Didukung oleh Flask dan RethinkDB

  2. Cara menghapus duplikat di SQL

  3. Dasar-dasar Ekspresi Tabel, Bagian 13 – Fungsi Bernilai Tabel Sebaris, Lanjutan

  4. Sekunder yang Dapat Dibaca dengan Anggaran

  5. Baris Sasaran, Bagian 4:Pola Anti Gabung Anti