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

Giải thích tất cả toán tử SQL Server

Trong SQL Server, ALL toán tử có thể được sử dụng với một truy vấn con để 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 truy vấn con.

Cũng đúng khi SELECT mệnh đề và UNION cả hai toán tử đều chấp nhận ALL đối số, mặc dù cách sử dụng này có mục đích khác (cho phép trùng lặp trong tập kết quả).

Dưới đây là các ví dụ về việc sử dụng ALL toán tử với một truy vấn con.

Ví dụ

Giả sử chúng ta có hai bảng; CatsDogs

Cats

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

Dogs

+---------+-----------+
| 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 ALL nhà điều hành.

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

Kết quả:

(0 rows affected)

Trong trường hợp này, không có hàng nào được trả lại. Điều này là do ALL yêu cầu biểu thức vô hướng để so sánh tích cực với mọi giá trị được trả về bởi truy vấn con.

Trong trường hợp này, truy vấn con quá rộng đến mức tất cả các hàng từ Dogs bảng đã được trả lại. Điều này yêu cầu mỗi con chó phải có ít nhất một con mèo tương ứng có cùng tên.

Hãy thay đổi truy vấn con một chút.

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

Kết quả:

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

Trong trường hợp này, tôi nhận được kết quả dương tính, vì tất cả các hàng được trả về bởi truy vấn con đều có một hàng tương ứng trong Cats bảng (mặc dù chỉ có một hàng).

Trả lại Ngược lại

Chúng tôi có thể sử dụng bất kỳ toán tử so sánh nào với ALL . Vì vậy, chúng tôi có thể sửa đổi các ví dụ trước đó để trả về kết quả ngược lại, đơn giản bằng cách thay đổi toán tử bằng (=) thành một toán tử không bằng (hoặc <> hoặc không theo tiêu chuẩn ISO != ).

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

Kết quả:

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

Vì vậy, thay vì trả về tất cả các hàng có một hàng tương ứng trong truy vấn con, chúng tôi trả về tất cả các hàng không có một hàng tương ứng.

Và chúng ta có thể làm điều tương tự với ví dụ còn lại.

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

Kết quả:

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

Lỗi 116?

Nếu bạn gặp lỗi 116 khi sử dụng ALL , có thể là do bạn đang chọn nhiều cột trong truy vấn con của mình. ALL toán tử chỉ 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.

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 = ALL (SELECT DogId, DogName FROM Dogs);

Tôi chỉ cần thêm một cột vào truy vấn con.

Đó là một lỗi phổ biến khi sử dụng toán tử ký tự đại diện để chọn tất cả các cột trong truy vấn con.

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

Dù bằng cách nào, kết quả là như nhau:

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. 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

  2. Khắc phục Msg 8116 “Ngày kiểu dữ liệu đối số không hợp lệ cho đối số 1 của hàm chuỗi con” trong SQL Server

  3. Đã xảy ra lỗi liên quan đến mạng hoặc lỗi cụ thể đối với trường hợp cụ thể khi thiết lập kết nối với SQL Server

  4. Chọn một công cụ giám sát máy chủ SQL để phù hợp với nhu cầu của bạn

  5. Thủ thuật điều chỉnh hiệu suất yêu thích