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

SQL Server SEMUA Operator Dijelaskan

Di SQL Server, ALL operator dapat digunakan dengan subkueri untuk membandingkan nilai skalar dengan kumpulan nilai kolom tunggal yang dikembalikan oleh subkueri.

Benar juga bahwa SELECT klausa dan UNION operator keduanya menerima ALL argumen, meskipun penggunaan ini memiliki tujuan yang berbeda (memungkinkan duplikat dalam kumpulan hasil).

Di bawah ini adalah contoh penggunaan ALL operator dengan subquery.

Contoh

Asumsikan kita memiliki dua tabel; Cats dan Dogs

Cats

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 1       | Meow      |
| 2       | Fluffy    |
| 3       | Scratch   |
+---------+-----------+

Dogs

+---------+-----------+
| DogId   | DogName   |
|---------+-----------|
| 1       | Fetch     |
| 2       | Fluffy    |
| 3       | Wag       |
+---------+-----------+

Sekarang mari kita jalankan subquery menggunakan ALL operator.

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE c.CatName = ALL (SELECT DogName FROM Dogs);

Hasil:

(0 rows affected)

Dalam hal ini, tidak ada baris yang dikembalikan. Ini karena ALL membutuhkan ekspresi skalar untuk membandingkan secara positif dengan setiap nilai yang dikembalikan oleh subquery.

Dalam hal ini, subkueri sangat luas sehingga semua baris dari Dogs meja dikembalikan. Ini akan mengharuskan setiap anjing memiliki setidaknya satu kucing yang sesuai dengan nama yang sama.

Mari kita ubah sedikit subquery.

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE c.CatName = ALL (
    SELECT DogName FROM Dogs 
    WHERE DogId = 2
    );

Hasil:

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 2       | Fluffy    |
+---------+-----------+

Dalam hal ini saya mendapatkan hasil positif, karena semua baris yang dikembalikan oleh subquery memiliki baris yang sesuai di Cats tabel (walaupun hanya satu baris).

Kembalikan yang Berlawanan

Kami dapat menggunakan operator perbandingan apa pun dengan ALL . Jadi kita bisa memodifikasi contoh sebelumnya untuk mengembalikan hasil sebaliknya, cukup dengan mengubah operator equals (=) menjadi tidak sama dengan operator (baik <> atau != non standar non ISO ).

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE c.CatName <> ALL (SELECT DogName FROM Dogs);

Hasil:

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 1       | Meow      |
| 3       | Scratch   |
+---------+-----------+

Jadi, alih-alih mengembalikan semua baris yang memiliki baris yang sesuai di subkueri, kami mengembalikan semua baris yang tidak memiliki baris yang sesuai.

Dan kita dapat melakukan hal yang sama dengan contoh lainnya.

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE c.CatName <> ALL (
    SELECT DogName FROM Dogs 
    WHERE DogId = 2
    );

Hasil:

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 1       | Meow      |
| 3       | Scratch   |
+---------+-----------+

Kesalahan 116?

Jika Anda mendapatkan kesalahan 116 saat menggunakan ALL , itu mungkin karena Anda memilih beberapa kolom di subkueri Anda. ALL 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 = ALL (SELECT DogId, DogName FROM Dogs);

Saya hanya menambahkan kolom ke subquery.

Ini adalah kesalahan umum saat menggunakan operator wildcard untuk memilih semua kolom di subkueri.

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE c.CatName = ALL (SELECT * FROM Dogs);

Bagaimanapun, hasilnya sama:

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengumpulan Data Otomatis tentang Tugas yang Selesai di MS SQL Server

  2. Cara membuat banyak satu ke satu

  3. Apa tujuan menggunakan OPTION(MAXDOP 1) di SQL Server?

  4. Menyiapkan database SQL Server lokal

  5. Gunakan COLUMNPROPERTY() untuk Mengembalikan Kolom atau Informasi Parameter di SQL Server