Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: sự khác nhau giữa NOT IN và NOT EXISTS ???

  1. #1
    Ngày gia nhập
    06 2009
    Bài viết
    38

    Question sự khác nhau giữa NOT IN và NOT EXISTS ???

    Hi !
    Chào mọi người !
    Mình có 1 thắc mắc về sự khác nhau giữa not in và not exists như trong ví dụ sau:
    - in ra danh sách các sách ko bán được
    Code:
    cách 1 : select * from DanhMucSach
                where MaSach not in (select MaSach 
                                     from ChiTietHoaDon)
    
    cách 2 : select * from DanhMucSach d
                where not exists (select MaSach 
                                 from ChiTietHoaDon c
                                 where c.MaSach=d.MaSach )
    Cả 2 cách trên đều đúng , đều in ra danh sách các sách ko bán được nhưng mình ko bit sự khác biệt khi dùng not in và not exists

    Mong các pác ,các bạn giải thích dùm mình với !!!!!!!!!!!!!!!!!!!!!!!!!!!
    Cảm ơn rất nhiều !!!!!!!!!!!!!!!

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Đây là câu truy vấn phủ định:

    NOT IN : Không nằm trong
    NOT EXISTS: Không tồn tại
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  3. #3
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Trong đại số tập hợp có trường hợp "phần tử không nằm trong một nhóm". Đại khái là "các phần tử trong tập hợp A mà không nằm trong tập hợp B".

    Cả hai câu truy vấn của bạn đều dùng để đáp ứng trường hợp trên.

    IN có thể được hiểu bằng phương pháp duyệt mảng. Đi sau IN là một mảng giá trị. Mệnh đề "TriNaoDo NOT IN (...)" có nghĩa là "TriNaoDo không có trong mảng sau đây ...". Dấu 3 chấm ... tượng trưng cho một mảng hoặc một câu truy vấn phụ trả về một mảng trị.

    NOT EXISTS có thể hiểu bằng nghĩa "không hiện hữu", hay "0 dòng". Mệnh đề "NOT EXISTS (câu truy vấn phụ)" có nghĩa là "(câu truy vấn phụ) trả về 0 dòng".

    Khi nào nên dùng mệnh đề nào thì hơi phức tạp. Thường thì mệnh đề "NOT IN" nên tránh (IN thì được, nhưng NOT IN có cái phức tạp của nó).

  4. #4
    Ngày gia nhập
    06 2009
    Bài viết
    38

    cảm ơn 2 pác nhiều
    mình tạm hiểu chứ cũng chưa hiểu lắm

  5. #5
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Muốn dễ hiểu không gì bằng ví dụ. Lấy ví dụ thẳng trong hai câu của bạn.

    Code:
    select * from DanhMucSach
                where MaSach not in (select MaSach from ChiTietHoaDon)
    Phần tô màu là câu truy vấn phụ. Bình thường thì câu truy vấn phụ trả về một số dòng. Nhưng vì truy vấn chỉ có một trường (MaSach) nên mỗi dòng là một trị. SQL sẽ đặt kết quả thành một mảng mà mỗi phân tử là một mã sách có trong chi tiết hóa đơn.

    Điều kiện NOT IN sẽ bảo SQL duyệt mảng này và chỉ chấp nhận những phần tử không có trong mảng. Tức là câu truy vấn chính sẽ chọn ra những danh mục sách mà mã sách không có trong chi tiết hóa đơn.

    Code:
    select * from DanhMucSach d
                where not exists (select MaSach from ChiTietHoaDon c where c.MaSach=d.MaSach )
    Câu truy vấn phụ này sẽ trả về một số dòng từ chi tiết hóa đơn có mã sách là mã sách đang tìm kiếm (c.MaSach là mã sách trong chi tiết hoác đơn và d.MaSach là mã sách đang tìm). Nếu không tìm được dòng nào thì điều kiện NOT EXISTS được thỏa. Tóm tắt lại là tìm các danh mục sách mà khi dùng mã sách để truy vấn trong chi tiết hóa đơn thì không được dòng nào.

  6. #6
    Ngày gia nhập
    06 2009
    Bài viết
    38

    Mặc định sự khác nhau giữa NOT IN và NOT EXISTS ???

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    Muốn dễ hiểu không gì bằng ví dụ. Lấy ví dụ thẳng trong hai câu của bạn.

    Code:
    select * from DanhMucSach
                where MaSach not in (select MaSach from ChiTietHoaDon)
    Phần tô màu là câu truy vấn phụ. Bình thường thì câu truy vấn phụ trả về một số dòng. Nhưng vì truy vấn chỉ có một trường (MaSach) nên mỗi dòng là một trị. SQL sẽ đặt kết quả thành một mảng mà mỗi phân tử là một mã sách có trong chi tiết hóa đơn.

    Điều kiện NOT IN sẽ bảo SQL duyệt mảng này và chỉ chấp nhận những phần tử không có trong mảng. Tức là câu truy vấn chính sẽ chọn ra những danh mục sách mà mã sách không có trong chi tiết hóa đơn.

    Code:
    select * from DanhMucSach d
                where not exists (select MaSach from ChiTietHoaDon c where c.MaSach=d.MaSach )
    Câu truy vấn phụ này sẽ trả về một số dòng từ chi tiết hóa đơn có mã sách là mã sách đang tìm kiếm (c.MaSach là mã sách trong chi tiết hoác đơn và d.MaSach là mã sách đang tìm). Nếu không tìm được dòng nào thì điều kiện NOT EXISTS được thỏa. Tóm tắt lại là tìm các danh mục sách mà khi dùng mã sách để truy vấn trong chi tiết hóa đơn thì không được dòng nào.
    mình hiểu ròi
    cảm ơn pác nhiều lắm

  7. #7
    Ngày gia nhập
    11 2015
    Nơi ở
    Bình lợi, Bình Thạnh, Tp.HCM
    Bài viết
    1

    Các bạn cho mình hỏi. Nếu mình truy vấn bằng linq thì dùng sao ạ " NOT IN " trong linq nó không hiểu.
    Mình đang làm một đồ án môn học có liên quan đến vấn đề này mà không tìm thấy tài liệu nào chỉ. Giúp mình với

Các đề tài tương tự

  1. Lỗi No mapping exists from object type System.Web.UI.WebControls.Image khi insert dữ liệu
    Gửi bởi hunterxh trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 16-03-2012, 03:32 PM
  2. Lỗi The Type System.Web.UI.UpdatePanel exists in both khi debug !
    Gửi bởi nguyenvantien87 trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 2
    Bài viết cuối: 15-03-2012, 09:13 PM
  3. LINQ - Cannot attach an entity that already exists
    Gửi bởi Heejin trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 3
    Bài viết cuối: 06-06-2011, 02:31 PM
  4. Ý nghĩa của Exists and not exists trong Datbase?
    Gửi bởi thanhle_uit trong diễn đàn Thắc mắc đại cương Database & Reporting
    Trả lời: 2
    Bài viết cuối: 05-12-2010, 07:40 PM
  5. IN và EXISTS trong SQL nghĩa là gì?
    Gửi bởi nth4 trong diễn đàn Thắc mắc đại cương Database & Reporting
    Trả lời: 6
    Bài viết cuối: 20-10-2008, 09:25 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn