Toán tử SQL EXISTS – GraphGuide.org

Toán tử SQL EXISTS được sử dụng để hạn chế số hàng được trả về bởi Câu lệnh SELECT. Toán tử TỒN TẠI trong SQL kiểm tra Truy vấn con về sự tồn tại của hàng, và nếu có thì nó sẽ trả về TRUE nếu không thì là FALSE.

Cú pháp toán tử SQL EXISTS

Cú pháp cơ bản của toán tử Sql Server EXISTS có thể được viết như sau:

SELECT [Column Names]
FROM [Source]
WHERE EXISTS (Write Subquery to Check)
  • Cột: Cho phép chúng ta chọn số lượng cột từ các bảng. Nó có thể là Một hoặc nhiều.
  • Nguồn: Một hoặc nhiều bảng có trong Cơ sở dữ liệu. JOINS được sử dụng để tham gia nhiều bảng.
  • Truy vấn con: Ở đây chúng ta phải cung cấp Truy vấn con. Nếu truy vấn con trả về true thì nó sẽ trả về các bản ghi, ngược lại Máy chủ không trả về bất kỳ bản ghi nào.

Đối với bản trình diễn Toán tử TỒN TẠI này, Chúng tôi sẽ sử dụng dữ liệu được hiển thị bên dưới

Ví dụ về toán tử SQL EXISTS

Truy vấn toán tử SQL Server Exists sau sẽ tìm thấy tất cả các Nhân viên hiện diện trong bảng có [Sales] lớn hơn 1000.

MẸO: Trước khi đi vào ví dụ về toán tử Exists này, tôi khuyên bạn nên tham khảo bài viết Truy vấn con để hiểu thiết kế truy vấn phụ và phân tích cú pháp truy vấn.

SELECT EMP1.[EmpID]
      ,EMP1.[FirstName]
      ,EMP1.[LastName]
      ,EMP1.[Education]
      ,EMP1.[Occupation]
      ,EMP1.[YearlyIncome]
      ,EMP1.[Sales]
      ,EMP1.[HireDate]
  FROM [Employee] AS EMP1
  WHERE EXISTS( SELECT * FROM [Employee] AS EMP2 
		WHERE EMP1.[EmpID] = EMP2.[EmpID] 
			AND [Sales] > 1000
		)

Toán tử SQL tồn tại trong truy vấn con 2

Hãy để tôi cho bạn xem kết quả của truy vấn phụ

Kết quả truy vấn con 3

Hãy để tôi thay đổi điều kiện thành Doanh số = 1000, đây là một điều kiện sai

SELECT EMP1.[EmpID]
      ,EMP1.[FirstName]
      ,EMP1.[LastName]
      ,EMP1.[Education]
      ,EMP1.[Occupation]
      ,EMP1.[YearlyIncome]
      ,EMP1.[Sales]
      ,EMP1.[HireDate]
  FROM [Employee] AS EMP1
  WHERE EXISTS( SELECT * FROM [Employee] AS EMP2 
		WHERE EMP1.[EmpID] = EMP2.[EmpID] 
			AND [Sales] = 1000
		)

Như bạn có thể thấy rằng truy vấn đang trả về các bản ghi trống, bởi vì truy vấn phụ đang trả về false. Hãy để chúng tôi chỉ cho bạn một ví dụ nữa về SQL Exists Operator để hiểu rõ hơn.

Toán tử SQL tồn tại 4

Truy vấn tồn tại sau đây sẽ tìm tất cả các Nhân viên trong bảng có [Occupation] ngang bằng với quản lý

SELECT EMP1.[EmpID]
      ,EMP1.[FirstName]
      ,EMP1.[LastName]
      ,EMP1.[Education]
      ,EMP1.[Occupation]
      ,EMP1.[YearlyIncome]
      ,EMP1.[Sales]
      ,EMP1.[HireDate]
  FROM [Employee] AS EMP1
  WHERE EXISTS( SELECT * FROM [Employee] AS EMP2 
		WHERE EMP1.[EmpID] = EMP2.[EmpID] 
			AND [Occupation] = 'Management'
		)

Toán tử SQL tồn tại 5

Truy vấn toán tử tồn tại sau đây sẽ tìm tất cả những người có mặt trong bảng có Nghề nghiệp là Quản lý, Chuyên gia hoặc Thư ký. Ở đây chúng ta sẽ sử dụng Toán tử IN bên trong SubQuery

SELECT EMP1.[EmpID]
      ,EMP1.[FirstName]
      ,EMP1.[LastName]
      ,EMP1.[Education]
      ,EMP1.[Occupation]
      ,EMP1.[YearlyIncome]
      ,EMP1.[Sales]
      ,EMP1.[HireDate]
  FROM [Employee] AS EMP1
  WHERE EXISTS( SELECT * FROM [Employee] AS EMP2 
		WHERE EMP1.[EmpID] = EMP2.[EmpID] 
		  AND [Occupation] IN ('Management', 'Professional', 'Clerical')
		)

Toán tử SQL tồn tại 7

Toán tử EXISTS Ví dụ 4

Bạn có thể thắc mắc, tại sao tôi lại sử dụng EMP1.[EmpID] = EMP2.[EmpID] bên trong truy vấn con. Vì vậy, hãy để tôi loại bỏ dòng đó và xem tập hợp kết quả.

SELECT EMP1.[EmpID]
      ,EMP1.[FirstName]
      ,EMP1.[LastName]
      ,EMP1.[Education]
      ,EMP1.[Occupation]
      ,EMP1.[YearlyIncome]
      ,EMP1.[Sales]
      ,EMP1.[HireDate]
  FROM [Employee] AS EMP1
  WHERE EXISTS( SELECT * FROM [Employee] AS EMP2 
		WHERE [Occupation] IN ('Management', 'Professional', 'Clerical')
		)

Như bạn có thể thấy từ ảnh chụp màn hình bên dưới, SQL tồn tại này đang trả về tất cả các bản ghi có trong bảng đã chọn. Bởi vì, truy vấn con trả về TRUE

Toán tử SQL tồn tại 8