SQL Server: EXISTS Và NOT EXISTS | V1Study
Có thể bạn quan tâm
Các ví dụ
Các ví dụ dưới đây sẽ sử dụng cơ sở dữ liệu mẫu AdventureWorks.
A. Sử dụng NULL trong subquery nhưng vẫn trả về một tập kết quả
Ví dụ sau đây trả về một tập kết quả trong đó subquery chứa NULL nhưng EXISTS vẫn trả về TRUE.
USE AdventureWorks
SELECT DepartmentID, Name FROM HumanResources.Department WHERE EXISTS (SELECT NULL) ORDER BY Name ASC;
B. So sánh các truy vấn bằng cách sử dụng EXISTS và IN
Ví dụ sau đây so sánh hai truy vấn về mặt ngữ nghĩa là tương đương. Truy vấn đầu tiên sử dụng EXISTS và truy vấn thứ hai sử dụng IN.
USE AdventureWorks
SELECT a.FirstName, a.LastName FROM Person.Person AS a WHERE EXISTS (SELECT * FROM HumanResources.Employee AS b WHERE a.BusinessEntityID = b.BusinessEntityID AND a.LastName = 'Johnson'); GO
Truy vấn sau đây sử dụng IN.
USE AdventureWorks
SELECT a.FirstName, a.LastName FROM Person.Person AS a WHERE a.LastName IN (SELECT a.LastName FROM HumanResources.Employee AS b WHERE a.BusinessEntityID = b.BusinessEntityID AND a.LastName = 'Johnson'); GO
Dưới đây là tập kết quả mà cả hai câu truy vấn trên đều đưa ra như nhau.
FirstName LastName
-------------------------------------------------- ----------
Barry Johnson
David Johnson
Willis Johnson
(3 row(s) affected)
C. So sánh các truy vấn bằng cách sử dụng EXISTS và = ANY
Ví dụ sau đây thể hiện hai truy vấn đều nhằm mục đích tìm cửa hàng có tên là tên giống 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 = ANY.
USE AdventureWorks
SELECT DISTINCT s.Name FROM Sales.Store AS s WHERE EXISTS (SELECT * FROM Purchasing.Vendor AS v WHERE s.Name = v.Name) ; GO
Truy vấn sau đây sử dụng = ANY.
USE AdventureWorks
SELECT DISTINCT s.Name FROM Sales.Store AS s WHERE s.Name = ANY (SELECT v.Name FROM Purchasing.Vendor AS v ) ; GO
D. So sánh các truy vấn bằng cách sử dụng EXISTS và IN
Ví dụ sau đây thể hiện các truy vấn tìm nhân viên của các phòng ban bắt đầu bằng 'P'.
USE AdventureWorks
SELECT p.FirstName, p.LastName, e.JobTitle FROM Person.Person AS p JOIN HumanResources.Employee AS e ON e.BusinessEntityID = p.BusinessEntityID WHERE EXISTS (SELECT * FROM HumanResources.Department AS d JOIN HumanResources.EmployeeDepartmentHistory AS edh ON d.DepartmentID = edh.DepartmentID WHERE e.BusinessEntityID = edh.BusinessEntityID AND d.Name LIKE 'P%'); GO
Truy vấn sau đây sử dụng IN.
USE AdventureWorks
SELECT p.FirstName, p.LastName, e.JobTitle FROM Person.Person AS p JOIN HumanResources.Employee AS e ON e.BusinessEntityID = p.BusinessEntityID JOIN HumanResources.EmployeeDepartmentHistory AS edh ON e.BusinessEntityID = edh.BusinessEntityID WHERE edh.DepartmentID IN (SELECT DepartmentID FROM HumanResources.Department WHERE Name LIKE 'P%'); GO
NOT EXISTS
NOT EXISTS ngược với EXISTS. Mệnh đề WHERE trong NOT EXISTS được thỏa mãn nếu subquery không trả về bất kỳ bản ghi nào. Ví dụ sau đây tìm những nhân viên không phải là người của phòng ban có tên bắt đầu bằng 'P'.
USE AdventureWorks
SELECT p.FirstName, p.LastName, e.JobTitle FROM Person.Person AS p JOIN HumanResources.Employee AS e ON e.BusinessEntityID = p.BusinessEntityID WHERE NOT EXISTS (SELECT * FROM HumanResources.Department AS d JOIN HumanResources.EmployeeDepartmentHistory AS edh ON d.DepartmentID = edh.DepartmentID WHERE e.BusinessEntityID = edh.BusinessEntityID AND d.Name LIKE 'P%') ORDER BY LastName, FirstName GO
Dưới đây là tập hợp kết quả:
FirstName LastName Title
------------------------------ ------------------------------ ------------
Syed Abbas Pacific Sales Manager
Hazem Abolrous Quality Assurance Manager
Humberto Acevedo Application Specialist
Pilar Ackerman Shipping & Receiving Superviso
François Ajenstat Database Administrator
Amy Alberts European Sales Manager
Sean Alexander Quality Assurance Technician
Pamela Ansman-Wolfe Sales Representative
Zainal Arifin Document Control Manager
David Barber Assistant to CFO
Paula Barreto de Mattos Human Resources Manager
Shai Bassli Facilities Manager
Wanida Benshoof Marketing Assistant
Karen Berg Application Specialist
Karen Berge Document Control Assistant
Andreas Berglund Quality Assurance Technician
Matthias Berndt Shipping & Receiving Clerk
Jo Berry Janitor
Jimmy Bischoff Stocker
Michael Blythe Sales Representative
David Bradley Marketing Manager
Kevin Brown Marketing Assistant
David Campbell Sales Representative
Jason Carlson Information Services Manager
Fernando Caro Sales Representative
Sean Chai Document Control Assistant
Sootha Charncherngkha Quality Assurance Technician
Hao Chen HR Administrative Assistant
Kevin Chrisulis Network Administrator
Pat Coleman Janitor
Stephanie Conroy Network Manager
Debra Core Application Specialist
Ovidiu Crãcium Sr. Tool Designer
Grant Culbertson HR Administrative Assistant
Mary Dempsey Marketing Assistant
Thierry D'Hers Tool Designer
Terri Duffy VP Engineering
Susan Eaton Stocker
Terry Eminhizer Marketing Specialist
Gail Erickson Design Engineer
Janice Galvin Tool Designer
Mary Gibson Marketing Specialist
Jossef Goldberg Design Engineer
Sariya Harnpadoungsataya Marketing Specialist
Mark Harrington Quality Assurance Technician
Magnus Hedlund Facilities Assistant
Shu Ito Sales Representative
Stephen Jiang North American Sales Manager
Willis Johnson Recruiter
Brannon Jones Finance Manager
Tengiz Kharatishvili Control Specialist
Christian Kleinerman Maintenance Supervisor
Vamsi Kuppa Shipping & Receiving Clerk
David Liu Accounts Manager
Vidur Luthra Recruiter
Stuart Macrae Janitor
Diane Margheim Research & Development Enginee
Mindy Martin Benefits Specialist
Gigi Matthew Research & Development Enginee
Tete Mensa-Annan Sales Representative
Ramesh Meyyappan Application Specialist
Dylan Miller Research & Development Manager
Linda Mitchell Sales Representative
Barbara Moreland Accountant
Laura Norman Chief Financial Officer
Chris Norred Control Specialist
Jae Pak Sales Representative
Wanda Parks Janitor
Deborah Poe Accounts Receivable Specialist
Kim Ralls Stocker
Tsvi Reiter Sales Representative
Sharon Salavaria Design Engineer
Ken Sanchez Chief Executive Officer
José Saraiva Sales Representative
Mike Seamans Accountant
Ashvini Sharma Network Administrator
Janet Sheperdigian Accounts Payable Specialist
Candy Spoon Accounts Receivable Specialist
Michael Sullivan Sr. Design Engineer
Dragan Tomic Accounts Payable Specialist
Lynn Tsoflias Sales Representative
Rachel Valdez Sales Representative
Garrett Vargar Sales Representative
Ranjit Varkey Chudukatil Sales Representative
Bryan Walton Accounts Receivable Specialist
Jian Shuo Wang Engineering Manager
Brian Welcker VP Sales
Jill Williams Marketing Specialist
Dan Wilson Database Administrator
John Wood Marketing Specialist
Peng Wu Quality Assurance Supervisor
(91 row(s) affected)
Từ khóa » Toán Tử Exists Trong Sql
-
Điều Kiện EXISTS Trong SQL Server
-
Toán Tử EXISTS Trong SQL Server
-
Toán Tử EXISTS Trong SQL - BAC
-
Toán Tử EXISTS Trong SQL | Lập Trình Từ Đầu
-
EXISTS Kiểm Tra Sự Tồn Tại Trong SQL - Deft Blog
-
[Tự Học SQL] Tìm Hiểu Về Toán Tử EXISTS, ANY Và ALL Với SELECT ...
-
SQL EXISTS - TRẦN VĂN BÌNH MASTER
-
Toán Tử SQL EXISTS
-
Lệnh EXISTS Trong MySQL - Web Cơ Bản
-
Điều Kiện EXISTS Trong SQL Server - Phần Mềm FREE
-
Các Toán Tử Trong SQL Server - Học Phân Tích Dữ Liệu ... - MasterMOS
-
NOT IN AND NOT EXISTS IN SQL - My Blog – My Favourite
-
Toán Tử Trong SQL - Học Sql Cơ Bản đến Nâng Cao - VietTuts
-
IN So Với EXISTS - W3seo Sự Khác Biệt Của In Và Exist Trong SQL
-
3 Loại Toán Tử Trong SQL Ai Cũng Cần Biết
-
Tối ưu Hóa Câu Lệnh SQL - Viblo
-
Nguyên Nhân Và Cách Tối ưu Câu Truy Vấn SQL Trong Lập Trình