WHERE SOHD='1001' AND A.MASP=B.MASP)

Một phần của tài liệu Bài giảng cơ sở dữ liệu ths nguyễn thị thúy loan (Trang 71)

Phép chia trong SQL

WHERE SOHD='1001' AND A.MASP=B.MASP)

10/4/2012 Nguyễn ThịThúy Loan 282

Ví d

 Câu truy vấn con sẽ trả về giá trị của MASP thỏa mãn điều kiện SOHD=’1001′ và các giá trị này xem như là một mảng. Câu truy vấn cha khi sử dụng NOT IN sẽ duyệt qua từng phần tử của mảng và so sánh để chọn những MASP nào không nằm trong mảng trên.

Ví d

 Sửdụng NOT EXISTS SELECT *

FROM SANPHAM A

WHERE NUOCSX='SINGAPORE' AND NOT EXISTS(--Câu truy vấn con EXISTS(--Câu truy vấn con

SELECT *FROM CTHD B FROM CTHD B

WHERE SOHD='1001' AND A.MASP=B.MASP)

Ví d

 Câu truy vấn con sẽ chọn ra những bộ thỏa mãn điều kiện SOHD=’1001′ và có MASP nằm trong 2 bảng CTHD và SANPHAM.

Điều đáng chú ý ở đây là NOT EXIST chỉ trả vềgiá trị True hoặc False

10/4/2012 Nguyễn ThịThúy Loan 285

Ví d

 Giá trị của NOT EXIST chỉ đúng khi câu truy vấn con không trả vềbộ giá trị nào (Lý thuyết). Và ngược lại giá trị của NOT EXIST sai khi có các bộ giá trị trả về.

 Nếu câu truy vấn con không trả về bộ giá trị nào có nghĩa là SOHD ’1001′ CHƯA MUA BẤT KỲSẢN PHẨM NÀO.

10/4/2012 Nguyễn ThịThúy Loan 286

Ví d

 Điều kiện NOT EXISTS đúng câu truy vấn chính trả về tất cả những bộ sản phẩm do SINGAPORE sản xuất (những sản phẩm này chính là những sản phẩm mà SOHD ’1001′ chưa mua). Thỏa yêu cầu câu hỏi đặt ra.

Nhn xét

 Khi sử dụng NOT IN, câu truy vấn cha sẽ duyệt qua rất nhiều lần để đưa ra những bộgiá trị thỏa mãn.

 Với NOT EXISTS câu truy vấn cha xem NOT EXIST như một điều kiện, thực hiện truy vấn nếu NOT EXIST đúng và ngược lại.

Nhn xét

 Đây có thể xem như là khác biệt quan trọng nhất giữa NOT IN và NOT EXISTS. Sử dụng NOT EXISTS có vẻ “phức tạp”, khó hiểu hơn nhưng thực ra Sever thực hiện câu truy vấn dễdàng hơn.

10/4/2012 Nguyễn ThịThúy Loan 289

Ví d

 Như vậy vấn đề: Tìm những sản phẩm của Singapore mà SoHD ’1001′ chưa mua đã giải quyết xong! Từ đó ta có thể dễ dàng tìm những sản phẩm của Singapore mà một SoHD BẤT KỲ chưa mua.

10/4/2012 Nguyễn ThịThúy Loan 290

Ví d

 Câu hỏi phụ yêu cầu chúng ta tìm những sản phẩm của Singapore mà một Số hóa đơn bất kỳ chưa mua, để đơn giản như ở trên mình đã chỉ định sốhóa đơn là 1001.

 Vậy nếu giá trị của câu hỏi phụ trả về là không có sản phẩm nào thì có nghĩa là Số hóa đơn đó đã mua tất cả sản phẩm của Singapore.

Ví d

 Ta lại liên tưởng tới một câu truy vấn sử dụng NOT EXISTS, và bây giờ câu hỏi phụ chính là điều kiện NOT EXIST của câu hỏi chính.

Ví d

SELECT DISTINCT SOHD FROM CTHD A

Một phần của tài liệu Bài giảng cơ sở dữ liệu ths nguyễn thị thúy loan (Trang 71)

Tải bản đầy đủ (PDF)

(127 trang)