Di SQL Server, Anda dapat menggunakan SOME
operator logika untuk membandingkan nilai skalar dengan kumpulan nilai kolom tunggal yang dikembalikan oleh subkueri.
Ini dapat digunakan dengan subkueri yang memiliki kumpulan hasil satu kolom.
SOME
operator setara dengan ANY
operator logika.
Contoh
Bayangkan kita memiliki dua tabel; Cats
dan Dogs
Kucing
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+
Anjing
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | | 3 | Wag | +---------+-----------+
Sekarang mari kita jalankan subquery menggunakan ANY
operator.
SELECT
CatId,
CatName
FROM Cats c
WHERE c.CatName = SOME (SELECT DogName FROM Dogs);
Hasil:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 2 | Fluffy | +---------+-----------+
SOME
vs ANY
Seperti yang disebutkan, SOME
setara dengan ANY
.
Jadi kami dapat mengubah kueri kami untuk menggunakan ANY
bukannya SOME
.
SELECT
CatId,
CatName
FROM Cats c
WHERE c.CatName = ANY (SELECT DogName FROM Dogs);
Hasil:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 2 | Fluffy | +---------+-----------+
SOME
vs IN
Kami akan mendapatkan hasil yang sama jika kami mengubah kueri sehingga menggunakan IN
operator alih-alih SOME
.
Ini dia menggunakan IN
operator.
SELECT
CatId,
CatName
FROM Cats c
WHERE c.CatName IN (SELECT DogName FROM Dogs);
Hasil:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 2 | Fluffy | +---------+-----------+
SOME
vs EXISTS
Kita bisa melakukan hal yang sama dengan EXISTS
operator.
Ini dia menggunakan EXISTS
operator.
SELECT
CatId,
CatName
FROM Cats c
WHERE EXISTS (SELECT DogId, DogName FROM Dogs d
WHERE c.CatName = d.DogName);
Hasil:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 2 | Fluffy | +---------+-----------+
Kesalahan 116?
Jika Anda mendapatkan kesalahan 116 saat menggunakan SOME
, itu mungkin karena Anda memilih beberapa kolom di subkueri Anda. SOME
operator hanya dapat digunakan dengan subkueri yang memiliki kumpulan hasil satu kolom.
Berikut adalah contoh bagaimana kami dapat menyebabkan kesalahan ini.
SELECT
CatId,
CatName
FROM Cats c
WHERE c.CatName = SOME (SELECT * FROM Dogs);
Hasil:
Msg 116, Level 16, State 1, Line 5 Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
Kami akan mendapatkan kesalahan yang sama dengan IN
. Jika Anda harus mengembalikan beberapa kolom dalam subkueri Anda, gunakan EXISTS
.