mình tìm dc cách này thấy nó cũng dễ hiểu
thứ 1: phép chia gồm có số bị chia,số chia,và thương
đê bài yêu cầu:
tìm *** chính là bảng thương
tất cả *** bảng số bị chia
và bảng liên kết 2 bảng trên lại là bảng số chia
ta theo công thức
select ycdb
from bảng thương
where not exists (
select *
from bảng số bị chia
where not exist (
select*
from bảng số chia
where điều kiện kết giữa các bảng trên
)))
chú ý...nếu đề thêm yêu cầu chọn ở bảng nào thì ở phần where bảng đó thêm điều kiện ví dụ where ncsx='VN'and not exists....
Announcement
Collapse
No announcement yet.
Mong các Pro UIT giúp em cái PHÉP CHIA TRONG SQL dùng not exist
Collapse
X
-
Originally posted by 11520104 View Postàh! mình thấy là phép chia dùng not exists lúc nào cũng có 3 bảng! vd bài đầu tiên của chủ thớt! có 3 bảng là HOADON, CTHD và SANPHAM!còn cái bài tập cô đưa cho mình về làm, chỉ có 2 bảng liên kết vs nhau! là bảng LICHBAY với LOAIMB!
=> k biết phải làm sao hết! @@ chỉ biết làm cái cách đếm thôi! ^^
Hiển tham khảo:
Code:select distinct ngaydi from lichbay lich1 where not exists (select maloai from loaimb loai1 where hangsx='boeing' and maloai not in (select lich2.maloai from loaimb loai2, lichbay lich2 where lich2.maloai = loai2.maloai and lich1.ngaydi = lich2.ngaydi) );
Leave a comment:
-
ác :sad: hix, đúng là không có ra, chán quá, thôi bạn cứ đếm cho nó đơn giản, thi tốt nhé
Leave a comment:
-
thấy cách này vẫn hiệu quả nhất!code ngắn nữa!
SELECT NGAYDI
FROM (select DISTINCT NGAYDI, LB.MALOAI
FROM LICHBAY LB, LOAIMB LMB
WHERE HANGSX='Boeing' AND LMB.MALOAI=LB.MALOAI) AS A
GROUP BY NGAYDI HAVING COUNT(*) = ALL
(SELECT COUNT(*)
FROM LOAIMB
WHERE HANGSX='Boeing')
Leave a comment:
-
Originally posted by is.9vnn View Post--cách này mình thử dùng phép trừ nè:
select lb.ngaydi
from lichbay lb
where not exists
(select maloai from loaimb where hangsx = 'Boeing'
except
(select maloai from maybay where maybay.sohieu = lb.sohieu))thui kệ! còn vài chục phút nữa thi! ^^
kèm file query nèk! ai rảnh vào làm cho vui! @@
qlcb.rar
Leave a comment:
-
Originally posted by 11520104 View Post1) KHACHHANG(MAKH, TEN, DCHI, DTHOAI)
2) NHANVIEN(MANV,TEN, DCHI, DTHOAI, LUONG, LOAINV)
3) LOAIMB(MALOAI, HANGSX)
4) MAYBAY(SOHIEU, MALOAI)
5) CHUYENBAY(MACB, SBDI, SBDEN, GIODI, GIODEN)
6) LICHBAY(NGAYDI, MACB, SOHIEU, MALOAI)
7) DATCHO(MAKH, NGAYDI, MACB)
8) KHANANG(MANV, MALOAI)
9) PHANCONG(MANV, NGAYDI, MACB)
đề ra là: Cho biết ngày đi nào mà có tất cả các loại máy bay của hãng (HANGSX) = 'Boeing' tham gia
các bác làm hộ em! (_ _)
select lb.ngaydi
from lichbay inner join maybay on lb.sohieu = maybay.sohieu
where maybay.maloai in (select maloai from loaimb where hangsx = 'Boeing')
group by lb.ngaydi
having count(distinct lb.maloai) = (select count(distinct maloai) from loaimb where hangsx = 'Boeing')
--cách này mình thử dùng phép trừ nè:
select lb.ngaydi
from lichbay lb
where not exists
(select maloai from loaimb where hangsx = 'Boeing'
except
(select maloai from maybay where maybay.sohieu = lb.sohieu))Last edited by is.9vnn; 28-11-2012, 00:56.
Leave a comment:
-
àh! mình thấy là phép chia dùng not exists lúc nào cũng có 3 bảng! vd bài đầu tiên của chủ thớt! có 3 bảng là HOADON, CTHD và SANPHAM!còn cái bài tập cô đưa cho mình về làm, chỉ có 2 bảng liên kết vs nhau! là bảng LICHBAY với LOAIMB!
=> k biết phải làm sao hết! @@ chỉ biết làm cái cách đếm thôi! ^^
Leave a comment:
-
Originally posted by 11520104 View Postcho em hỏi? câu lệnh là như này:
Code:Select sohd from HOADON where not exists ( select * from SANPHAM where nuocsx=‘Trung Quoc’ and not exists ( select * from CTHD where HOADON.sohd=CTHD.sohd and CTHD.masp=SANPHAM.masp))
Code:select SOHD from (select CTHD.SOHD, CTHD.masp from CTHD, SANPHAM where nuocsx='Trung Quoc' and CTHD.masp=SANPHAM.masp) as A group by SOHD having count(*) = all (select count(*) from SANPHAM where nuocsx='Trung Quoc')
Originally posted by 11520104 View Post1) KHACHHANG(MAKH, TEN, DCHI, DTHOAI)
2) NHANVIEN(MANV,TEN, DCHI, DTHOAI, LUONG, LOAINV)
3) LOAIMB(MALOAI, HANGSX)
4) MAYBAY(SOHIEU, MALOAI)
5) CHUYENBAY(MACB, SBDI, SBDEN, GIODI, GIODEN)
6) LICHBAY(NGAYDI, MACB, SOHIEU, MALOAI)
7) DATCHO(MAKH, NGAYDI, MACB)
8) KHANANG(MANV, MALOAI)
9) PHANCONG(MANV, NGAYDI, MACB)
đề ra là: Cho biết ngày đi nào mà có tất cả các loại máy bay của hãng (HANGSX) = 'Boeing' tham gia
các bác làm hộ em! (_ _)
Leave a comment:
-
1) KHACHHANG(MAKH, TEN, DCHI, DTHOAI)
2) NHANVIEN(MANV,TEN, DCHI, DTHOAI, LUONG, LOAINV)
3) LOAIMB(MALOAI, HANGSX)
4) MAYBAY(SOHIEU, MALOAI)
5) CHUYENBAY(MACB, SBDI, SBDEN, GIODI, GIODEN)
6) LICHBAY(NGAYDI, MACB, SOHIEU, MALOAI)
7) DATCHO(MAKH, NGAYDI, MACB)
8) KHANANG(MANV, MALOAI)
9) PHANCONG(MANV, NGAYDI, MACB)
đề ra là: Cho biết ngày đi nào mà có tất cả các loại máy bay của hãng (HANGSX) = 'Boeing' tham gia
các bác làm hộ em! (_ _)
Leave a comment:
-
cho em hỏi? câu lệnh là như này:
Code:Select sohd from HOADON where not exists ( select * from SANPHAM where nuocsx=‘Trung Quoc’ and not exists ( select * from CTHD where HOADON.sohd=CTHD.sohd and CTHD.masp=SANPHAM.masp))
Code:select SOHD from (select CTHD.SOHD, CTHD.masp from CTHD, SANPHAM where nuocsx='Trung Quoc' and CTHD.masp=SANPHAM.masp) as A group by SOHD having count(*) = all (select count(*) from SANPHAM where nuocsx='Trung Quoc')
Last edited by 11520104; 27-11-2012, 10:48.
Leave a comment:
-
Bạn xem bài này có thể giúp ít cho bạn : http://tuoitrevui.net/@forum/threads...chia-trong-sql
Leave a comment:
-
mình cũng không hiểu chỗ này mày mò mãi không ra nếu theo bạn Nguyễn Hồ Trọng Thảo mà cắt bớt câu lệnh thì không được
select * from SANPHAM
where nuocsx=‘Trung Quoc’ and not exists (
select * from CTHD
where HOADON.sohd=CTHD.sohd and CTHD.masp=SANPHAM.masp)
)
The multi-part identifier "HOADON.sohd" could not be bound.
còn không cắt bớt như
Select sohd
from HOADON
where not exists (
select * from SANPHAM
where nuocsx=‘Trung Quoc’ and not exists (
select * from CTHD
where HOADON.sohd=CTHD.sohd and CTHD.masp=SANPHAM.masp)
)
Leave a comment:
-
Code:select * from SANPHAM where nuocsx=‘Trung Quoc’ and not exists ( select * from CTHD where HOADON.sohd=CTHD.sohd and CTHD.masp=SANPHAM.masp) )
Bộ giá trị này chính là những sản phẩm của Trung Quốc mà SoHD chưa mua, nếu không trả về bộ giá trị nào thì có nghĩa là đã mua tất cả sản phẩm.
Vậy khi đưa câu truy vấn này vào điều kiện NOT EXIST phía ngoài thì ta biết được SoHD đã mua hết tất cả sản phẩm của TQ hay chưa...???
Leave a comment:
-
Originally posted by 10520140 View PostMình chỉnh lại code của bạn cho dễ nhìn
Code:Select sohd from HOADON where not exists ( select * from SANPHAM where nuocsx=‘Trung Quoc’ and not exists ( select * from CTHD where HOADON.sohd=CTHD.sohd and CTHD.masp=SANPHAM.masp) )
Code:select * from SANPHAM where nuocsx=‘Trung Quoc’ and not exists ( select * from CTHD where HOADON.sohd=CTHD.sohd and CTHD.masp=SANPHAM.masp) )
NOT EXISTS trả về giá trị True khi không có bộ giá trị nào trả về.
Đưa câu truy vấn "Những sản phẩm mà SoHD đó chưa mua" trở thành điều kiện NOT EXISTS nữa thì sẽ được câu truy vấn phép chia hoàn chỉnh mà bạn đã có. Chắc chắn bạn sẽ tự suy ra được kết quả là: Số HD đã mua tất cả sản phẩm do Trung Quốc sản xuất.
Code:select * from SANPHAM where nuocsx=‘Trung Quoc’ and not exists ( select * from CTHD where HOADON.sohd=CTHD.sohd and CTHD.masp=SANPHAM.masp) )
Leave a comment:
Leave a comment: