Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Giải thích một số toán tử SQL Server

Trong SQL Server, bạn có thể sử dụng SOME toán tử logic để so sánh một giá trị vô hướng với một tập hợp giá trị cột đơn được trả về bởi một truy vấn con.

Nó có thể được sử dụng với các truy vấn con có tập hợp kết quả là một cột.

SOME toán tử tương đương với ANY toán tử logic.

Ví dụ

Hãy tưởng tượng chúng ta có hai bảng; CatsDogs

Mèo

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

Chó

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

Bây giờ chúng ta hãy chạy một truy vấn con bằng ANY nhà điều hành.

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

Kết quả:

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

SOME so với ANY

Như đã đề cập, SOME tương đương với ANY .

Vì vậy, chúng tôi có thể thay đổi truy vấn của mình để sử dụng ANY thay vì SOME .

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

Kết quả:

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

SOME so với IN

Chúng tôi sẽ nhận được kết quả tương tự nếu chúng tôi thay đổi truy vấn xung quanh để nó sử dụng IN toán tử thay vì SOME .

Ở đây nó đang sử dụng IN nhà điều hành.

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

Kết quả:

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

SOME so với EXISTS

Chúng tôi có thể làm điều tương tự với EXISTS nhà điều hành.

Ở đây nó đang sử dụng EXISTS nhà điều hành.

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

Kết quả:

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

Lỗi 116?

Nếu bạn gặp lỗi 116 khi sử dụng SOME , có thể là do bạn đang chọn nhiều cột trong truy vấn con của mình. SOME toán tử chỉ có thể được sử dụng với các truy vấn con có tập kết quả là một cột.

Dưới đây là một ví dụ về cách chúng tôi có thể gây ra lỗi này.

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

Kết quả:

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.

Chúng tôi sẽ gặp lỗi tương tự với IN . Nếu bạn phải trả về nhiều cột trong truy vấn con của mình, hãy sử dụng 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. Truy vấn mẫu máy chủ được liên kết của SQL Server

  2. Len () so với datalength () trong SQL Server 2005

  3. Câu lệnh ALTER TABLE xung đột với ràng buộc FOREIGN KEY trong SQL Server - Hướng dẫn sử dụng SQL Sever / TSQL Phần 69

  4. Khi nào tôi nên sử dụng biến bảng so với bảng tạm thời trong máy chủ sql?

  5. Làm cách nào để xác định trong SQL Server nếu một phạm vi dateTime chồng lên một phạm vi khác