Điều gì xảy ra nếu bạn cập nhật một bản ghi không tồn tại SQL?
Điều kiện SQL EXISTS được sử dụng kết hợp với truy vấn con và được coi là đáp ứng nếu truy vấn con trả về ít nhất một hàng. Nó có thể được sử dụng trong câu lệnh SELECT, INSERT, UPDATE hoặc DELETE Show
cú phápCú pháp của điều kiện EXISTS trong SQL là WHERE EXISTS ( subquery ); Tham số hoặc Đối sốtruy vấn con Truy vấn con là câu lệnh SELECT. Nếu truy vấn con trả về ít nhất một bản ghi trong tập kết quả của nó, thì mệnh đề EXISTS sẽ đánh giá là đúng và điều kiện EXISTS sẽ được đáp ứng. Nếu truy vấn con không trả về bất kỳ bản ghi nào, mệnh đề EXISTS sẽ đánh giá là sai và điều kiện EXISTS sẽ không được đáp ứngGhi chú
DDL/DML cho các ví dụNếu bạn muốn làm theo hướng dẫn này, hãy lấy DDL để tạo bảng và DML để điền dữ liệu. Sau đó thử các ví dụ trong cơ sở dữ liệu của riêng bạn Nhận DDL/DML Ví dụ - Sử dụng Điều kiện EXISTS với Câu lệnh SELECTHãy bắt đầu bằng cách xem một ví dụ cho thấy cách sử dụng điều kiện EXISTS với câu lệnh SELECT Trong ví dụ này, chúng tôi có một bảng khách hàng với dữ liệu sau customer_idlast_namefirst_namefavorite_website4000JacksonJoetechonthenet. com5000SmithJanedigminecraft. com6000FergusonSamanthabighoạt động. com7000ReynoldsAllenkiểm tra toán học của bạn. com8000AndersonPaige NULL 9000JohnsonDerektechonthenet. com Và một bảng gọi là đơn đặt hàng với dữ liệu sau order_idcustomer_idorder_date170002016/04/18250002016/04/18380002016/04/19440002016/04/20 Bây giờ, hãy tìm tất cả các bản ghi từ bảng khách hàng trong đó có ít nhất một bản ghi trong bảng đơn hàng có cùng customer_id. Nhập câu lệnh SELECT sau SELECT * FROM customers WHERE EXISTS (SELECT * FROM orders WHERE customers.customer_id = orders.customer_id); Sẽ có 4 bản ghi được chọn. Đây là những kết quả mà bạn sẽ thấy customer_idlast_namefirst_namefavorite_website4000JacksonJoetechonthenet. com5000SmithJanedigminecraft. com7000ReynoldsAllenkiểm tra toán học của bạn. com8000AndersonPaige NULL Trong ví dụ này, có 4 bản ghi trong các khách hàng có giá trị customer_id xuất hiện trong bảng đơn hàng Ví dụ - Sử dụng điều kiện EXISTS với câu lệnh UPDATEHãy xem một ví dụ sử dụng điều kiện EXISTS trong câu lệnh CẬP NHẬT Trong ví dụ này, chúng tôi có một bảng được gọi là sản phẩm với dữ liệu sau product_idproduct_namecategory_id1Pear502Banana503Orange504Apple505Bread756Sliced Ham257Kleenex NULL Và một bảng có tên là summary_data với dữ liệu sau product_idcurrent_category110210310410510 Bây giờ, hãy cập nhật bảng summary_data với các giá trị từ bảng sản phẩm. Nhập câu lệnh SQL sau UPDATE summary_data SET current_category = (SELECT category_id FROM products WHERE products.product_id = summary_data.product_id) WHERE EXISTS (SELECT category_id FROM products WHERE products.product_id = summary_data.product_id); Sẽ có 5 bản ghi được cập nhật. Chọn lại dữ liệu từ bảng summary_data SELECT * FROM summary_data; Đây là những kết quả mà bạn sẽ thấy product_idcurrent_category150250350450575810Ví dụ này sẽ cập nhật trường current_category trong bảng summary_data với category_id từ bảng sản phẩm nơi các giá trị product_id khớp. 5 bản ghi đầu tiên trong bảng summary_data đã được cập nhật TIỀN BOA. Nếu chúng ta không bao gồm điều kiện EXISTS, thì truy vấn UPDATE sẽ cập nhật trường current_category thành NULL ở hàng thứ 6 của bảng summary_data (vì bảng sản phẩm không có bản ghi trong đó product_id=8) Ví dụ - Sử dụng điều kiện EXISTS với câu lệnh DELETEHãy xem một ví dụ sử dụng điều kiện EXISTS trong câu lệnh DELETE Trong ví dụ này, chúng tôi có một bảng được gọi là khách hàng với dữ liệu sau customer_idlast_namefirst_namefavorite_website4000JacksonJoetechonthenet. com5000SmithJanedigminecraft. com6000FergusonSamanthabighoạt động. com7000ReynoldsAllenkiểm tra toán học của bạn. com8000AndersonPaigeNULL9000JohnsonDerektechonthenet. com Và một bảng gọi là đơn đặt hàng với dữ liệu sau order_idcustomer_idorder_date170002016/04/18250002016/04/18380002016/04/19440002016/04/205NULL2016/05/01 Nhập câu lệnh DELETE sau DELETE FROM orders WHERE EXISTS (SELECT * FROM customers WHERE customers.customer_id = orders.customer_id AND customers.last_name = 'Jackson'); Sẽ có 1 bản ghi bị xóa. Chọn lại dữ liệu từ bảng đơn hàng SELECT * FROM orders; Đây là những kết quả mà bạn sẽ thấy order_idcustomer_idorder_date170002016/04/18250002016/04/18380002016/04/195NULL2016/05/01 Ví dụ này sẽ xóa tất cả các bản ghi khỏi bảng đơn đặt hàng nơi có một bản ghi trong bảng khách hàng có last_name là 'Jackson' và giá trị customer_id phù hợp trong cả hai bảng. Trong ví dụ này, bản ghi cho order_id=4 đã bị xóa Nếu bạn muốn xác định số hàng sẽ bị xóa, bạn có thể chạy câu lệnh SELECT sau trước khi thực hiện xóa SELECT COUNT(*) FROM orders WHERE EXISTS (SELECT * FROM customers WHERE customers.customer_id = orders.customer_id AND customers.last_name = 'Jackson'); Điều này sẽ trả về số bản ghi sẽ bị xóa khi bạn thực hiện câu lệnh DELETE ĐẾM(*)1Ví dụ - Sử dụng NOT với Điều kiện EXISTSCuối cùng, điều kiện NOT có thể được kết hợp với điều kiện EXISTS để tạo ra điều kiện NOT EXISTS. Hãy xem một ví dụ cho thấy cách sử dụng điều kiện NOT EXISTS trong SQL Trong ví dụ này, chúng tôi có một bảng được gọi là khách hàng với dữ liệu sau customer_idlast_namefirst_namefavorite_website4000JacksonJoetechonthenet. com5000SmithJanedigminecraft. com6000FergusonSamanthabighoạt động. com7000ReynoldsAllenkiểm tra toán học của bạn. com8000AndersonPaigeNULL9000JohnsonDerektechonthenet. com Và một bảng gọi là đơn đặt hàng với dữ liệu sau order_idcustomer_idorder_date170002016/04/18250002016/04/18380002016/04/19440002016/04/205NULL2016/05/01 Nhập câu lệnh SQL sau Thử điSELECT * FROM customers WHERE NOT EXISTS (SELECT * FROM orders WHERE customers.customer_id = orders.customer_id); Sẽ có 2 bản ghi được chọn. Đây là những kết quả mà bạn sẽ thấy customer_idlast_namefirst_namefavorite_website6000FergusonSamanthabigactivities. com9000JohnsonDerektechonthenet. com Ví dụ này sẽ trả về tất cả các bản ghi từ bảng khách hàng khi không có bản ghi nào trong bảng đơn đặt hàng cho customer_id đã cho Điều gì sẽ xảy ra với câu lệnh cập nhật thiếu mệnh đề WHERE?Nếu bạn không sử dụng mệnh đề WHERE trong câu lệnh CẬP NHẬT, tất cả các bản ghi trong bảng sẽ được cập nhật .
Được sử dụng khi chúng ta phải cập nhật hoặc thay đổi dữ liệu hiện có trong một tập hợp các bản ghi?Truy vấn CẬP NHẬT SQL được sử dụng để sửa đổi các bản ghi hiện có trong một bảng. Chúng ta có thể sử dụng mệnh đề WHERE với truy vấn CẬP NHẬT để cập nhật các hàng đã chọn, nếu không thì tất cả các hàng sẽ bị ảnh hưởng.
Điều gì sẽ xảy ra nếu hai người đang cập nhật cùng một bản ghi trong một bảng cùng một lúc?Nếu có nhiều người dùng chỉnh sửa một dòng cùng lúc với người dùng khác họ có thể nhận được "Mất cập nhật" . Có hai giải pháp để giải quyết vấn đề này. Bạn có thể khóa một hàng bằng dbms_lock và đợi cam kết của người dùng giữ khóa.
Làm cách nào để biết một bản ghi đã tồn tại trong cơ sở dữ liệu hay chưa nếu nó không chèn một bản ghi mới?Đầu tiên, chúng tôi kiểm tra xem bản ghi có tồn tại với từ khóa EXISTS hay không . EXISTS thực thi truy vấn mà chúng tôi yêu cầu (SELECT ) và trả về một giá trị boolean. Nếu nó tìm thấy bản ghi, chúng tôi trả về 'Bản ghi này đã tồn tại. ' |