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

SQL Server BEBERAPA Operator Dijelaskan

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 .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Anda membuat cadangan dan memulihkan database sebagai salinan di server yang sama?

  2. Mengapa EF menghasilkan kueri SQL dengan pemeriksaan nol yang tidak perlu?

  3. Bagaimana cara menambahkan string dengan nilai kenaikan otomatis di SQL Server?

  4. Berurusan dengan NULL di SQL Server

  5. Menggunakan parameter output prosedur tersimpan di C#