SQL cung cấp một phương pháp thông minh để tìm các bản ghi không tồn tại thông qua hàm SQL NOT EXISTS. Tìm hiểu cách sử dụng nó tại đây.

Bạn đang xem : và không tồn tại sql

SQL là một ngôn ngữ logic, vì vậy mọi thứ bạn làm trong SQL sẽ thực hiện theo cách có thể đoán trước – bao gồm cả SQL KHÔNG TỒN TẠI. Bạn truy vấn cơ sở dữ liệu với một định thức logic. Cơ sở dữ liệu trả về dữ liệu.

Hôm nay, chúng ta sẽ xem xét toán tử TỒN TẠI và hàm KHÔNG TỒN TẠI trong SQL.

Bạn có thể sẽ thấy rằng hàm KHÔNG TỒN TẠI trong SQL thực sự khá đơn giản khi bạn đã quen với việc định dạng truy vấn con TỒN TẠI. Khi bạn sử dụng SQL KHÔNG TỒN TẠI, các truy vấn sẽ trả về tất cả các tài liệu không khớp với truy vấn con “tồn tại” đã cho.

Nhưng cách dễ nhất để hiểu loại truy vấn SQL này là xem cách nó được sử dụng để chọn dữ liệu riêng biệt trong toàn bộ cơ sở dữ liệu.

Khi nào bạn sử dụng SQL KHÔNG TỒN TẠI?

Hãy rút ra một ví dụ đơn giản. Chúng tôi có cơ sở dữ liệu khách hàng bao gồm danh sách các khách hàng. Chúng tôi cũng có một bảng khác bao gồm các đơn đặt hàng. Chúng tôi sử dụng SQL sau:

  select * từ những khách hàng KHÔNG TỒN TẠI (chọn ID khách hàng từ các đơn đặt hàng)  

Những điều trên có tác dụng gì?

Nó chọn tất cả dữ liệu từ bảng “khách hàng” trong đó khách hàng.customerID không tồn tại trong các đơn hàng.customerID. Tất nhiên, nó có một số yếu tố phụ thuộc: Nó yêu cầu ID khách hàng của bạn trong bảng khách hàng của bạn phải khớp với ID khách hàng trong bảng đơn đặt hàng của bạn. Nếu bạn cần sử dụng một khóa ngoại khác, nó sẽ phức tạp một chút.

Tóm lại, truy vấn và truy vấn con ở trên trả về bất kỳ hàng nào mà khách hàng chưa đặt hàng.

Điều quan trọng nhất cần nhận ra là SQL KHÔNG TỒN TẠI bao gồm hai phần:

  • Truy vấn chính, là “chọn * từ khách hàng ở đâu.”
  • Truy vấn phụ, là (“chọn ID khách hàng từ các đơn đặt hàng”)

>

KHÔNG TỒN TẠI đứng sau điều kiện “WHERE”.

Những người am hiểu về SQL sẽ nhận thấy rằng, về mặt tài nguyên, đây thường là một công việc sử dụng nhiều tài nguyên. Truy vấn không chỉ cần xem giá trị nào chuyển thành true và false (hàng nào không tồn tại), mà về cơ bản, bạn đang tạo một liên kết. Một liên kết, cho dù tham gia bên trái, tham gia bên ngoài hay tham gia bên trong, đều nắm quyền.

Trên thực tế, bạn đã khám phá ra lý do tại sao chúng tôi sử dụng TỒN TẠI và KHÔNG TỒN TẠI. Nó tốn ít tài nguyên hơn so với việc thực hiện các phép nối thông thường. Bởi vì nó sẽ kiểm tra trước để xem liệu bản ghi có tồn tại hay không, nó không thực hiện kết hợp bên ngoài đầy đủ hay kết hợp bên trong đầy đủ.

Vì vậy, chúng tôi sử dụng TỒN TẠI và KHÔNG TỒN TẠI để rõ ràng và khi chúng tôi muốn duy trì tài nguyên của hệ thống. Điều này cực kỳ quan trọng đối với các ứng dụng cần có khả năng mở rộng quy mô.

Điều gì sẽ xảy ra nếu chúng tôi muốn sử dụng EXISTS?

  select * từ những khách hàng CÓ HIỆN TẠI (chọn ID khách hàng từ các đơn đặt hàng)  

Giờ đây, chúng tôi đang chọn tất cả những khách hàng đã đặt hàng của chúng tôi trong quá khứ. Đó là một điều tuyệt vời cho một chiến dịch tiếp thị lại. Để làm cho nó hữu ích hơn một chút, chúng tôi cũng có thể:

  select khách hàng.total

Phần trên sẽ đưa ra danh sách khách hàng theo số doanh thu mà họ đã tạo ra cho chúng tôi. Bạn vẫn có thể sử dụng những thứ như “order by” - ngay cả với truy vấn con tồn tại - và các truy vấn sẽ trở lại bình thường từ máy chủ SQL.

Vì vậy, cú pháp chung là:

  chọn [thông tin đã chọn] từ [bảng] nơi KHÔNG TỒN TẠI [truy vấn con]  

Chính truy vấn con là phần quan trọng, vì đây là toán tử logic trả về null hoặc true. Với KHÔNG TỒN TẠI, sẽ đúng nếu truy vấn con không được đáp ứng. Với EXISTS, điều đó đúng nếu truy vấn được đáp ứng. Vì vậy, những điều TỒN TẠI và KHÔNG TỒN TẠI thực sự có thể làm những việc giống hệt nhau - vấn đề chỉ là viết rõ ràng hơn vào thời điểm đó.

Vì TỒN TẠI và KHÔNG TỒN TẠI hơi phức tạp, bạn có thể muốn thiết lập cơ sở dữ liệu demo để chạy các truy vấn, luôn hiểu rằng khối lượng nợ sẽ đáng kể hơn nhiều trên cơ sở dữ liệu lớn hơn.

Ngoài ra, hãy lưu ý rằng TỒN TẠI và KHÔNG TỒN TẠI sẽ luôn đối lập nhau. Nếu bạn muốn hoàn toàn ngược lại với một tập hợp các truy vấn được trả về, bạn chỉ cần thêm công cụ sửa đổi NOT. Điều này tương tự với VÀO và KHÔNG VÀO.

Bạn có thể sử dụng NOT EXISTS với các mệnh đề khác không?

Điều gì xảy ra nếu bạn muốn xem tất cả những khách hàng đã đặt hàng gần đây? NOT EXISTS chỉ là một kiểu ngữ pháp SQL khác; bạn vẫn có thể xây dựng truy vấn của mình theo cách thông thường. Vì vậy, hãy cân nhắc điều này:

 select * từ những khách hàng KHÔNG TỒN TẠI (chọn customerid từ những khách hàng đã tạo () & lt; = getdate () - 60)  

Vì vậy, truy vấn này không chọn những khách hàng không tồn tại. Thay vào đó, đó là lựa chọn những khách hàng không tồn tại trước hai tháng trước (60 ngày trước). Đây là một cách nhanh chóng, dễ dàng để có được một số thông tin, nhưng như chúng ta có thể thấy, đó không phải lúc nào cũng là cách duy nhất.

Điều đó có nghĩa là mệnh đề mà bạn sử dụng bên trong NOT EXISTS có thể khá phức tạp. Nhưng chẳng hạn, bạn sẽ không muốn nói điều gì đó như thế này:

  select * từ những khách hàng KHÔNG TỒN TẠI (chọn customerid từ các đơn hàng đặt hàng theo orderid)  

Các từ bổ nghĩa để sắp xếp phải ra bên ngoài, chẳng hạn như:

  select * từ những khách hàng KHÔNG TỒN TẠI (chọn customerid từ các đơn đặt hàng) đặt hàng theo orderid  

Điều này là do truy vấn con chỉ được thiết kế để tìm các hàng không tồn tại (hoặc trong trường hợp TỒN TẠI, các hàng tồn tại). Nó không nhằm thực hiện bất kỳ thứ tự hoặc định dạng nào không cần thiết.

Với các câu lệnh SQL đặc biệt phức tạp, một trong những cách tốt nhất để hiểu chúng là đơn giản lập sơ đồ, giống như bạn vẽ sơ đồ một câu. Điều này sẽ cung cấp cho bạn cái nhìn tổng quan về kết quả mà bạn có thể mong đợi.

Sử dụng câu lệnh JOIN thay vì KHÔNG TỒN TẠI

Chúng tôi đã đề cập rằng NOT EXISTS đang tạo một hoạt động JOIN. Bạn cũng có thể sử dụng các phép toán tham gia, chẳng hạn như:

  select * từ khách hàng tham gia đơn đặt hàng tham gia trên cjoin.customerID = ojoin.customerID tại đây…  

Đây là một cách hoàn toàn hợp lệ để thay thế KHÔNG TỒN TẠI và KHÔNG TỒN TẠI. Về cơ bản, quy trình này thay thế hàm “KHÔNG TỒN TẠI” bằng cách phác thảo chính xác chức năng KHÔNG TỒN TẠI.

Có những lợi ích khi sử dụng phương pháp này. Bạn có quyền kiểm soát chi tiết hơn đối với việc hoàn thành hàm JOIN và tối ưu hóa nó.

Nhưng cũng có những mặt trái. Các câu lệnh JOIN và NOT EXISTS / EXISTS vốn dĩ sẽ xử lý các giá trị null khác nhau. NOT EXIST sẽ có lỗi khi bao gồm các giá trị null này, và JOIN thì không.

Một vấn đề với các lệnh JOIN là chúng không cực kỳ dễ đọc. Ngoại trừ những lập trình viên cao cấp, các lệnh JOIN có xu hướng khá bất khả xâm phạm. Bạn có thể cải thiện điều này bằng cách sử dụng những cái tên dễ đọc, nhưng dù theo cách nào đi chăng nữa, không phải lúc nào bạn cũng trực quan ngay được những gì JOIN đang làm.

KHÔNG TỒN TẠI / TỒN TẠI dễ đọc hơn và dễ quét hơn. Cũng tồn tại sự thỏa hiệp của việc sử dụng hàm KHÔNG TỒN TẠI / TỒN TẠI khi viết mã và sau đó tối ưu hóa nó thành một hàm JOIN đặc biệt sau này.

Làm cách nào để bạn tối ưu hóa KHÔNG TỒN TẠI?

Mặc dù có những lợi ích về tài nguyên, bạn nên xử lý KHÔNG TỒN TẠI như các lệnh nối SQL khác. Về cơ bản, bạn nên cảnh giác với việc kết nối nhiều hơn hai bảng cùng một lúc và bạn nên đảm bảo rằng bạn không tham chiếu nhiều dữ liệu hơn mức bạn thực sự cần.

Nếu có thể, bạn có thể muốn giới hạn các truy vấn của mình trong một hàng nhất định; chẳng hạn, bạn có thể chỉ muốn kéo 50 truy vấn trong một ứng dụng và sau đó cho phép người dùng tiếp tục duyệt. Đây là một cách giảm tải thông thường và trở nên quan trọng, đặc biệt là khi ứng dụng bắt đầu mở rộng quy mô.

Một ví dụ:

  select * từ những khách hàng KHÔNG TỒN TẠI (chọn customerid từ đơn đặt hàng) giới hạn 50  

Điều này sẽ chỉ kéo 50 bản ghi cùng một lúc. Giống như ORDER BY, bạn cũng có thể áp dụng LIMIT cho truy vấn KHÔNG TỒN TẠI. Nhưng một lần nữa, bạn muốn đặt nó bên ngoài dấu ngoặc đơn chứ không phải bên trong chúng.

Một số lựa chọn thay thế cho SQL KHÔNG TỒN TẠI là gì?

Có một số cách mà bạn có thể giải quyết vấn đề SQL KHÔNG TỒN TẠI. Ví dụ, trong ví dụ sau:

  select * từ những khách hàng KHÔNG TỒN TẠI (chọn customerid từ những khách hàng đã tạo () & lt; = getdate () - 60)  

Trong ví dụ này, những gì bạn đang cố gắng làm là chọn những khách hàng trên 60 ngày. Và bạn có thể làm điều đó rất đơn giản:

  select * từ những khách hàng đã tạo () + 60 & lt; getdate ()  

Trông đẹp hơn rất nhiều, phải không?

Có những tình huống mà bạn có thể sử dụng mệnh đề WHERE đơn giản hơn là KHÔNG TỒN TẠI. Như đã đề cập trước đây, vấn đề là nó yêu cầu tài nguyên bổ sung. Chức năng KHÔNG TỒN TẠI sẽ bền vững hơn.

Tất nhiên, nó không đơn giản như ví dụ khác:

  select * từ những khách hàng KHÔNG TỒN TẠI (chọn ID khách hàng từ các đơn đặt hàng)  

Đây là một ví dụ trong đó sẽ rất khó sao chép hàm NOT EXISTS mà không sử dụng EXISTS vì bạn cần xem hàng nào không tồn tại bên trong tập hợp đã cho.

Bạn có thể nghĩ rằng bạn có thể sử dụng:

  select * từ khách hàng, đơn đặt hàng trong đó khách hàng.customerID! = order.customerID  

Nhưng điều này sẽ không mang lại cho bạn những gì bạn muốn vì nó sẽ cung cấp cho bạn từng hàng không khớp và mỗi hàng sẽ không khớp ít nhất một lần.

Khi bạn hiểu tại sao và khi nào SQL KHÔNG TỒN TẠI hoạt động, bạn sẽ thấy thêm các ví dụ về thời điểm nó không chỉ là tùy chọn tốt nhất mà còn là tùy chọn duy nhất.

Sự khác biệt giữa SQL NOT EXISTS và SQL IN là gì?

Nếu bạn đã nghe nói về lệnh SQL IN, bạn có thể thắc mắc sự khác biệt hợp lý giữa SQL KHÔNG TỒN TẠI và SQL IN.

Trong một số trường hợp, SQL KHÔNG TỒN TẠI và SQL KHÔNG CÓ TRONG (và SQL TỒN TẠI và SQL IN) có thể có cùng mục đích. Nhưng với một ví dụ, bạn có thể thấy cách nhấn mạnh khác nhau như thế nào.

Dưới đây là một ví dụ về cách sử dụng lệnh SQL IN:

  select * từ những khách hàng KHÔNG ở quốc gia đó (‘United States’)  

Ở trên sẽ chọn những khách hàng từ bảng không ở Hoa Kỳ. Tóm lại, SQL NOT EXISTS thường được sử dụng để phát hiện vị trí mà một hàng không tồn tại. SQL IN thường được sử dụng để phát hiện nơi giá trị không tồn tại trong bản ghi.

Một sự khác biệt khác là cách nó xử lý các giá trị rỗng. Và cũng có một câu hỏi về quản lý tài nguyên, vì SQL NOT EXISTS có các cách cụ thể để xử lý việc tham gia một truy vấn bên ngoài.

Cả SQL NOT EXISTS và SQL NOT IN đều là những công cụ tuyệt vời cho những gì chúng làm - chỉ cần nhớ rằng chúng phục vụ các mục đích khác nhau.

Tìm hiểu thêm về SQL KHÔNG TỒN TẠI

Nếu bạn đang tìm cách trau dồi các kỹ năng SQL của mình, bạn có thể muốn xem xét tham gia một lớp học về SQL. Bạn chắc chắn sẽ muốn tải xuống cơ sở dữ liệu SQL như MySQL và chơi với nó - đó là một trong những cách tốt nhất để học .

Trang được cập nhật lần cuối:


Xem thêm những thông tin liên quan đến chủ đề và không tồn tại sql

Bài 14.2: ComboBox, Kiểm tra dữ liệu tồn tại theo mô hình 3 lớp (Gọi Function trong SQL)

  • Tác giả: Tran Huong CNTT
  • Ngày đăng: 2021-12-28
  • Đánh giá: 4 ⭐ ( 8095 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: tranhuongCNTT tranhuong LậptrìnhWPF ComboBoxtrongWPF ComboBox_in_WPF WPF DataGrid Kiểm_tra_dữ_liệu_tồn_tại_theo_mô_hình_3_lớp

    CẢM ƠN TẤT CẢ QUÝ VỊ
    "ĐĂNG KÝ" ỦNG HỘ KÊNH PHÁT TRIỂN
    "LIKE" NẾU CẢM THẤY VIDEO HỮU ÍCH.

EXISTS Kiểm tra sự tồn tại trong SQL - Deft Blog

  • Tác giả: shareprogramming.net
  • Đánh giá: 3 ⭐ ( 8084 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Điều kiện EXISTS trong SQL đượ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ụ.

[Tự học SQL] Tìm hiểu về toán tử EXISTS, ANY và ALL với SELECT trong SQL

  • Tác giả: cafedev.vn
  • Đánh giá: 5 ⭐ ( 8816 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bài này cafedev chia sẻ cho ace về cách sử dụng Toán tử EXISTS, ANY và ALL trong SQL để lấy ra dữ liệu theo ý muốn của mình.

Xử lý lỗi tạo mới dữ liệu báo "Máy chủ SQL Server không tồn tại" -

  • Tác giả: camnangcuocsong.edu.vn
  • Đánh giá: 3 ⭐ ( 1373 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Lấy Lại Máy Chủ Sql Không Tồn Tại Misa 2017, Lấy Lại Máy Chủ Sql Trên Phần Mềm Misa

  • Tác giả: dichvutructuyen.com.vn
  • Đánh giá: 4 ⭐ ( 7415 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: 1, Lỗi không cho cài được phần mềm MISA:– Cấu hình máy tính thấp hơn so với quy định– Chưa cài đặt Frame work 4

Kiểm tra xem bảng có tồn tại trong SQL Server không

  • Tác giả: qastack.vn
  • Đánh giá: 3 ⭐ ( 4034 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] Đối với các truy vấn như thế này, tốt nhất là sử dụng INFORMATION_SCHEMAchế độ xem.…

Máy Chủ Sql Không Tồn Tại Misa Sme, Máy Chủ Sql Không Tồn Tại Misa

  • Tác giả: jdomain.vn
  • Đánh giá: 5 ⭐ ( 1476 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: 1, Lỗi không cho cài được phần mềm MISA:– Cấu hình máy tính thấp hơn so với quy định– Chưa cài đặt Frame work 4

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Các bước đơn giản để tạo lớp học của riêng bạn bằng Python - tạo lớp mới trong python

By ads_php