SQL PROGRAMMING

Câu lệnh EXISTS trong SQL

Câu lệnh EXISTS trong SQL

Giới thiệu

Trong chương này, chúng ta đã học cách sử dụng câu lệnh SQL Select Exists với nhiều tùy chọn khác nhau.

Câu lệnh SQL Exists

SQL hoặc ngôn ngữ truy vấn trình tự là một cơ chế mà chúng tôi sử dụng để tương tác với cơ sở dữ liệu.
Câu lệnh SQL Exists chỉ định một truy vấn phụ để kiểm tra sự tồn tại của (các) hàng hay nói cách khác, câu lệnh SQL Exists được sử dụng để kiểm tra sự tồn tại của bất kỳ bản ghi nào trong truy vấn phụ. 
Câu lệnh SQL Exists trả về true nếu truy vấn con trả về một hoặc nhiều bản ghi.
Câu lệnh SQL Exists là một câu lệnh Select bị hạn chế Từ khóa The “into” không được phép sử dụng câu lệnh SQL Exists. 
Cú pháp 
  1. SELECT column_name(s)FROM table_nameWHERE EXISTS(SELECT column_name FROM table_name WHERE condition);  
Ghi chú 
  • Một cơ sở dữ liệu mẫu đã được đính kèm để bạn tham khảo. Bạn có thể tải xuống hoặc có thể tạo cơ sở dữ liệu của riêng mình.
  • Tôi đang sử dụng Microsoft SQL Server 2019, bạn có thể sử dụng bất kỳ nhà cung cấp SQL nào khác.  

Làm cách nào để sử dụng câu lệnh Null trong truy vấn phụ để vẫn trả về tập kết quả?

Ví dụ sau đây trả về một tập hợp kết quả với Null được chỉ định trong truy vấn con và được đánh giá là true bằng cách sử dụng câu lệnh Exists. Bạn có thể thấy rằng mặc dù chúng tôi đang sử dụng Null nhưng chúng tôi vẫn nhận được kết quả. 
Cú pháp 
  1. –Uses sample   
  2. SELECT OrderID,OrderName, orderAddress From OrderDetail
  3. Where EXISTS (SELECT NULL)
  4. ORDER BY OrderName ASC
Đầu ra
Đầu ra của lệnh trên sẽ là dữ liệu từ các tên cột OrderID, OrderName, OrderAddress, khi và chỉ khi dữ liệu có trong tất cả các cột được đề cập, theo thứ tự tăng dần và OrderName.

Làm cách nào để so sánh các truy vấn bằng cách sử dụng Exists và In một câu lệnh? 

Ví dụ sau đây so sánh hai truy vấn tương đương về mặt ngữ nghĩa, nghĩa là In mặt lập trình, chúng sẽ cho kết quả đầu ra giống nhau. Truy vấn đầu tiên sử dụng câu lệnh SQL Exists và truy vấn thứ hai sử dụng câu lệnh SQL In.

Cú pháp 

  1. — Uses sample          
  2. SELECT a.OrderName, a.orderAddress,a.OrderDate
  3. FROM OrderDetails   AS a
  4. WHERE EXISTS
  5. (SELECT *
  6.     FROM OrderDetails AS b
  7.     WHERE a.OrderId = b.OrderId
  8.     AND a.OrderName = ‘Mango’);
  9. GO
Đầu ra
Đầu ra của lệnh trên sẽ là dữ liệu từ OrderName, OrderAddress, OrderDate nếu và chỉ OrderName là ‘Mango’ và OrderId giống nhau.

Sử dụng Comparing các truy vấn bằng cách sử dụng câu lệnh Exists và = Any   

Ví dụ sau đây cho thấy hai truy vấn để tìm cửa hàng có tên trùng với tên của nhà cung cấp. Truy vấn đầu tiên sử dụng Exists và truy vấn thứ hai sử dụng câu lệnh “=Any”.
Bất kỳ SQL toán tử nào trả về nếu bất kỳ giá trị truy vấn con nào đáp ứng điều kiện. 
Cú pháp 
  1. — Uses sample         
  2. SELECT DISTINCT s.OrderName
  3. FROM OrderDetails  AS s
  4. WHERE EXISTS
  5. (SELECT *
  6.     FROM EmployeeDetail  AS v
  7.     WHERE s.OrderName = v.EmpName) ;
  8. GO
Truy vấn trên sẽ phân biệt OrderName từ bảng OrderDetails và chọn tất cả dữ liệu trong bảng EmployeeDetail và trong đó Tên cột là orderName và EmpName trong câu lệnh này, nếu truy vấn phụ trả về bất kỳ thứ gì, truy vấn phụ sẽ trả về dữ liệu từ EmployeeDetails nếu OrderName giống nhau EmpName.  
Truy vấn sau đây sử dụng = “Any” 
Cú pháp
  1. — Uses sample         
  2. SELECT DISTINCT s.EmpName
  3. FROM EmployeeDetail AS s
  4. WHERE s.EmpName = ANY
  5. (SELECT v.orderAddress
  6.     FROM OrderDetails AS v ) ;
  7. GO    
Truy vấn sau đây sẽ trả về các giá trị riêng biệt từ EmpName và từ bảng EmployeeDetail nếu truy vấn con trả về dữ liệu. Truy vấn con sẽ trả về dữ liệu nếu bảng OrderDetails có một số giá trị không phải là null. 

Làm cách nào để So sánh các truy vấn bằng cách sử dụng Exits và In một câu lệnh? 

Ví dụ sau hiển thị các truy vấn để tìm nhân viên của các phòng ban bắt đầu bằng P. 
Cú pháp 
  1. — Uses sample        
  2. SELECT p.OrderName, p.orderAddress
  3. FROM OrderDetails AS p
  4. JOIN EmployeeDetail AS e
  5.    ON e.EmpId = p.OrderId
  6. WHERE EXISTS
  7. (SELECT *
  8.     FROM OrderDetails AS d
  9.     JOIN Employee_Details AS edh
  10.        ON d.OrderId = edh.OrderDate
  11.     WHERE e.EmpId = edh.OrderName
  12.     AND d.OrderName LIKE ‘T%’);
  13. GO           
Truy vấn sau đây sẽ trả về OrderAddress từ bảng OrderDetails và chúng tôi đang sử dụng Join để giảm bớt nhiệm vụ lấy dữ liệu giống hệt nhau. Bạn có thể đọc về tham gia trên Csharp Corner.
Truy vấn con sẽ trả về dữ liệu nếu OrderName bắt đầu bằng “T” và EmpId và OrderName giống nhau. 
Truy vấn sau sử dụng In.
Cú pháp
  1. — Uses sample        
  2. SELECT p.OrderName, p.orderAddress
  3. FROM OrderDetails AS p
  4. JOIN EmployeeDetail AS e
  5.    ON e.EmpId = p.OrderId
  6. JOIN EmployeeDetail  AS edh
  7.    ON e.EmpId = edh.EmpId
  8. WHERE edh.EmpId IN
  9. (SELECT OrderId, OrderName, orderAddress
  10.    FROM OrderDetails
  11.    WHERE OrderName  LIKE ‘P%’);  GO         
Truy vấn sau đây sẽ trả về orderName, orderAddress từ bảng orderDetails và chúng tôi đang sử dụng Join để thực hiện nhiệm vụ lấy dữ liệu giống hệt nhau. Truy vấn con sẽ trả về bảng OrderName, OrderAddress nếu OrderName bắt đầu bằng “P” 

Làm cách nào để sử dụng câu lệnh Not Exists?

Câu lệnh Not Exists hoạt động ngược lại với Exists. Mệnh đề Where trong Not Exists được thỏa mãn nếu truy vấn con không trả về hàng nào.
Ví dụ sau tìm thấy EmployeeDetail không thuộc các phòng ban có tên bắt đầu bằng P.
 
Cú pháp 
  1. — Uses sample        
  2. SELECT p.OrderName, p.orderAddress
  3. FROM OrderDetails AS p
  4. JOIN EmployeeDetail AS e
  5.    ON e.EmpId = p.OrderId
  6. WHERE NOT EXISTS
  7. (SELECT *
  8.    FROM OrderDetails  AS d
  9.    JOIN EmployeeDetail   AS edh
  10.       ON d.OrderId = edh.EmpId
  11.    WHERE e.EmpId = edh.EmpId
  12.    AND d.OrderName LIKE ‘P%’)
  13. ORDER BY EmpName,OrderName          
Truy vấn trên sẽ trả về orderName, orderAddress từ bảng orderDetails và chúng tôi đang sử dụng Join để thực hiện nhiệm vụ lấy dữ liệu giống hệt nhau. Truy vấn con sẽ trả về bảng OrderName, OrderAddress nếu OrderName bắt đầu bằng P. 
Ví dụ sau tìm thấy các hàng trong bảng OrderDetails trong đó OrderName và EmpId không khớp với bất kỳ mục nào trong bảng EmployeeDetail. 
 
Cú pháp
  1. — Uses sample       
  2. SELECT a.OrderName, a.orderAddress
  3. FROM OrderDetails  AS a
  4. WHERE NOT EXISTS
  5. (SELECT *
  6.     FROM EmployeeDetail  AS b
  7.     WHERE (a.OrderName = b.EmpId) AND (a.orderAddress = b.EmpAddress));    
Truy vấn trên sẽ trả về OrderName, OrderAddress từ OrderDetails nếu truy vấn con không dẫn đến kết quả nào.
Ví dụ trên xác định xem có bất kỳ hàng nào trong bảng OrderName, OrderAddress có thể khớp với các hàng trong bảng Chi tiết nhân viên hay không.

Làm cách nào để sử dụng câu lệnh Exists? 

Ví dụ sau xác định xem có bất kỳ hàng nào trong bảng OrderName, OrderAddress có thể khớp với các hàng trong bảng OrderDetails hay không.
Truy vấn sẽ chỉ trả về các hàng khi cả hai giá trị OrderName và EmpId trong hai bảng khớp nhau. 
Cú pháp 
  1. — Uses sample       
  2. SELECT a.OrderName, a.orderAddress
  3. FROM OrderDetails  AS a
  4. WHERE EXISTS
  5. (SELECT *
  6.     FROM EmployeeDetail  AS b
  7.     WHERE (a.OrderName = b.EmpId) AND (a.orderAddress = b.EmpAddress));       
Trong đoạn mã trên, chúng ta sẽ lấy các hàng từ bảng EmployeeDetail, khi và chỉ khi OrderName bằng EmpIF và orderAddress giống với EmpAddress.

Bản tóm tắt 

Trong chương tiếp theo, chúng ta sẽ học cách sử dụng câu lệnh SQL INDEX với nhiều tùy chọn khác nhau.

 

(Source: https://www.c-sharpcorner.com/)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *