Sự khác nhau giữa NOT IN và NOT EXISTS

2,703 views
Skip to first unread message

nguyentienlong

unread,
Nov 3, 2011, 2:06:01 PM11/3/11
to iSTeam test 2011
Hi các bạn,
Chắc hản các bạn ai đã từng học qua môn CSDL đều đã dùng tới 2 từ khóa
trên. Các bạn có thể nêu ra sự khác nhau của 2 toán tử trên không. Lúc
nào thì nên dùng NOT IN và lúc nào nên dùng NOT EXISTS.
Các bạn thử tìm mối liên quan giữa phép trừ và phép chia trong đại số
quan hệ và 2 toán tử trên nhé!
Thân,

Thảo Nguyễn Hồ Trọng

unread,
Nov 6, 2011, 1:44:09 AM11/6/11
to isteam-t...@googlegroups.com
Một câu hỏi rất hay nhưng chưa thấy ai thảo luận vậy ta.
Đây là bài viết mà mình viết để tham gia thảo luận, các bạn cứ thẳng thắng đóng góp ý kiến nhé.
Tham gia để học hỏi thêm kiến thức thôi mà ^_^
http://trongthaonh.wordpress.com/2011/11/06/not-in-and-not-exists-in-sql/




Vào 01:06 Ngày 04 tháng 11 năm 2011, nguyentienlong <nguyenti...@gmail.com> đã viết:



--
Nguyễn Hồ Trọng Thảo
University of Infomation Technology
Faculty of Information System

Mobile: 0165 799 0165

sinh viên nghèo dt-hg

unread,
Nov 6, 2011, 4:18:35 AM11/6/11
to iSTeam test 2011
vậy tóm tắt lại:
khác nhau:
_Not In sẽ tìm ra tất cả các bộ thõa yêu cầu câu truy vấn con rồi mới
so sánh với câu truy vấn mẹ
_Not Exists sẽ quét từng bộ ở câu truy vấn con và so sánh trực tiếp
với yêu cầu của mẹ, nếu không thõa là loại trừ ngay

vậy nếu
câu truy vấn con quét ở một quan hệ có số bộ từ ít đến trung bình thì
nên dùng IN VÀ NOT IN sẽ
ngược lại nếu câu truy vấn con đòi hỏi phải quét nhiều quan hệ có số
bộ lớn thì EXISTS và NOT EXITST lại tốt hơn

trừu tượng một chút lại thấy NOT IN giồng hàm DO-WHILE trong lập trình
là làm hết rồi so sánh điều kiện
còn NOT EXISTS lại giống WHILE là so sanh điều kiện rồi mơi cho làm

hehe suy nghĩ vậy không biết đúng không :D


On 6 Tháng Mười Một, 12:44, Thảo Nguyễn Hồ Trọng


<trongtha...@gmail.com> wrote:
> Một câu hỏi rất hay nhưng chưa thấy ai thảo luận vậy ta.
> Đây là bài viết mà mình viết để tham gia thảo luận, các bạn cứ thẳng thắng
> đóng góp ý kiến nhé.

> Tham gia để học hỏi thêm kiến thức thôi mà ^_^http://trongthaonh.wordpress.com/2011/11/06/not-in-and-not-exists-in-...


>
> Vào 01:06 Ngày 04 tháng 11 năm 2011, nguyentienlong <

> nguyentienlon...@gmail.com> đã viết:


>
> > Hi các bạn,
> > Chắc hản các bạn ai đã từng học qua môn CSDL đều đã dùng tới 2 từ khóa
> > trên. Các bạn có thể nêu ra sự khác nhau của 2 toán tử trên không. Lúc
> > nào thì nên dùng NOT IN và lúc nào nên dùng NOT EXISTS.
> > Các bạn thử tìm mối liên quan giữa phép trừ và phép chia trong đại số
> > quan hệ và 2 toán tử trên nhé!
> > Thân,
>
> --

> *Nguyễn Hồ Trọng Thảo*


> University of Infomation Technology
> Faculty of Information System

> Email: trongtha...@gmail.com
> Mobile: 0165 799 0165

BOM Nguyen

unread,
Nov 6, 2011, 10:03:13 AM11/6/11
to isteam-t...@googlegroups.com
Mấy bữa nay mình cũng nghiên cứu để tìm ra cách trình bày đơn giản ngắn gọn.

Theo mình thì tóm lại là:

_in/not in: dùng trong trường hợp khi mình đã xác định được cần duyệt trên thuộc tính nào của bảng, "biến" duyệt phải có cùng thuộc tính với tập hợp các phần tử cần duyệt.
Ví dụ:

select * from sinhvien where diemtb not in ('8','9','10')
in ra danh sách sinh viên có điểm trung bình không phải là 8, 9, 10.

_exists/not exists: dùng trong kiểm tra sự tồn tại của các phần tử trong một tập hợp, các phần tử của tập hợp này không phân biệt thuộc tính.

Ví dụ:
select masv, hoten, diemtb from sinhvien where not exists ( select * from sinhvien where diemtb>10 or diemtb<0)

In ra danh sách mã sinh viên, họ tên, điểm trung bình, của các sinh viên (kiểm tra điều kiện: "nếu không tồn tại" sinh viên nào có điểm trung bình lớn hơn 10, và nhỏ hơn 0. Nếu có tồn tại thì sẽ không in ra (do sai dữ liệu))

_Phép trừ: 
Ví dụ và định nghĩa: Q=R-S;

Bảng Q là tập hợp các bộ trong R sau khi loại bỏ tất cả các bộ của S có trong R. Nếu như bộ nào có trong S mà không có trong R thì bỏ qua.
Điểu kiện là 2 bảng R và S là khả hợp, tức là nó phải có chung các thuộc tính. Và đơn nhiên khi Q sinh ra cũng sẽ khả hợp với R hay S;

_Phép chia:
Q=R/S;

Bảng Q là tập hợp một số bộ sao cho các bộ này nằm trong R và thỏa với tất cả các bộ trong R.


Vào 01:06 Ngày 04 tháng 11 năm 2011, nguyentienlong <nguyenti...@gmail.com> đã viết:



--
Họ và tên: Nguyễn Ngọc Minh Tuấn
MSSV: 10520282

Reply all
Reply to author
Forward
0 new messages