Professional Documents
Culture Documents
SELECT
from tSach
where MaNXB='NXB05'
--Đưa ra mã sách, tên sách, mã nxb của nxb có mã 'NXB05'
hoặc 'NXB10'
select MaSach, TenSach, MaNXB
from tSach
where MaNXB='NXB05' or MaNXB='NXB10'
--Đưa ra mã sách, tên sách của các sách bắt đầu bằng chữ
'Ngay'
select MaSach, TenSach
from tSach
where TenSach like N'Ngày%'
--tạo bảng sách gồm các sách của nhà xuất bản có mã NXB10
select MaSach, TenSach, MaNXB
into tSachNXB10
from tSach
where MaNXB='NXB10'
--sắp xếp giá giảm dần
select MaSach, TenSach, DonGiaBan, DonGiaNhap
from tSach
where MaNXB='NXB10' or MaNXB='NXB05'
order by DonGiaBan asc, DonGiaNhap desc
--In ra danh sach cac sach chi lay (Masach, Tensach) do nhà
xuất abnr giao dục xuất bản
select MaSach, TenSach
from tSach inner join tNhaXuatBan on
tSach.MaNXB=tNhaXuatBan.MaNXB
where TenNXB=N'NXB Giáo Dục'
--cách 2:
select MaSach, TenSach
from tSach ,tNhaXuatBan
where tSach.MaNXB=tNhaXuatBan.MaNXB and TenNXB=N'NXB Giáo
Dục'
--In ra danh sách các sách (MaSach,TenSach) do Nhà xuất bản
Giáo Dục có giá từ 100000 đến 150000
select MaSach, TenSach, DonGiaBan
from tSach inner join tNhaXuatBan on
tSach.MaNXB=tNhaXuatBan.MaNXB
where TenNXB=N'NXB Giáo Dục' and DonGiaBan between 100000
and 150000
--1.Liệt kê danh sách sinh viên, gồm các thông tin sau: Mã
sinh viên, Họ sinh viên, Tên sinh viên, Học bổng, Danh sách
sv được sắp xếp theo thứ tự Mã sinh viên tăng dần.
select MaSV, HoSV, TenSV, HocBong
from DSSinhVien
order by MaSV asc
--2.Danh sách các sinh viên gồm thông tin sau: Mã sinh viên,
họ tên sinh viên, Phái, Ngày sinh. Danh sách sẽ được sắp xếp
theo thứ tự Nam/Nữ.
select MaSV, HoSV, Phai, NgaySinh
from DSSinhVien
order by Phai asc
--3.Thông tin các sinh viên gồm: Họ tên sinh viên, Ngày
sinh, Học bổng. Thông tin sẽ được sắp xếp theo thứ tự Ngày
sinh tăng dần và Học bổng giảm dần.
select HoSV, TenSV, NgaySinh, HocBong
from DSSinhVien
order by NgaySinh asc, HocBong desc
--4.Danh sách các môn học có tên bắt đầu bằng chữ T, gồm các
thông tin: Mã môn, Tên môn, Số tiết.
select MaMH, TenMH, SoTiet
from DMMonHoc
where TenMH like 'T%'
--5.Liệt kê danh sách những sinh viên có chữ cái cuối cùng
trong tên là I, gồm các thông tin: Họ tên sinh viên, Ngày
sinh, Phái.
select HoSV, TenSV, NgaySinh, Phai
from DSSinhVien
where TenSV like '%I'
--6.Danh sách những khoa có ký tự thứ hai của tên khoa có
chứa chữ N, gồm các thông tin: Mã khoa, Tên khoa.
select MaKhoa, TenKhoa
from DMKhoa
where TenKhoa like '_N%'
--7.Liệt kê những sinh viên mà họ có chứa chữ Thị.
select HoSV, TenSV
from DSSinhVien
where HoSV like N'%Thị%'
--8.Cho biết danh sách những sinh viên có ký tự đầu tiên của
tên nằm trong khoảng từ a đến m, gồm các thông tin: Mã sinh
viên, Họ tên sinh viên, Phái, Học bổng.
select MaSV, HoSV, TenSV, Phai, HocBong
from DSSinhVien
where TenSV like '[a-m]%'
--9.Cho biết danh sách những sinh viên mà tên có chứa ký tự
nằm trong khoảng từ a đến m, gồm các thông tin: Họ tên sinh
viên, Ngày sinh, Nơi sinh, Học bổng. Danh sách được sắp xếp
tăng dần theo họ tên sinh viên.
select HoSV, TenSV, NgaySinh, NoiSinh, HocBong
from DSSinhVien
where TenSV between 'a' and 'm'
order by TenSV asc
--10.Cho biết danh sách các sinh viên có học bổng lớn hơn
100,000, gồm các thông tin: Mã sinh viên, Họ tên sinh viên,
Mã khoa, Học bổng. Danh sách sẽ được sắp xếp theo thứ tự Mã
khoa giảm dần.
select MaSV, HoSV, TenSV, MaKhoa, HocBong
from DSSinhVien
where HocBong > 100000
order by MaKhoa desc
--11.Liệt kê các sinh viên có học bổng từ 150,000 trở lên và
sinh ở Hà Nội, gồm các thông tin: Họ tên sinh viên, Mã khoa,
Nơi sinh, Học bổng.
select HoSV, TenSV, MaKhoa, NoiSinh, HocBong
from DSSinhVien
where HocBong >= 150000 and NoiSinh=N'Hà Nội'
--12.Danh sách các sinh viên của khoa Anh văn và khoa Vật
lý, gồm các thông tin: Mã sinh viên, Mã khoa, Phái.
select MaSV, DSSinhVien.MaKhoa, Phai
from DMKhoa join DSSinhVien on
DMKhoa.MaKhoa=DSSinhVien.MaKhoa
where DMKhoa.TenKhoa=N'Anh Van' or DMKhoa.TenKhoa=N'Vật Lý'
--13.Cho biết những sinh viên có ngày sinh từ ngày
01/01/1991 đến ngày 05/06/1992 gồm các thông tin: Mã sinh
viên, Ngày sinh, Nơi sinh, Học bổng.
select MaSV, NgaySinh, NoiSinh, HocBong
from DSSinhVien
where NgaySinh between '01/01/1991' and '05/06/1992'
--14.Danh sách những sinh viên có học bổng từ 80.000 đến
150.000, gồm các thông tin: Mã sinh viên, Ngày sinh, Phái,
Mã khoa.
select MaSV, NgaySinh, Phai, MaKhoa, HocBong
from DSSinhVien
where HocBong between 80000 and 150000
--15.Cho biết những môn học có số tiết lớn hơn 30 và nhỏ hơn
45, gồm các thông tin: Mã môn học, Tên môn học, Số tiết.
select MaMH, TenMH, SoTiet
from DMMonHoc
where SoTiet between 30 and 45
--16.Liệt kê những sinh viên nam của khoa Anh văn và khoa
tin học, gồm các thông tin: Mã sinh viên, Họ tên sinh viên,
tên khoa, Phái.
select DSSinhVien.MaSV, DSSinhVien.HoSV, DSSinhVien.TenSV,
DMKhoa.TenKhoa, DSSinhVien.Phai
from DSSinhVien join DMKhoa on
DSSinhVien.MaKhoa=DMKhoa.MaKhoa
where DSSinhVien.Phai='Nam' and (DMKhoa.TenKhoa=N'Anh Văn'
or DMKhoa.TenKhoa=N'Tin học')
--17.Liệt kê những sinh viên nữ, tên có chứa chữ NC. Truy
vấn sử dụng hàm: year, month, day, getdate, case, ….
select MaSV, TenSV,
datediff
from DSSinhVien
where TenSV like '%NC%'
--18.Danh sách sinh viên có nơi sinh ở Hà Nội và sinh vào
tháng 02, gồm các thông tin: Họ sinh viên, Tên sinh viên,
Nơi sinh, Ngày sinh.
select HoSV, TenSV, NoiSinh, NgaySinh
from DSSinhVien
where NoiSinh=N'Hà Nội' and month(NgaySinh)=2
--19.Cho biết những sinh viên có tuổi lớn hơn 20, thông tin
gồm: Họ tên sinh viên, Tuổi,Học bổng.
select HoSV, TenSV, year(getdate())-year(NgaySinh) as Tuổi,
HocBong
from DSSinhVien
where year(getdate())-year(ngaysinh)>20
--20.Danh sách những sinh viên có tuổi từ 20 đến 25, thông
tin gồm: Họ tên sinh viên, Tuổi, Tên khoa.
select HoSV, TenSV, year(getdate())-year(NgaySinh) as Tuổi,
TenKhoa
from DSSinhVien join DMKhoa on
DSSinhVien.MaKhoa=DMKhoa.MaKhoa
where (year(getdate())-year(ngaysinh)) between 20 and 25
--21.Danh sách sinh viên sinh vào mùa xuân năm 1990, gồm các
thông tin: Họ tên sinh viên, Phái, Ngày sinh. (between 1 and
3)
select HoSV, TenSV, Phai, NgaySinh
from DSSinhVien
where month(NgaySinh) between 1 and 3 and
year(NgaySinh)=1990
--22.Cho biết thông tin về mức học bổng của các sinh viên,
gồm: Mã sinh viên, Phái, Mã khoa, Mức học bổng. Trong đó,
mức học bổng sẽ hiển thị là “Học bổng cao” nếu giá trị của
field học bổng lớn hơn 500,000 và ngược lại hiển thị là “Mức
trung bình”
select MaSV, Phai, MaKhoa, HocBong,
case
when HocBong>500000 then N'Học bổng cao'
else N'Mức trung bình'
end as HocBong
from DSSinhVien
--23.Cho biết tổng số sinh viên của toàn trường
select count(MaSV) as N'Tổng sinh viên'
from DSSinhVien
--24.Cho biết tổng sinh viên và tổng sinh viên nữ.
--25.Cho biết tổng số sinh viên của từng khoa.
select TenKhoa, count(MaSV) as N'Tổng số sinh viên'
from DSSinhVien join DMKhoa on
DSSinhVien.MaKhoa=DMKhoa.MaKhoa
group by TenKhoa
--26.Cho biết số lượng sinh viên học từng môn.
select TenMH, count (distinct MaSV) as N'Số sinh viên'
from KetQua join DMMonHoc on KetQua.MaMH=DMMonHoc.MaMH
group by TenMH
--27.Cho biết số lượng môn học mà sinh viên đã học(tức tổng
số môn học có torng bảng kq)
select count( distinct MaMH) as N'Số môn'
from KetQua
--28.Cho biết tổng số học bổng của mỗi khoa.
select TenKhoa, sum(HocBong) as N'Tổng học bổng'
from DSSinhVien join DMKhoa on
DSSinhVien.MaKhoa=DMKhoa.MaKhoa
group by TenKhoa
--29.Cho biết học bổng cao nhất của mỗi khoa.
select TenKhoa, max(HocBong) as N'Học Bổng Max'
from DSSinhVien join DMKhoa on
DSSinhVien.MaKhoa=DMKhoa.MaKhoa
group by TenKhoa
--30.Cho biết tổng số sinh viên nam và tổng số sinh viên nữ
của mỗi khoa.
select MaKhoa, sum(case Phai when N'nam' then 1 else 0 end)
as 'Tong sinh vien nam',
sum(case Phai when N'nữ' then 1 else 0 end) as 'Tong
sinh vien nu'
from DSSinhVien
group by MaKhoa
--31.Cho biết số lượng sinh viên theo từng độ tuổi.
select year(getdate())-year(NgaySinh) as Tuổi, count(MaSV)
as SoSV
from DSSinhVien
group by year(getdate())-year(NgaySinh)
--32.Cho biết những năm sinh nào có 2 sinh viên đang theo
học tại trường.
select year(NgaySinh) as N'Năm sinh', count(MaSV) as N'Số
sinh viên'
from DSSinhVien
group by year(NgaySinh)
having count(MaSV)=2
--33.Cho biết những nơi nào có hơn 2 sinh viên đang theo học
tại trường.
select NoiSinh, count(MaSV) as N'Số sinh viên'
from DSSinhVien
group by NoiSinh
having count(MaSV)>2
--34.Cho biết những môn nào có trên 3 sinh viên dự thi.
select MaMH as N'Môn học', count(MaSV) as 'Số sinh viên'
from KetQua
group by MaMH
having count(MaSV)>3
--35.Cho biết những sinh viên thi lại trên 2 lần.
select MaSV as N'Sinh viên', count(LanThi) as N'Số lần thi
lại'
from KetQua
group by MaSV
having count(LanThi)>2
--36.Cho biết những sinh viên nam có điểm trung bình lần 1
trên 7.0
select HoSV, TenSV ,Phai ,LanThi, avg(Diem) as N'Điểm trung
bình'
from KetQua join DSSinhVien on KetQua.MaSV=DSSinhVien.MaSV
where LanThi=1 and Phai=N'nam'
group by LanThi, Phai, HoSV, TenSV
having avg(Diem)>7.0
--37.Cho biết danh sách các sinh viên rớt trên 2 môn ở lần
thi 1.
select MaSV, count(MaMH) as N'Số môn rớt'
from KetQua
where LanThi=1 and Diem<5
group by MaSV
having count(MaMH)>=2
--38.Cho biết danh sách những khoa có nhiều hơn 2 sinh viên
nam
select MaKhoa, count(MaSV) as N'Số sinh viên'
from DSSinhVien
where Phai='Nam'
group by MaKhoa
having count(MaSV)>=2
--39.Cho biết những khoa có 2 sinh đạt học bổng từ 200.000
đến 300.000.
select MaKhoa, count(MaSV) as N'Số sinh viên'
from DSSinhVien
where HocBong between 200000 and 300000
group by MaKhoa
having count(MaSV)>=2
--40.Cho biết số lượng sinh viên đậu và số lượng sinh viên
rớt của từng môn trong lần thi 1.
select KetQua.MaMH, TenMH, count(MaSV) as N'Số sinh viên
đậu'
from KetQua join DMMonHoc on KetQua.MaMH=DMMonHoc.MaMH
where LanThi=1 and Diem>=5
group by KetQua.MaMH, TenMH
select KetQua.MaMH, TenMH, count(MaSV) as N'Số sinh viên
rớt'
from KetQua join DMMonHoc on KetQua.MaMH=DMMonHoc.MaMH
where LanThi=1 and Diem<5
group by KetQua.MaMH, TenMH
--41.Cho biết sinh viên nào có học bổng cao nhất.
select max(HocBong) as N'Học Bổng max' from
(select HoSV, TenSV, HocBong
from DSSinhVien)A
--42.Cho biết sinh viên nào có điểm thi lần 1 môn cơ sở dữ
liệu cao nhất.
select HoSV, TenSV ,TenMH ,LanThi ,Diem
from DSSinhVien join KetQua on DSSinhVien.MaSV=KetQua.MaSV
join DMMonHoc on KetQua.MaMH=DMMonHoc.MaMH
where LanThi=1 and TenMH=N'cơ sở dữ liệu'
and Diem =
(
select max(Diem)
from KetQua join DMMonHoc on KetQua.MaMH=DMMonHoc.MaMH
where TenMH=N'cơ sở dữ liệu' and LanThi=1
)
--43.Cho biết sinh viên khoa anh văn có tuổi lớn nhất.
select HoSV, TenSV ,NgaySinh ,MaKhoa
from DSSinhVien
where (getdate()-NgaySinh)=
(
select max(getdate()-NgaySinh)
from DSSinhVien
where MaKhoa=N'AV'
)
--44.Cho biết khoa nào có đông sinh viên nhất.
select TenKhoa
from DSSinhVien join DMKhoa on
DSSinhVien.MaKhoa=DMKhoa.MaKhoa
group by TenKhoa
having count(TenKhoa)>=all(select count(MaSV)
from DSSinhVien
group by MaKhoa)
--45.Cho biết khoa nào có đông nữ nhất.
select TenKhoa
from DSSinhVien join DMKhoa on
DSSinhVien.MaKhoa=DMKhoa.MaKhoa
where Phai=N'Nữ'
group by TenKhoa
having count(TenKhoa)>=all(select count(MaSV)
from DSSinhVien
where Phai=N'Nữ'
group by MaKhoa)
--46.Cho biết môn nào có nhiều sinh viên rớt lần 1 nhiều
nhất.
select MaMH
from KetQua
where LanThi=1 and Diem<5.0
group by MaMH
having count(Diem)>=all(select count(Diem)
from KetQua
where LanThi=1 and Diem<5.0
group by MaMH)
--47.Cho biết sinh viên không học khoa anh văn có điểm thi
môn phạm lớn hơn điểm thi văn phạm của sinh viên học khoa
anh văn.
select distinct KetQua.MaSV
from KetQua join DSSinhVien on KetQua.MaSV=DSSinhVien.MaSV
where MaMH='05' and MaKhoa not like 'AV' and Diem>(
select Diem
from KetQua join DSSinhVien on
KetQua.MaSV=DSSinhVien.MaSV
where MaMH='05' and MaKhoa='AV' )
--48.Cho biết sinh viên có nơi sinh cùng với Hải.
select HoSV, TenSV, MaSV
from DSSinhVien
where NoiSinh=(select NoiSinh
from DSSinhVien
where TenSV=N'Hải')
--49.Cho biết những sinh viên nào có học bổng lớn hơn tất cả
học bổng của sinh viên thuộc khoa anh văn
select HoSV, TenSV, MaSV
from DSSinhVien
where HocBong>=all(select HocBong
from DSSinhVien
where MaKhoa='AV')
--50.Cho biết những sinh viên có học bổng lớn hơn bất kỳ học
bổng của sinh viên học khóa anh văn
select HoSV, TenSV, MaSV
from DSSinhVien
where HocBong>=any(select HocBong
from DSSinhVien
where MaKhoa='AV')
--51.Cho biết sinh viên nào có điểm thi môn cơ sở dữ liệu
lần 2 lớn hơn tất cả điểm thi lần
--1 môn cơ sở dữ liệu của những sinh viên khác.
select MaSV
from KetQua
where LanThi=2 and MaMH='01' and Diem>=all(select Diem
from KetQua
where LanThi=1 and MaMH='01')
--52.Cho biết những sinh viên đạt điểm cao nhất trong từng
môn.
select MaSV,KetQua.MaMH,Diem
from KetQua join (select MaMH, max(Diem) as DiemMax
from KetQua
group by MaMH) A
on KetQua.MaMH=A.MaMH and Diem=A.DiemMax
--53.Cho biết những khoa không có sinh viên học.
select *
from DMKhoa
where not exists (select distinct MaKhoa
from KetQua join DSSinhVien on KetQua.MaSV=DSSinhVien.MaSV)
--54.Cho biết sinh viên chưa thi môn cơ sở dữ liệu.
select HoSV, TenSV
from DSSinhVien
where not exists
(select distinct*
from KetQua
where MaKhoa = '01' )
--55.Cho biết sinh viên nào không thi lần 1 mà có dự thi lần
2.
select MaSV
from KetQua
where LanThi=2 and not exists(
select MaSV
from KetQua
where LanThi=1 )
--56.Cho biết môn nào không có sinh viên khoa anh văn học.
select TenMH
from DMMonHoc
where not exists(
select MaMH
from DSSinhVien join KetQua on DSSinhVien.MaSV=KetQua.MaSV
where MaMH='AV')
--57.Cho biết những sinh viên khoa anh văn chưa học môn văn
phạm.
select MaSV
from DSSinhVien
where MaKhoa='AV' and not exists(
select MaSV
from KetQua
where MaMH='05')
--58.Cho biết những sinh viên không rớt môn nào.
select HoSV, TenSV, MaSV
from DSSinhVien
where MaSV not in(
select MaSV
from KetQua
where Diem<=5)
--59.Cho biết những sinh viên học khoa anh văn có học bổng
và những sinh viên chưa bao giờ rớt.
select HoSV, TenSV, MaSV, MaKhoa, HocBong
from DSSinhVien
where MaKhoa='AV' and HocBong>0 and not exists(
select MaSV
from KetQua
where Diem<=5)
--60.Cho biết khoa nào có đông sinh viên nhận học bổng nhất
và khoa nào khoa nào có ít sinh viên nhận học bổng nhất.
(select MaKhoa, count(masv) as SvHocBong
from DSSinhVien
where HocBong is not null
group by MaKhoa
having count(masv) >= all(select count(masv) as SvHocBong
from DSSinhVien
where isnull(HocBong, 0) >0
group by MaKhoa)
)union
(select MaKhoa, count(masv) as SvHocBong
from DSSinhVien
where HocBong is not null
group by MaKhoa
having count(masv) <= all(select count(masv) as SvHocBong
from DSSinhVien
where isnull(HocBong, 0) >0
group by MaKhoa)
)
--61.Cho biết 3 sinh viên có học nhiều môn nhất.
select top 3 MaSV,count(distinct MaMH)'Số môn học'
from KetQua
group By MaSV
having count(distinct MaMH)>=All(select count( distinct
MaMH)
from KetQua
group by MaSV)
--62.Cho biết những môn được tất cả các sinh viên theo học.
select MaMH
from KetQua
group By MaMH
having count(distinct MaSV)=(select count(MaSV)
from DSSinhVien)
--63.Cho biết những sinh viên học những môn giống sinh viên
có mã số A02 học.
select distinct MaSV
from KetQua
where exists(select distinct MaMH
from KetQua
where MaSV='A02')
--64.Cho biết những sinh viên học những môn bằng đúng những
môn mà sinh viên A02 học.
--65.Tạo một bảng mới tên sinhvien-ketqua: gồm: MASV, HoSV,
TenSV, SoMonHoc. Sau đó
--Thêm dữ liệu vào bảng này dựa vào dữ liệu đã có.
create table SINHVIEN_KETQUA(
MaSV varchar(15),
HoSV nvarchar(15),
TenSV nvarchar(10),
SoMonHoc int
)
insert into SINHVIEN_KETQUA
select DSSinhVien.MaSV, HoSV, TenSV, count(distinct MaMH)
from DSSinhVien join KetQua on DSSinhVien.MaSV=KetQua.MaSV
group by DSSinhVien.MaSV, HoSV, TenSV
--66.Thêm vào bảng khoa cột Siso, cập nhật sĩ số vào khoa từ
dữ liệu sinh viên.
alter table dmkhoa
add Siso tinyint
update DMKhoa
set Siso= SoSV
from (select MaKhoa, count(masv) as SoSV
from DSSinhVien where HocBong is not null
group by MaKhoa) A
where dmkhoa.MaKhoa = A.MaKhoa
--67.Tăng thêm 1 điểm cho các sinh viên vớt lần 2. Nhưng chỉ
tăng tối đa là 5 điểm
update KetQua
set Diem=Diem+1
where LanThi=2 and Diem+1<=5
select *
from KetQua
--68.Tăng học bổng lên 100000 cho những sinh viên có điểm
trung bình là 6.5 trở lên
update DSSinhVien
set HocBong=HocBong+100000
where MaSV in (select MaSV
from KetQua
group by MaSV
having avg(Diem)>=6.5)
--69.Thiết lập học bổng bằng 0 cho những sinh viên thi hai
môn rớt ở lần 1
update DSSinhVien
set HocBong=0
where MaSV in (select MaSV
from KetQua
where LanThi=1 and Diem<5
group by MaSV
having count (MaMH)=2)
--70.Xoá tất cả những sinh viên chưa dự thi môn nào.
delete from DSSinhVien
where not exists ( select MaSV
from KetQua)
--71.Xóa những môn mà không có sinh viên học.
delete from DMMonHoc
where not exists ( select MaSV
from KetQua)
--72.Danh sách sinh viên không bi rớt môn nào
select
DSSinhVien.MaSV,HoSV,TenSV,Phai,NgaySinh,NoiSinh,HocBong
from DSSinhVien join KetQua on DSSinhVien.MaSV=KetQua.MaSV
group by
DSSinhVien.MaSV,HoSV,TenSV,Phai,NgaySinh,NoiSinh,HocBong
having min(Diem)>=5
--73.Danh sách sinh viên học môn văn phạm và môn cơ sở dữ
liệu
select *
from DSSinhVien
where MaSV in (
select distinct MaSV
from KetQua
where MaMH='01' or MaMH='05')
--74.Trong mỗi sinh viên cho biết môn có điểm thi lớn nhất.
Thông tin gồm: mã sinh viên, tên sinh viên, tên môn, điểm.
select *
from(select DSSinhVien.MaSV, TenSV, TenMH, max(Diem)
from DSSinhVien join KetQua on DSSinhVien.MaSV = KetQua.MaSV
join DMMonHoc on KetQua.MaMH = DMMonHoc.MaMH
group by DSSinhVien.MaSV, TenSV, TenMH, Diem)
--75.Danh sách sinh viên: Không rớt lần 1 hoặc ,Không học
môn văn phạm
select *
from DSSinhVien
where MaSV in (
select MaSV
from KetQua
where LanThi=1 and Diem>=5 or MaMH not like '05')
--76.Danh sách những sinh viên khoa có 2 sinh viên nữ trở
lên
select *
from DSSinhVien
where MaKhoa in (
select MaKhoa
from DSSinhVien
where Phai=N'nữ'
group by MaKhoa
having count(distinct MaSV)>=2)
/*update tên bảng set cột = giá trị
delete from tên bảng where điều kiện
insert tên bảng(liệt kê trường) values (giá trị tương ứng)*/
--Giảm giá sách 10% cho các sách của NXB Giáo dục
update tSach set DonGiaBan=tSach.DonGiaBan*0.9
from tSach join tNhaXuatBan on
tNhaXuatBan.MaNXB=tSach.MaNXB
where TenNXB like N'%Giáo Dục'
--Thêm trường tổng tiền cho bảng tHoaDonBan rồi cập nhật
tổng tiền của hóa đơn cho trường này
alter table thoadonban
add TongTien money
update tHoaDonBan set TongTien=(select sum(SLBan*DonGiaBan)
from tChiTietHDB join tSach
on tChiTietHDB.MaSach=tSach.MaSach
where tHoaDonBan.SoHDB=tChiTietHDB.SoHDB group by
SoHDB)
select sohdb, sum(SLBan*DonGiaBan) from tChiTietHDB join
tSach
on tChiTietHDB.MaSach=tSach.MaSach group by SoHDB
--Giảm 10% trên tổng hóa đơn cho các hóa đơn có trị giá trên
500000 trong tháng 9
update tHoaDonBan set TongTien=tHoaDonBan.TongTien*0.9
from tHoaDonBan
where TongTien>500000 and month(NgayBan)=3
--Xóa những hóa đơn do nhân viên 'Trần Huy' lập(lưu ý: xóa
chi tiết hóa đơn trước)
delete from tChiTietHDB from tHoaDonBan join tNhanVien on
tNhanVien.MaNV=tHoaDonBan.MaNV
where tHoaDonBan.SoHDB=tChiTietHDB.SoHDB and TenNV=N'Trần
Huy'
delete from tHoaDonBan from tNhanVien
where tNhanVien.MaNV=tHoaDonBan.MaNV and TenNV=N'Trần Huy'
/* 3. Cập nhật trường xếp loại cho học sinh biết: XEPLOAI
bằng:
* Lên Lớp nếu DTB>=5 và DTN >=4
* Lưu Ban nếu ngược lại */
alter table DIEM
add XEPLOAI text
update DIEM set XEPLOAI = case when DTB>=5 and DTN>=4 then
'Len Lop' else 'Luu Ban' end
/* 4. Đưa kết quả thi của từng học sinh bao gồm các thông
tin: LOP, MAHS, HOTEN, NU, NAMSINH, TOAN, LY, HOA, VAN, DTN,
DTB, XEPLOAI */
select LOP, DIEM.MAHS, HO, TEN, NU, YEAR(NGAYSINH) as
NAMSINH, TOAN, LY, HOA, VAN, DTN, DTB, XEPLOAI
from DIEM join DSHS on DIEM.MAHS = DSHS.MAHS
/* 5. Đưa ra danh sách học sinh xuất sắc bao gồm các học
sinh có DTB>=8.5 và DTN>=8 với các field: LOP, MAHS, HOTEN,
NAMSINH, NU, TOAN, LY, HOA, VAN, DTN, DTB */
select LOP, DIEM.MAHS, HO, TEN, NU, YEAR(NGAYSINH) as
NAMSINH, TOAN, LY, HOA, VAN, DTN, DTB
from DIEM join DSHS on DIEM.MAHS = DSHS.MAHS
where DTB>=8.5 and DTN>=8
/* 6. Đưa ra danh sách học sinh thủ khoa bao gồm các học
sinh Lên Lớp có DTB lớn nhất với các field: LOP, MAHS,
HOTEN, NAMSINH, NU, TOAN, LY, HOA, VAN, DTB */
select LOP, DIEM.MAHS, HO, TEN, NU, YEAR(NGAYSINH) as
NAMSINH, TOAN, LY, HOA, VAN, DTB
from DIEM join DSHS on DIEM.MAHS = DSHS.MAHS
where XEPLOAI like 'Len Lop' and DTB = (select MAX(DTB) as
DTBmax from DIEM)
/*1.Đưa ra thông tin khách hàng đặt phòng gồm các field sau:
MaDK, LoaiKH, TenKH, NgaySinh,
Phai, DiaChi, DienThoai, SoPhong, LoaiPhong, NgayVao,
SoNgayO.
Trong đó Số Ngày ở = Ngày Ra – Ngày Vào*/
select tChiTietKH.MaDK, LoaiKH, TenKH, NgaySinh, Phai,
DiaChi, DienThoai, SoPhong, LoaiPhong, NgayVao,
DATEDIFF(DAY, NgayVao, NgayRa) as SoNgayO
from tChiTietKH join tDangKy on tChiTietKH.MaDK=tDangKy.MaDK
/*2.Đưa ra thông tin khách hàng như câu 1 cho các khách hàng
nữ và địa chỉ ở Hà Nội*/
select tChiTietKH.MaDK, LoaiKH, TenKH, NgaySinh, Phai,
DiaChi, DienThoai, SoPhong, LoaiPhong, NgayVao,
DATEDIFF(DAY, NgayVao, NgayRa) as SoNgayO
from tChiTietKH join tDangKy on tChiTietKH.MaDK=tDangKy.MaDK
where Phai=N'true' and DiaChi=N'Hà Nội'
/*1.Đưa thông tin về cước phí vận tải gồm SoXe, MaLoTrinh,
SoLuongVT, NgayDi, NgayDen,
ThoiGianVT, CuocPhi, Thuong. Trong đó:
• ThoiGianVT: là 1 nếu vận chuyển trong ngày, là
(NgayDen-NgayDi) trong trường hợp ngược
lại.
• CuocPhi: là SoLuongVT x DonGia x 105% nếu SoLuongVT
nhiều hơn TrongTaiQD, là
SoLuongVT x DonGia trong trường hợp ngược lại.
• Thuong: là 5% của CuocPhi nếu ThoiGianVT vuot
ThoiGianQD, là 0 trong trường hợp ngược
lại.*/
select SoXe, MaLoTrinh, SoLuongVT, NgayDi, NgayDen,
ThoiGianVT, CuocPhi,
case
when ThoiGianVT < ThoiGianQD then SUM(0.05*CuocPhi)
else 0
end as Thuong
into CuocPhi
from (select SoXe, MaLoTrinh, SoLuongVT, NgayDi, NgayDen,
ThoiGianQD, ThoiGianVT,
case
when SoLuongVT > TrongTaiQD then
SUM(SoLuongVT*DonGia*1.05)
else SUM(SoLuongVT*DonGia)
end as CuocPhi
from (select SoXe, ChiTietVanTai.MaLoTrinh, SoLuongVT,
NgayDi, NgayDen, MaTrongTai, DonGia, ThoiGianQD,
case
when day(NgayDen) = day(NgayDi) then 1
else day(NgayDen) - day(NgayDi)
end as ThoiGianVT
from ChiTietVanTai join LoTrinh on ChiTietVanTai.MaLoTrinh =
LoTrinh.MaLoTrinh) A join TrongTai on A.MaTrongTai =
TrongTai.MaTrongTai
group by SoXe, MaLoTrinh, SoLuongVT, NgayDi, NgayDen,
ThoiGianQD, ThoiGianVT, TrongTaiQD) B
group by SoXe, MaLoTrinh, SoLuongVT, NgayDi, NgayDen,
ThoiGianVT, CuocPhi, ThoiGianQD
/*2.Đưa thông tin chi tiết về cước phí gồm SoXe, TenLoTrinh,
SoLuongVT, NgayDi, NgayDen, CuocPhi.*/
select SoXe, TenLoTrinh, SoLuongVT, NgayDi, NgayDen, CuocPhi
from CuocPhi join LoTrinh on
CuocPhi.MaLoTrinh=LoTrinh.MaLoTrinh
/*1. Đưa ra danh sách cầu thủ gồm mã cầu thủ, họ và tên,
ngày sinh của các cầu thủ
có mã câu lạc bộ là MachesterUnited */
select CauThuID, HoVaTen, NGAYSINH
from CAUTHU join CAULACBO on
CAUTHU.CauLacBoID=CAULACBO.CauLacBoID
where CAULACBO.CauLacBoID='101'
/*2.Đưa ra danh sách cầu thủ gồm mã cầu thủ, họ và tên, ngày
sinh,
của các cầu thủ được huấn luyện viên có mã HLV001 huấn
luyện */
select CauThuID, HoVaTen, NGAYSINH
from CAUTHU join CAULACBO on
CAUTHU.CauLacBoID=CAULACBO.CauLacBoID
where CAULACBO.HuanLuyenVienID='5001'
/*3.Đưa ra Mã câu lạc bộ, tên câu lạc bộ, số cầu thủ của mỗi
câu lạc bộ */
select CAULACBO.CauLacBoID, TenCLB, COUNT(CauThuID) as N'Số
cầu thủ'
from CAUTHU join CAULACBO on
CAUTHU.CauLacBoID=CAULACBO.CauLacBoID
group by CAULACBO.CauLacBoID, TenCLB
/*4.Đưa ra danh sách cầu thủ ghi nhiều bàn thắng nhất và nhì
gồm thông tin
gồm mã cầu thủ, họ và tên, ngày sinh, số bàn thắng */
select TOP(2) CAUTHU.CauThuID, HoVaTen, NGAYSINH,
count(CAUTHU.CauThuID) as Sobanthang
from TRANDAU_GHIBAN join CAUTHU on
TRANDAU_GHIBAN.CauThuID=CAUTHU.CauThuID
group by CAUTHU.CauThuID, HoVaTen, NGAYSINH
order by count(TRANDAU_GHIBAN.CauThuID) desc
/*5.Đưa ra câu lạc bộ gồm mã câu lạc bộ, tên câu lạc bộ mà
câu lạc bộ đó
có cầu thủ là người Anh và có cầu thủ là người Ý */
select CAULACBO.CauLacBoID, TenCLB
from CAUTHU join CAULACBO on
CAUTHU.CauLacBoID=CAULACBO.CauLacBoID
where QuocTich='England' or QuocTich='Italy'
/*6.Thêm một trường SoCauthu vào bảng Câu lạc bộ, cập nhật
số cầu thủ của câu lạc bộ cho trường này */
alter table CAULACBO
add SoCauThu tinyint
update CAULACBO
SET SoCauThu = SoCT
from (select CauLacBoID, count(CauThuID) as SoCT
from CAUTHU
group by CauLacBoID) A
where CAULACBO.CauLacBoID = A.CauLacBoID
from SANPHAM
/*2. In ra danh sách các sản phẩm chỉ lấy (MASP, TENSP) có
đơn vị tính là “cay”, ”quyen”*/
from SANPHAM
where DVT='cay' or DVT='quyen'
from SANPHAM
from SANPHAM
from SANPHAM
/*6. In ra các số hóa đơn, trị giá hóa đơn bán ra trong ngày
1/1/2007 và ngày 2/1/2007.*/
/*7.In ra các số hóa đơn, trị giá hóa đơn trong tháng
1/2007,
sắp xếp theo ngày (tăng dần) và trị giá của hóa đơn
(giảm dần).*/
from HOADON
where NGHD='1/1/2007'
/*9. In ra số hóa đơn, trị giá các hóa đơn do nhân viên có
tên “Nguyen Van B” lập trong ngày 28/10/2006.*/
intersect
from SANPHAM
where not exists (select CTHD.SL
from SANPHAM
from SANPHAM
/*18. Tìm số hóa đơn đã mua tất cả các sản phẩm do Singapore
sản xuất.*/
SELECT SOHD
FROM HOADON
WHERE
NOT EXISTS
SELECT *
FROM SANPHAM
SELECT masp
FROM CTHD
/*19. Tìm số hóa đơn trong năm 2006 đã mua ít nhất tất cả
các sản phẩm do Singapore sản xuất.*/
SELECT SOHD
FROM HOADON
WHERE year(NGHD)=2006
SELECT *
FROM SANPHAM
SELECT masp
FROM CTHD
/*20. Có bao nhiêu hóa đơn không phải của khách hàng đăng ký
thành viên mua?*/
from HOADON
/*21. Có bao nhiêu sản phẩm khác nhau được bán ra trong năm
2006.*/
where year(NGHD)=2006
/*22. Cho biết trị giá hóa đơn cao nhất, thấp nhất là bao
nhiêu ?*/
select MAX(TRIGIA) as Max, MIN(TRIGIA) as Min
from HOADON
/*23. Trị giá trung bình của tất cả các hóa đơn được bán ra
trong năm 2006 là bao nhiêu?*/
from HOADON
where year(NGHD)=2006
from HOADON
where year(NGHD)=2006
/*25. Tìm số hóa đơn có trị giá cao nhất trong năm 2006.*/
select SOHD
from HOADON
/*26. Tìm họ tên khách hàng đã mua hóa đơn có trị giá cao
nhất trong năm 2006.*/
select HOTEN
from KHACHHANG
/*28. In ra danh sách các sản phẩm (MASP, TENSP) có giá bán
bằng 1 trong 3 mức giá cao nhất.*/
FROM SANPHAM
WHERE GIA IN
FROM SANPHAM sp
có giá bằng 1 trong 3 mức giá cao nhất (của tất cả các
sản phẩm).*/
SELECT SANPHAM.MASP, SANPHAM.TENSP
FROM SANPHAM
AND
SANPHAM.GIA IN
FROM SANPHAM sp
có giá bằng 1 trong 3 mức giá cao nhất (của sản phẩm
do “Trung Quoc” sản xuất).*/
FROM SANPHAM
AND
SANPHAM.GIA IN
(
SELECT DISTINCT TOP 3 sp.GIA
FROM SANPHAM sp
from KHACHHANG
from SANPHAM
/*33. Tính tổng số sản phẩm của từng nước sản xuất.*/
from SANPHAM
group by NUOCSX
/*34. Với từng nước sản xuất, tìm giá bán cao nhất, thấp
nhất, trung bình của các sản phẩm.*/
select NUOCSX, MAX(GIA) as CaoNhat, MIN(GIA) as ThapNhat,
AVG(GIA) as TrungBinh
from SANPHAM
group by NUOCSX
from HOADON
group by NGHD
/*36. Tính tổng số lượng của từng sản phẩm bán ra trong
tháng 10/2006.*/
group by MASP
/*37. Tính doanh thu bán hàng của từng tháng trong năm
2006.*/
from HOADON
where year(NGHD)=2006
group by month(NGHD)
/*38. Tìm hóa đơn có mua ít nhất 4 sản phẩm khác nhau.*/
select SOHD, count(MASP) as SL
from CTHD
group by SOHD
having count(MASP)>=4
/*39. Tìm hóa đơn có mua 3 sản phẩm do “Viet Nam” sản xuất
(3 sản phẩm khác nhau).*/
group by SOHD
having count(CTHD.MASP)=3
/*40. Tìm khách hàng (MAKH, HOTEN) có số lần mua hàng nhiều
nhất.*/
/*41. Tháng mấy trong năm 2006, doanh số bán hàng cao nhất ?
*/
SELECT MONTH(hd2.NGHD)
FROM HOADON hd2
WHERE year(hd2.NGHD)=2006
GROUP BY MONTH(hd2.NGHD)
HAVING SUM(hd2.TRIGIA)>=ALL
SELECT sum(hd.TRIGIA)
FROM HOADON hd
GROUP BY month(hd.NGHD)
SELECT sum(ct.SL)
FROM CTHD ct, HOADON hd
GROUP BY ct.MASP
/*43. *Mỗi nước sản xuất, tìm sản phẩm (MASP,TENSP) có giá
bán cao nhất.*/
FROM SANPHAM sp
/*44. Tìm nước sản xuất ít nhất 3 sản phẩm có giá bán khác
nhau.*/
SELECT sp.NUOCSX
FROM SANPHAM sp
GROUP BY sp.NUOCSX
HAVING COUNT(HD1.SOHD)>=
ALL(
SELECT count(hd.SOHD)
FROM
FROM KHACHHANG kh
GROUP BY hd.MAKH