PDA

View Full Version : giúp mình tí code SQL



rainman02
07-01-2011, 18:35
http://ca2.upanh.com/19.0.23597061.ytS0/giupminh.png
http://www.upanh.com/viewupload/id=istgao

2. Cho biết các mã số môn học phải học trước môn có mã số COSC3320
3. Cho biết các môn học phải học sau môn có mã số COSC3320
4. Cho biết tên sinh viên và các môn học mà sinh viên tham gia với kết quả cuối khóa trên 7 điểm
5. Cho biết tên sinh viên và điểm trung bình của sinh viên trong từng học kỳ
6. Cho biết tên sinh viên có kết quả học tập cao nhất
7. Cho biết tên sinh viên tham dự tất cả các môn học

bạn nào làm ơn giúp mình 1 tí :X:X:X[COLOR="Silver"]

zxcongducxz
07-01-2011, 23:06
Tuy đọc đề hok hiểu nhưng vẫn cố giúp =]]

CSDL


create database QL
go
use QL
go
create table MonHoc
(
TenMH nvarchar(50)
,MaMH char(8) primary key
,TinChi tinyint
,Khoa char(4)
)
create table KhoaHoc
(
MaKH tinyint primary key
,MaMH char(8)
,HocKy tinyint
,GiaoVien nvarchar(50)
)
create table SinhVien
(
HoTen nvarchar(50)
,MaSV bigint primary key
,Nam tinyint
,Khoa char(4)
)
create table KetQua
(
MaSV bigint foreign key references SinhVien
,MaKH tinyint foreign key references KhoaHoc
,Diem float
)
create table DieuKien
(
MaMH char(8) foreign key references MonHoc
,MaMH_truoc char(8)
)
go
insert into MonHoc values(N'Nhập môn tin học', 'COSC1310',4,'CNTT')
insert into MonHoc values(N'Toán rời rạc', 'MATH2410',3,'TOAN')
insert into MonHoc values(N'Cấu trúc dữ liệu', 'COSC3320',4,'CNTT')
insert into MonHoc values(N'Cơ sở dữ liệu', 'COSC3380',3,'CNTT')
insert into KhoaHoc values(85, 'MATH2410',1,'Lan')
insert into KhoaHoc values(92, 'COSC1310',1,'Chi')
insert into KhoaHoc values(102, 'COSC3320',2,'Hoa')
insert into KhoaHoc values(112, 'MATH2410',1,'Lan')
insert into KhoaHoc values(119, 'COSC1310',1,'Chi')
insert into KhoaHoc values(135, 'COSC3380',1,'Nhi')
insert into SinhVien values(N'Lê An', 6910078,1,'CNTT')
insert into SinhVien values(N'Hồ Thúy Hoa', 6900023,2,'CNTT')
insert into KetQua values(6910078,119,8)
insert into KetQua values(6910078,112,6)
insert into KetQua values(6900023,85,10)
insert into KetQua values(6900023,92,9)
insert into KetQua values(6900023,102,8)
insert into KetQua values(6900023,135,10)
insert into DieuKien values('COSC3380','COSC3320')
insert into DieuKien values('COSC3380','MATH2410')
insert into DieuKien values('COSC3320','COSC1310')
go

Tra Loi


--2. Cho biết các mã số môn học phải học trước môn có mã số COSC3320
select MaMH_truoc
from DieuKien
where MaMH='COSC3320'

--3. Cho biết các môn học phải học sau môn có mã số COSC3320
select m.TenMH
from DieuKien d,MonHoc m
where m.MaMH=d.MaMH and d.MaMH_truoc='COSC3320'

--4. Cho biết tên sinh viên và các môn học mà sinh viên tham gia với kết quả cuối khóa trên 7 điểm
select HoTen,m.TenMH
from SinhVien s, MonHoc m, KhoaHoc h, KetQua q
where q.MaKH=h.MaKH and h.MaMH=m.MaMH and q.MaSV=s.MaSV and Diem>7
select HoTen,(select TenMH from MonHoc where MaMH=h.MaMH)
from SinhVien s, KhoaHoc h, KetQua q
where q.MaKH=h.MaKH and q.MaSV=s.MaSV and Diem>7

--5. Cho biết tên sinh viên và điểm trung bình của sinh viên trong từng học kỳ
select s.HoTen,AVG(Diem) as 'Diem' --,h.HocKy
from SinhVien s,KetQua k,KhoaHoc h
where s.MaSV=k.MaSV and k.MaKH=h.MaKH
group by s.HoTen,h.HocKy

--6. Cho biết tên sinh viên có kết quả học tập cao nhất
select HoTen,MAX(Diem) as 'DiemCaoNhat'
from SinhVien s,KetQua k
where s.MaSV=k.MaSV group by HoTen,s.MaSV

--7. Cho biết tên sinh viên tham dự tất cả các môn học
select HoTen
from SinhVien s, KetQua k
where s.MaSV=k.MaSV
group by HoTen,s.MaSV
having COUNT(MaKH)>=(select COUNT(*) from MonHoc)

quatimkhomauu
08-01-2011, 04:55
Có thể viết theo kiễu như sau...

2.
SELECT MAMH_TRUOC FROM dbo.DIEUKIEN
WHERE MAMH = 'COSC3320'

3.
SELECT M.TENMH FROM dbo.MONHOC M
INNER JOIN dbo.DIEUKIEN D ON M.MAMH = D.MAMH
WHERE D.MAMH_TRUOC = 'COSC3320'

4.
SELECT S.HOTEN, M.TENMH, KQ.DIEM FROM dbo.MONHOC M
INNER JOIN dbo.KHOAHOC KH ON M.MAMH = KH.MAMH
INNER JOIN dbo.KETQUA KQ ON KQ.MAKH = KH.MAKH
INNER JOIN dbo.SINHVIEN S ON S.MASV = KQ.MASV
WHERE KQ.DIEM > 7
ORDER BY S.HOTEN ASC

5.
SELECT S.HOTEN, KH.HOCKY, AVG(CAST(KQ.DIEM AS FLOAT)) AS 'DIEM TRUNG BINH' FROM dbo.KHOAHOC KH
INNER JOIN dbo.KETQUA KQ ON KH.MAKH = KQ.MAKH
INNER JOIN dbo.SINHVIEN S ON S.MASV = KQ.MASV
GROUP BY S.HOTEN, KH.HOCKY
ORDER BY S.HOTEN ASC

6.
SELECT S.HOTEN, AVG(CAST(K.DIEM AS FLOAT)) AS 'DIEM' FROM dbo.KETQUA K
INNER JOIN dbo.SINHVIEN S ON S.MASV = K.MASV
GROUP BY S.HOTEN
ORDER BY 'DIEM' DESC

7.
SELECT S.HOTEN FROM dbo.SINHVIEN S
INNER JOIN dbo.KETQUA KQ ON S.MASV = KQ.MASV
GROUP BY S.HOTEN, S.MASV
HAVING COUNT(KQ.MAKH)>=(SELECT COUNT(*) FROM dbo.MONHOC)

hoangnnm
08-01-2011, 09:21
Mấy bạn cũng đi học rồi chắc phải biết là giúp kiểu này thực ra là chẳng giúp gì cả .

heenoowoon
08-01-2011, 10:52
Mấy bạn cũng đi học rồi chắc phải biết là giúp kiểu này thực ra là chẳng giúp gì cả .

Mình không nghĩ là vậy, nếu anh nghĩ vậy thì người ta xuất bản sách tham khảo ra để làm gì

hoangnnm
08-01-2011, 13:47
Mình không nghĩ là vậy, nếu anh nghĩ vậy thì người ta xuất bản sách tham khảo ra để làm gì

Bạn cứ nghĩ lấy bài tập không làm 1 chữ rồi quăng lên cho ng khác làm giùm thì hay ho lắm phải không ?

gietbo
08-01-2011, 13:54
Mình ghét nhất những dạng câu hỏi như thế này . Nếu câu nào khó thì post lên thôi . Ném nguyên bài tập vậy thì ai mà trả lời đc.

kunimatsu
08-01-2011, 14:35
Hãy nên tìm sách đọc và tìm hiểu, không hiểu chỗ nào thì mới hỏi. Chứ bê nguyên bài tập ra rồi nhờ vả, cho dù có người giúp thì bạn cũng chẳng hiểu được gì.

hoangtukhung
19-07-2011, 22:09
Mình ghét nhất những dạng câu hỏi như thế này . Nếu câu nào khó thì post lên thôi . Ném nguyên bài tập vậy thì ai mà trả lời đc.


Hãy nên tìm sách đọc và tìm hiểu, không hiểu chỗ nào thì mới hỏi. Chứ bê nguyên bài tập ra rồi nhờ vả, cho dù có người giúp thì bạn cũng chẳng hiểu được gì.
Mấy ông nhầm rồi... Tôi cũng đang làm bài tập này, thầy ra một đống hình như chủ pic post mấy câu nó làm ko đc đó vì nguyên 1 bài tới mười mấy câu lận.