Làm cách nào để kiểm tra xem một hàng không tồn tại trong mysql?

Đôi khi, bạn có thể cần tìm các hàng không có trong bảng khác hoặc chọn các hàng không có trong bảng khác. Trong bài viết này, chúng ta sẽ xem xét cách hiển thị các hàng không có trong một bảng khác trong MySQL, sử dụng mệnh đề NOT EXISTS


Mệnh đề MySQL NOT EXISTS

MySQL cung cấp các mệnh đề EXISTS, UNION và NOT EXISTS giúp bạn thực hiện các thao tác SET với bảng MySQL. Bằng các thao tác SET, chúng tôi muốn nói rằng bạn có thể coi các bảng MySQL & kết quả truy vấn là các tập hợp toán học và chọn các hàng có trong cả hai bảng hoặc chỉ một trong các bảng. Đối với bài viết của chúng tôi, chúng tôi sẽ sử dụng mệnh đề NOT EXISTS


Cách hiển thị các hàng không có trong bảng khác

Dưới đây là các bước để tìm các hàng không có trong bảng khác. Giả sử bạn có hai bảng doanh số [id, order_date, số tiền] và đơn đặt hàng [id, order_date, số tiền]

mysql> create table sales[id int, order_date date, amount int];

mysql> insert into sales[id, order_date, amount]
      values[1, '2021-01-24',250],
      [2, '2021-01-25',250],
      [3, '2021-01-26',250],
      [4, '2021-01-27',250],
      [5, '2021-01-28',250],
      [6, '2021-01-29',250],
      [7, '2021-01-30',250],
      [8, '2021-01-31',250],
      [9, '2021-02-01',250];

mysql> select * from sales;
 +------+------------+--------+
 | id   | order_date | amount |
 +------+------------+--------+
 |    1 | 2021-01-24 |    250 |
 |    2 | 2021-01-25 |    250 |
 |    3 | 2021-01-26 |    250 |
 |    4 | 2021-01-27 |    250 |
 |    5 | 2021-01-28 |    250 |
 |    6 | 2021-01-29 |    250 |
 |    7 | 2021-01-30 |    250 |
 |    8 | 2021-01-31 |    250 |
 |    9 | 2021-02-01 |    250 |
 +------+------------+--------+

mysql> create table orders[id int, order_date date, amount int];

mysql> insert into orders[id, order_date, amount]
      values[5, '2021-01-28',250],
      [6, '2021-01-29',250],
      [7, '2021-01-30',250],
      [8, '2021-01-31',250],
      [9, '2021-02-01',250];

mysql> select * from orders;
 +------+------------+--------+
 | id   | order_date | amount |
 +------+------------+--------+
 |    5 | 2021-01-28 |    250 |
 |    6 | 2021-01-29 |    250 |
 |    7 | 2021-01-30 |    250 |
 |    8 | 2021-01-31 |    250 |
 |    9 | 2021-02-01 |    250 |
 +------+------------+--------+

Cũng đọc. Cách lấy dữ liệu tuần hiện tại trong MySQL

Đây là truy vấn SQL để chọn dữ liệu từ bảng doanh số không có trong bảng đơn đặt hàng

mysql> SELECT *
       FROM sales D
       WHERE NOT EXISTS[SELECT * FROM orders c
                       WHERE D.order_date = C.order_date];
 +------+------------+--------+
 | id   | order_date | amount |
 +------+------------+--------+
 |    1 | 2021-01-24 |    250 |
 |    2 | 2021-01-25 |    250 |
 |    3 | 2021-01-26 |    250 |
 |    4 | 2021-01-27 |    250 |
 +------+------------+--------+

Cũng đọc. Chọn 10 bản ghi hàng đầu cho mỗi danh mục trong MySQL

Trong truy vấn trên, chúng tôi sử dụng mệnh đề NOT EXISTS để chọn hàng từ bảng doanh số không có trong bảng đơn hàng, được chọn bằng truy vấn con. Trong truy vấn con, chúng tôi chỉ chọn những hàng từ bảng đơn đặt hàng có order_date giống với bảng bán hàng

Cần một công cụ báo cáo cho MySQL? . Thử nó ngay hôm nay

Hầu hết mọi người đều đã từng rơi vào trường hợp cần kiểm tra xem một bản ghi có tồn tại trong cơ sở dữ liệu MySQL hay không

Hãy xem qua cách thực hiện điều đó với lệnh phù hợp và dễ dàng nhất. Dưới đây, bạn có thể tìm thấy lệnh phù hợp và một lỗi phổ biến mà hầu hết mọi người mới bắt đầu đều có thể mắc phải khi cố gắng tìm ra vấn đề

Nếu bạn muốn kiểm tra xem một bản ghi đã tồn tại trong cơ sở dữ liệu của mình hay chưa, bạn hãy chạy đoạn mã sau

Sử dụng MySqli

Sử dụng mysql [không dùng nữa]

 0] {
    echo 'found!';
  } else {
    echo 'not found';
  }
} else {
  echo 'Error: ' . mysql_error[];
}

?>

Bây giờ, hãy kiểm tra một lỗi phổ biến mà chúng tôi khuyên bạn nên khắc phục

MySQL được coi là hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở. Nó nhằm mục đích tổ chức dữ liệu thành một hoặc nhiều bảng dữ liệu

Một số ứng dụng phổ biến như Twitter, Facebook YouTube, Google áp dụng MySQL cho mục đích lưu trữ dữ liệu. Ban đầu nó được tạo ra để sử dụng hạn chế. Tuy nhiên, giờ đây nó tương thích với nhiều nền tảng điện toán thiết yếu như macOS, Linux Ubuntu và Microsoft Windows

Bài viết cung cấp tổng quan chi tiết về câu lệnh T-SQL IF EXISTS và NOT EXISTS. Nó cũng giải thích tại sao nên chọn EXISTS thay vì IN và NOT EXISTS thay vì NOT IN khi so sánh các tập dữ liệu bằng truy vấn con

SQL EXISTS là một toán tử logic được sử dụng để kiểm tra sự tồn tại của các hàng trong cơ sở dữ liệu. Nó trả về TRUE trong trường hợp truy vấn con trả về một hoặc nhiều bản ghi. SQL NOT EXISTS hoạt động hoàn toàn ngược lại với toán tử EXISTS và thỏa mãn trong trường hợp không có hàng nào được truy vấn con trả về

nội dung

Sử dụng SQL EXISTS

Kết quả của điều kiện EXISTS là một giá trị boolean—Đúng hoặc Sai. SQL Server EXISTS có thể được sử dụng trong các câu lệnh SELECT, UPDATE, INSERT hoặc DELETE

SQL EXISTS cú pháp

SELECT
      column_name
FROM Table_Name
WHERE EXISTS [SELECT
                    column_name
              FROM Table_Name
              WHERE condition];

Ví dụ SQL EXISTS

Hãy xem xét ví dụ sau về cách sử dụng SQL EXISTS. Giả sử, cơ sở dữ liệu BicycleStoreDev của chúng tôi chứa hai bảng. Khách hàng và Đơn đặt hàng, được liên kết với mối quan hệ một-nhiều bảng

Giả sử chúng ta muốn khởi chạy chiến dịch tiếp thị lại và do đó, chúng ta cần có danh sách khách hàng đã đặt ít nhất một đơn hàng. Vì vậy, làm cách nào để kiểm tra xem một hàng có tồn tại trong SQL hay không?

SELECT
      *
FROM Sales.Customer c
WHERE EXISTS [SELECT
                    *
              FROM Sales.[Order] o
              WHERE o.CustomerId = o.OrderId]

Truy vấn liệt kê các hàng từ bảng Khách hàng trong đó các trường CustomerID bằng các trường OrderID trong bảng Đơn hàng

Sử dụng SQL KHÔNG TỒN TẠI

Điều kiện SQL Server NOT EXISTS bao gồm hai toán tử logic. EXISTS, được mô tả ở trên và NOT, được sử dụng để phủ nhận đầu vào Boolean

Sự khác biệt giữa EXISTS và NOT EXISTS trong SQL là gì?
Không giống như EXISTS, NOT EXISTS trả về TRUE nếu kết quả của truy vấn con không chứa bất kỳ hàng nào. Trong trường hợp một bản ghi trong bảng khớp với truy vấn con, NOT EXISTS trả về FALSE và quá trình thực thi truy vấn con bị dừng. Nói một cách dễ hiểu, NOT EXISTS cho phép định vị các bản ghi không khớp với truy vấn con.

SQL NOT EXISTS cú pháp

SELECT
      column_name
FROM Table_Name
WHERE NOT EXISTS [SELECT
		          column_name
                  FROM Table_Name
                  WHERE condition];

SQL KHÔNG TỒN TẠI trong truy vấn con

NOT EXISTS được sử dụng với truy vấn con trong mệnh đề WHERE để kiểm tra xem kết quả của truy vấn con trả về TRUE hay FALSE. Giá trị Boolean sau đó được sử dụng để thu hẹp các hàng từ câu lệnh chọn bên ngoài

Nói một cách đơn giản, truy vấn con NOT EXISTS kiểm tra mọi hàng từ truy vấn bên ngoài, trả về TRUE hoặc FALSE, sau đó gửi giá trị cho truy vấn bên ngoài để sử dụng. Nói một cách đơn giản hơn, khi bạn sử dụng SQL NOT EXISTS, truy vấn sẽ trả về tất cả các hàng không thỏa mãn điều kiện EXISTS.  

Ví dụ SQL KHÔNG EXISTS

Để chứng minh việc sử dụng NOT EXISTS trong SQL Server, chúng tôi sẽ truy vấn bảng Khách hàng để tìm các hàng mà ID khách hàng không tồn tại trong bảng Đơn hàng. Do đó, bằng cách sử dụng NOT EXISTS, chúng tôi sẽ nhận được danh sách khách hàng chưa đặt bất kỳ đơn hàng nào

Sự khác biệt giữa Máy chủ SQL IN và EXISTS

Toán tử logic IN trong SQL trả về TRUE nếu một giá trị đã chỉ định khớp với một trong các giá trị trong truy vấn con hoặc danh sách. Nói một cách đơn giản, toán tử IN so sánh một giá trị đã cho với một danh sách giá trị đã chỉ định. Trong trường hợp giá trị đã cho khớp với ít nhất một giá trị trong danh sách, nó sẽ trả về TRUE, nếu không, FALSE sẽ bị ném

Giả sử, chúng ta tiếp tục chiến dịch tiếp thị lại và cần lấy danh sách khách hàng sống ở New York để gửi ưu đãi đặc biệt cho họ

SELECT
     c.FirstName
    ,c.LastName
    ,c.Email
    ,c.City
FROM Sales.Customer c
WHERE City IN ['New York'];

Hãy nhớ truy vấn của chúng tôi với EXISTS? . Như bạn có thể thấy, kết quả là như nhau.

Vậy nên chọn cái nào?
Rõ ràng là các truy vấn con có IN trực quan hơn, tuy nhiên, chúng chậm hơn và kém hiệu quả hơn so với các truy vấn tương tự được viết bằng EXISTS khi nó xuất hiện .

Chúng ta cũng nên đề cập đến những khác biệt lớn khác giữa hai nhà khai thác

  • Đầu ra của truy vấn con với EXISTS có thể là TRUE hoặc FALSE, trong khi đầu ra của IN có thể là TRUE, FALSE hoặc NULL
  • Công cụ cơ sở dữ liệu dừng kiểm tra các hàng để tìm EXISTS sau khi nó tìm thấy ít nhất một hàng phù hợp, đối với IN, tuy nhiên, nó sẽ quét mọi hàng để tìm giá trị đã chỉ định
  • Giá trị null được trả về bởi truy vấn con được so sánh với câu lệnh bên ngoài bằng cách sử dụng IN hoặc NOT IN trả về UNKNOWN. Do đó, sử dụng giá trị null với IN có thể dẫn đến kết quả không mong muốn

Máy chủ SQL KHÔNG VÀO vs KHÔNG TỒN TẠI

SQL NOT IN bao gồm hai toán tử logic. IN mà chúng tôi đã mô tả ở trên và NOT có thể được đặt trước bất kỳ câu lệnh điều kiện nào để tìm các hàng mà câu lệnh đó sai

Cách sử dụng NOT IN trong SQL

Hãy tiếp tục với chiến dịch tiếp thị lại của chúng tôi. Giả sử, bây giờ chúng ta cần lấy danh sách khách hàng sống ở các bang khác ngoài New York

SELECT
     c.FirstName
    ,c.LastName
    ,c.Email
    ,c.City
FROM Sales.Customer c
WHERE c.State NOT IN ['NY'];

Hiệu suất NOT IN so với NOT EXISTS trong SQL Server

Đầu tiên, chúng ta nên đề cập rằng NOT EXISTS và NOT IN không giống như EXISTS và IN không thể hoán đổi cho nhau trong mọi tình huống. Cụ thể, khi có NULL, chúng sẽ trả về các kết quả khác nhau. Trong trường hợp này, khi truy vấn con trả về dù chỉ một null, NOT IN sẽ không khớp với bất kỳ hàng nào

Về khía cạnh hiệu năng, SQL NOT EXISTS sẽ là lựa chọn tốt hơn SQL NOT IN. NOT EXISTS nhanh hơn đáng kể so với NOT IN, đặc biệt khi kết quả truy vấn con rất lớn

Phần kết luận

SQL là một ngôn ngữ logic và mọi thứ hoạt động khá đơn giản tại đây. Các toán tử logic của nó kiểm tra điều kiện và trả về kiểu dữ liệu Boolean. Trong một số trường hợp nhất định, các toán tử logic này có thể được sử dụng thay thế cho nhau và việc lựa chọn toán tử nào là tùy thuộc vào người dùng. Trong bài viết, chúng tôi đã cung cấp một cái nhìn tổng quan và so sánh chi tiết về SQL EXISTS, NOT EXISTS, IN và NOT IN để bạn đủ hiểu biết và có những lựa chọn phù hợp trong công việc của mình

Ảnh chụp màn hình trong bài viết mà chúng tôi đã tạo trong công cụ SQL Complete—một phần bổ trợ SSMS và Visual Studio giúp cải thiện và tăng tốc đáng kể khả năng viết mã SQL của người dùng. Bạn muốn thử nó cho mình?

Làm cách nào để kiểm tra xem hàng có tồn tại trong SQL không?

Toán tử 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 con. Toán tử EXISTS trả về TRUE nếu truy vấn con trả về một hoặc nhiều bản ghi

Row_count[] trong MySQL là gì?

Mô tả. ROW_COUNT[] trả về số hàng được cập nhật, chèn hoặc xóa bởi câu lệnh trước . Điều này giống như số lượng hàng mà máy khách mysql hiển thị và giá trị từ hàm API mysql_affected_rows[] C.

Nếu không tồn tại trong MySQL là gì?

Mệnh đề “nếu không tồn tại” được dùng để tạo bảng và rất hữu ích để tránh lỗi “bảng đã tồn tại” .

Bạn có thể sử dụng. = Trong MySQL?

Trong MySQL, bạn có thể sử dụng hoặc. = toán tử để kiểm tra sự bất bình đẳng trong một truy vấn . Ví dụ: chúng ta có thể kiểm tra sự bất bình đẳng bằng toán tử , như sau. CHỌN * TỪ danh bạ WHERE last_name 'Johnson';

Chủ Đề