Điều kiện EXISTS trong SQL Server
Exists trong SQL Server là gì? Cách dùng NOT Exists trong SQL Server như thế nào? Hãy cùng Quantrimang.com tìm hiểu nhé!
SQL Server là kiến thức mà mọi lập trình viên đều cần biết. Khi sử dụng SQL Server, bạn phải làm quen với rất nhiều hàm hay mệnh đề, Exists là một trong số đó.
Trong SQL Server (Transact-SQL) điều kiện EXISTS được dùng để kết hợp với truy vấn nội bộ (subquery). Điều kiện được đáp ứng nếu truy vấn nội bộ trả về ít nhất 1 hàng. Điều kiện này có thể dùng trong lệnh SELECT, INSERT, UPDATE hoặc DELETE.
Cú pháp mệnh đề EXISTS trong SQL Server
WHERE EXISTS ( subquery);
Tên biến hoặc giá trị biến
subquery
Subquery - truy vấn nội bộ là một lệnh SELECT. Nếu truy vấn này trả về ít nhất 1 bản ghi trong bộ kết quả thì mệnh đề EXISTS được đánh giá là đúng và điều kiện EXISTS được đáp ứng. Nếu truy vấn nội bộ không trả về bản ghi nào, mệnh đề EXISTS được đánh giá là sai và điều kiện EXISTS không được đáp ứng.
Lưu ý
Sử dụng điều kiện EXISTS không hiệu quả do truy vấn nội bộ RE-RUN (chạy lại) trên mỗi hàng trong bảng ở truy vấn ngoài. Có nhiều cách hiệu quả hơn mà không cần dùng điều kiện EXISTS.
Ví dụ - với lệnh SELECT
Lệnh SELECT dùng với điều kiện EXISTS như dưới đây.
SELECT *
FROM nhanvien
WHERE EXISTS (SELECT *
FROM danhba
WHERE nhanvien.ho = danhba.ho
AND nhanvien.t
en = danhba.ten);
Ví dụ này sẽ trả về tất cả các bản ghi từ bảng nhanvien khi có ít nhất 1 bảng ghi trong bảng danhba có họ và tên khớp với họ và tên trong bảng nhanvien.
Ví dụ - lệnh SELECT dùng NOT EXISTS
Điều kiện EXISTS có thể kết hợp với toán tử NOT.
SELECT *
FROM nhanvien
WHERE NOT EXISTS (SELECT *
FROM danhba
WHERE nhanvien.ho = danhba.ho
AND nhanvien
.ten = danhba.ten);
Kết quả trả về là tất cả các bản ghi trong bảng nhanvien nếu không có bản ghi họ và tên nào trong bảng danhba khớp với họ và tên trong bảng nhanvien.
Ví dụ - lệnh INSERT
Đây là ví dụ dùng lệnh INSERT với điều kiện EXISTS
INSERT INTOdanhba
(danhba_id, danhba_ten)
SELECT nhacung_id, nhacung_ten
FROM nhacung
WHERE EXISTS (SELECT *
FROM donhang
WHERE nhacung.n
hacung_id = donhang.nhacung_id);
Ví dụ - lệnh UPDATE
Dưới đây là ví dụ lệnh UPDATE dùng điều kiện EXISTS.
UPDATE nhacung
SET nhacung_ten = (SELECT khachhang.ten
FROM khachhang
WHERE khachhang.khachhang_id = nhacung.nhacung_id)
WHERE EXISTS (SELECT khachhang.ten
FROM khachhang
WHERE khachhan
g.khachhang_id = nhacung.nhacung_id);
Ví dụ - lệnh DELETE
Lệnh DELETE cũng có thể dùng với điều kiện EXISTS như dưới đây.
DELETE FROM danhba
WHERE EXITS (SELECT *
FROM nhanvien
WHERE nhanvi
en.ho = danhba.ho );
Cách dùng NOT với điều kiện EXIST trong SQL Server
Lệnh NOT được dùng để trích xuất những bản ghi điều kiện WHERE được cung cấp bởi người dùng là NOT TRUE hoặc FALSE.
Ví dụ này lấy STUDENT_NAME từ bảng STUDENT, cho điều kiện được đưa ra. Ví dụ: department.student_id=student.student_id là FALSE.
Kết quả:
Nếu thấy cả hai bảng đều rõ ràng, bạn sẽ biết cả hai tên được đưa ra, nằm trong STUDENT_ID không được nhắc tới ở bảng DEPARTMENT, vì thế, nó là kết quả.
Nếu không dùng lệnh NOT ở đây, nó sẽ cho kết quả là Neena và Johny.
Lưu ý: Dù STUDENT_ID cho STUDENT_NAME Kashish hiện nằm trong bảng DEPARTMENT. Nó chưa được hiển thị trong kết quả ở đây.
EXISTS vs. JOIN
Toán tử EXISTS SQL Server trả về TRUE hoặc FALSE, còn mệnh đề JOIN trả về các hàng từ bảng khác.
Bạn dùng toán tử EXISTS để kiểm tra xem liệu một truy vấn phụ có trả về bất kỳ hàng và chu kỳ ngắn nào đó ngay khi nó chạy. Mặt khác, bạn dùng JOIN để tập kết quả bằng cách kết hợp nó với các cột từ bảng liên quan.
Thực tế, bạn dùng EXISTS khi cần kiểm tra sự tồn tại của các hàng từ bảng liên quan mà không phải trả về dữ liệu từ chúng.
Ví dụ về EXISTS và IN
Lệnh sau dùng toán tử IN để tìm các đơn hàng của khách từ San Jose:
SELECT
*
FROM
sales.orders
WHERE
customer_id IN (
SELECT
customer_id
FROM
sales.customers
WHERE
city = 'San Jose'
)
ORDER BY
customer_id,
order_date;
Lệnh sau dùng toán tử EXISTS, trả về kết quả tương tự:
SELECT
*
FROM
sales.orders o
WHERE
EXISTS (
SELECT
customer_id
FROM
sales.customers c
WHERE
o.customer_id = c.customer_id
AND city = 'San Jose'
)
ORDER BY
o.customer_id,
order_date;
Những câu hỏi thường gặp về SQL Exists
NOT EXISTS SQL được dùng ở đâu?
NOT EXISTS SQL nghĩa là truy vấn phụ không trả về kết quả nào. Nó được dùng để giới hạn số hàng do lệnh SELECT trả về. Trong server này, nó kiểm tra truy vấn phụ cho sự tồn tại của hàng. Nếu có, nó trả về đáp án true, nếu không nó cho kết quả false.
Làm thế nào tránh NOT EXISTS trong SQL?
Để khắc phục lỗi NOT EXISTS trong SQL Server, đảm bảo bạn đang tìm kiếm trên trang được lập chỉ mục. Hãy chắc chắn rằng không có thao tác dữ liệu trong những cột cần thiết. Giờ thay No EXISTS bằng một hàm left outer join, nó sẽ hoạt động tốt hơn ở những tập dữ liệu lớn.
Làm thế nào kiểm tra xem liệu có bản ghi NOT EXISTS trong SQL?
Có nhiều cách khác nhau để kiểm tra xem liệu bản ghi NOT EXIST có trong SQL hay không. Sử dụng lệnh IF trong EXISTS là một ví dụ điển hình.
NOT trong toán tử SQL được sử dụng khi người dùng đang một truy xuất một cột, không có entry trong bảng. Bảng khách hàng chứa bản ghi tất cả danh sách khác và giao dịch liên quan.
Trên đây là những điều cơ bản bạn cần biết về EXISTS trong SQL Server. Đây là một lệnh điều kiện hữu ích mà bạn nhất định nên biết khi tìm hiểu về SQL Server. Hi vọng những kiến thức cơ bản kể trên sẽ giúp bạn lập trình cùng SQL Server hiệu quả hơn.
Bài trước: Lệnh TRUNCATE TABLE trong SQL Server
Bài sau: Mệnh đề GROUP BY trong SQL Server
Bạn nên đọc
Cũ vẫn chất
-
Game ‘Khủng long mất mạng’ trên Google Chrome được 3D hóa tuyệt đẹp, mời trải nghiệm
Hôm qua -
Tổng hợp code Đại Chiến Tam Quốc mới nhất
Hôm qua -
Last Name, First Name là gì? Cách điền chúng chính xác nhất
Hôm qua -
Cách dùng hàm IMPORTRANGE trong Google Sheets
Hôm qua -
Hướng dẫn sửa lỗi Access Denied trong quá trình truy cập file hoặc thư mục trên Windows
Hôm qua -
Code Kiếm Vương 1 - ADNX Mobile mới nhất
Hôm qua -
Code Mobile Legends mới nhất 12/2024
Hôm qua -
Cách đổi màu phông nền trong Photoshop
Hôm qua -
Code Tân Vương 3Q mới nhất và cách nhập code
Hôm qua -
Cách gán địa chỉ IP tĩnh trong Windows 11, 10, 8, 7, XP hoặc Vista
Hôm qua