SlideShare a Scribd company logo
1 of 13
Download to read offline
BÀI TẬP SQL 1
Database
use BANHANG_TuNghia
-- Tao bang Khach Hang
create table KHACHHANG(
MaKhachHang char(10) not null primary key,
TenCongTy nvarchar(100),
TenGiaoDich nvarchar(100),
DiaChi nvarchar(255),
email char(50),
DienThoai char(12),
fax char(15)
)
-- Tao bang Don Dat Hang
create table DONDATHANG(
SoHoaDon money not null primary key,
MaKhachHang char(10) not null,
MaNhanVien char(10) not null,
NgayDatHang date not null,
NgayGiaoHang date,
NgayChuyenHang date,
NoiGiaoHang nvarchar(255)
)
-- Tao bang Nhan Vien
create table NHANVIEN(
MaNhanVien char(10) not null primary key,
Ho nvarchar(50) not null,
Ten nvarchar(100) not null,
NgaySinh date,
NgayLamViec date,
DiaChi nvarchar(255),
DienThoai char(12),
LuongCoBan money,
PhuCap money
)
-- Tao bang nha cung cap
create table NHACUNGCAP(
MaCongTy char(10) not null primary key,
TenCongTy nvarchar(100) not null,
TenGiaoDich nvarchar(100),
DiaChi nvarchar(255),
DienThoai char(12),
fax char(15),
email char(50)
)
-- Tao Bang Chi Tiet Dat Hang
create table CHITIETDATHANG(
SoHoaDon money not null,
MaHang char(10) not null,
GiaBan money,
SoLuong integer,
MucGiamGia money,
constraint pk_CTDH primary key (SoHoaDon, MaHang)
)
-- Tao bang Mat Hang
create table MATHANG(
MaHang char(10) not null primary key,
TenHang nvarchar(100) not null,
MaCongTy char(10) not null,
MaLoaiHang char(10) not null,
SoLuong integer,
DonViTinh char(20),
GiaHang money
)
-- Tao bang loai hang
create table LOAIHANG(
MaLoaiHang char(10) not null primary key,
TenLoaiHang nvarchar(100) not null
)
-- Them quan he giua KHACHHANG va DONDATHANG
alter table DONDATHANG
add
constraint fk_KH_DDH
foreign key(MaKhachHang)
references KHACHHANG(MaKhachHang)
-- Them quan he giua DONDATHANG va NHANVIEN
alter table DONDATHANG
add
constraint fk_DDH_NV
foreign key(MaNhanVien)
references NHANVIEN(MaNhanVien)
-- Them quan He Giua DONDATHANG va CHITIETDATHANG
alter table CHITIETDATHANG
add
constraint fk_DDH_CTDH
foreign key(SoHoaDon)
references DONDATHANG(SoHoaDon)
-- Them quan he giua CHITIETDATHANG va MATHANG
alter table CHITIETDATHANG
add
constraint fk_MT_CTDH
foreign key(MaHang)
references MATHANG(MaHang)
-- Khoa Ngoai giua Nha cung cap va Mat Hang
alter table MATHANG
add
constraint fk_NCC_MH
foreign key(MaCongTy)
references NHACUNGCAP(MaCongTy)
-- Khoa Ngoai giua MATHANG va LOAIHANG
alter table MATHANG
add
constraint fk_MH_LH
foreign key(MaLoaiHang)
references LOAIHANG(MaLoaiHang)
-- Bài 3 : Bổ sung ràng buộc thiết lặp mặc định bằng 1 cho cột SoLuong
alter table CHITIETDATHANG
add constraint default_sl default(1) for SoLuong
-- bằng 0 cho cột MucGiamGia trong bản CHITIETDONHANG
alter table CHITIETDATHANG
add constraint default_mgg default(0) for MucGiamGia
-- Bài 4: Bổ sung cho bảng DONDATHANG rang buộc kiểm tra NgayGiaoHang và
NgayChuyenHang
-- phải sau hoặc bằng NgayDatHang
alter table DONDATHANG
add
constraint check_Date
check(NgayGiaoHang>=NgayDatHang and NgayChuyenHang>=NgayDatHang)
-- Bài 5 : Bổ sung cho bảng NHANVIEN để đảm bảo nhân viên chỉ có thể làm việc
từ 18 đến 60
-- Ngày hiện tại DATE(GETDATE())
alter table NHANVIEN
add
constraint tuoi_nv
check(DATEDIFF(YEAR, NgaySinh, NgayLamViec) between 18 and 60)
alter table NHANVIEN
drop constraint tuoi_nv
--Bài 6: Câu lệnh DROP TABLE NHACUNGCAP có thực hiện được không
-- Trả lời : Không vì NHACUNGCAP đang được MATHANG tham chiếu
--Bài 7: Cho khung nhìn được định nghĩa như sau:
create view view_DonHang
as
select dbo.DONDATHANG.SoHoaDon, MaKhachHang, MaNhanVien, NgayDatHang,
NgayGiaoHang, NgayChuyenHang
NoiGiaoHang, MaHang, GiaBan, SoLuong, MucGiamGia
from dbo.DONDATHANG inner join dbo.CHITIETDATHANG
on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon
-- Có thể thông qua khung nhìn này để bổ sung dữ liệu cho bảng DONADATHANG
được không ?
-- Trả lời : Không.
-- Có thể thông qua khung nhìn này để bổ xung dữ liệu cho bảng CHITIETDONHANG
được không?
-- Trả lời: Không.
-- Có thể qua khung nhìn này để xóa hay cập nhập dữ liệu trong bảng DONDATHANG
được không
-- Trả lời : Có thể cập nhập, Không thể xóa
-- Có thể qua khung nhìn này để cập nhập dữ liệu trong bảng CHITIETDONHANG
được không?
-- Trả lời : Có
-- Nhập dữ liệu cho bảng KHACHHANG
insert into KHACHHANG values('KH001',N'Điện Toán Sài Gòn','CINOTEC',N'43 Yết
Kiêu P6 Q3 TP HCM',null,'7931752',null)
insert into KHACHHANG values('KH002',N'Vật Tư Thiết Bị GTVT','COMECO',N'226 An
Dương Vương P11 Q11 TP HCM',null,'8456781',null)
insert into KHACHHANG values('KH003',N'Phát Hành Sách Sài Gòn','FAHASA',N'12
Thuận Kiều Q5 TP HCM',null,'8452792',null)
insert into KHACHHANG values('KH004',N'Dịch Vụ Đầu Tư Nước Ngoài','FISC',N'31
Trương Định P6 Q1 TP HCM',null,'8458247',null)
insert into KHACHHANG values('KH005',N'Hừng Sáng','HUNSAN',N'175 Lý Thường
Kiệt',null,'5465487',null)
insert into KHACHHANG values('KH006',N'Bột Giặt LIX','LIXCO',N'79 Bàn Cờ P3 Q5
TP HCM',null,'8952187',null)
-- Nhập dữ liệu bảng NHANVIEN
insert into NHANVIEN values('NV001',N'Nguyễn Ngọc',N'Nga',CONVERT(date,
'10/12/64', 3),convert(date, '13/07/04' , 3),N'13 Hùng
Vương','0909123233',4000000,1200000)
insert into NHANVIEN values('NV002',N'Hà Vĩnh',N'Phát',CONVERT(date,
'07/12/79', 3),convert(date, '13/06/06' , 3),N'89 Đồng
Khởi',null,2800000,1000000)
insert into NHANVIEN values('NV003',N'Nguyễn Kim',N'Ngọc',CONVERT(date,
'25/12/80', 3),convert(date, '01/09/09' , 3),N'187 Hậu
Giang','0935123789',2100000,null)
insert into NHANVIEN values('NV004',N'Trương Duy',N'Hùng',CONVERT(date,
'10/10/86', 3),convert(date, '24/04/11' , 3),N'77 Trương
Đình','01227678768',1900000,null)
insert into NHANVIEN values('NV005',N'Lê Văn',N'Hùng',CONVERT(date,
'06/03/57', 3),convert(date, '13/07/04' , 3),N'13 Hùng
Vương','0909123233',4700000,1800000)
-- Nhâp dữ liệu cho bảng DONDATHANG
insert into DONDATHANG values(10148,'KH004','NV001',convert(date, '10/01/11' ,
3),null,null,null)
insert into DONDATHANG
values(10150,'KH005','NV004',convert(date,'05/05/11',3),null,null,null)
insert into DONDATHANG
values(10156,'KH004','NV004',convert(date,'12/01/11',3),null,null,null)
insert into DONDATHANG
values(10157,'KH002','NV003',convert(date,'04/07/11',3),null,null,null)
insert into DONDATHANG
values(10226,'KH003','NV003',convert(date,'11/08/11',3),convert(date,'11/09/11
',3),null,N'12 Thuận Kiều Q5 TP HCM')
-- Nhập dữ liệu cho bảng NHACUNGCAP
insert into NHACUNGCAP values('CC001',N'Bột giặt LIX','LIXCO',N'79 Bàn Cờ P3
Q5 TP HCM','8952187',null,null)
insert into NHACUNGCAP values('CC002',N'Thủy Sản Xuất Khẩu','SAFICO',N'47 Bãi
Sậy P1 Q11 TP HCM',null,null,null)
insert into NHACUNGCAP values('CC003',N'Vàng Bạc Đá Quý Sài Gòn','SJC',N'350
CMT8 P12 Q3 TP HCM','8543543',null,null)
insert into NHACUNGCAP values('CC004',N'Thương Mại Tấn Phát','TAFACO',N'4 Trần
Phú Q5 TP HCM','8754875',null,null)
insert into NHACUNGCAP values('CC005',N'Dịch Vụ Vận Tải','TRANACO',N'156 Lê
Đại Thành P7 Q10 TP HCM','8654635',null,null)
insert into NHACUNGCAP values('CC006',N'Nước Giải Khát Sài Gòn','SABICO',N'343
Nhật Tảo Q10',null,null,null)
-- Nhập dữ liệu cho bảng LOAIHANG
insert into LOAIHANG values('1',N'Thực phẩm')
insert into LOAIHANG values('2',N'Nước uống')
insert into LOAIHANG values('3',N'Hoa quả')
insert into LOAIHANG values('4',N'May mặc')
insert into LOAIHANG values('5',N'Gia dụng')
-- Nhập dữ liệu cho bảng MATHANG
insert into MATHANG values('MH001',N'Rượu','CC006','2',4,N'chai',2305000)
insert into MATHANG values('MH002',N'Gia vị','CC004','1',2,N'thùng',400000)
insert into MATHANG values('MH003',N'Táo','CC005','3',28,N'kg',50000)
insert into MATHANG values('MH004',N'Cá hộp','CC002','1',5,N'thùng',650000)
insert into MATHANG values('MH005',N'Áo Việt
Tiến','CC004','4',60,N'cái',203000)
insert into MATHANG values('MH006',N'Bột giặt','CC001','5',9,N'thùng',509000)
-- Nhập dữ liệu cho bảng CHITIETDATHANG
insert into CHITIETDATHANG values(10148,'MH003',57000,20,0)
insert into CHITIETDATHANG values(10148,'MH004',720000,1,0)
insert into CHITIETDATHANG values(10150,'MH002',430000,1,0)
insert into CHITIETDATHANG values(10157,'MH001',2700000,2,0)
insert into CHITIETDATHANG values(10157,'MH006',530000,2,0)
insert into CHITIETDATHANG values(10226,'MH004',720000,2,2)
--2.1 Cho biết danh sách các đối tác cung cấp hàng cho công ty.
select * from NHACUNGCAP
--2.2 Mã hàng, tên hàng và số lượng của các mặt hàng hiện có trong công ty.
select MaHang, TenHang, SoLuong from dbo.MATHANG
--2.3 Họ tên, địa chỉ và năm bắt đầu làm việc của các nhân viên trong công ty.
select Ho + ' ' + Ten as HọTên, DiaChi, year(NgayLamViec) as NămLàmViệc
from dbo.NHANVIEN
--2.4 Địa chỉ và điện thoại của nhà cung cấp có tên giao dịch TAFACO là gì ?
select DiaChi, DienThoai
from dbo.NHACUNGCAP
where TenGiaoDich = 'TAFACO'
--2.5 Cho biết mã và tên của các mặt hàng có giá lớn hơn 100000 và số lượng
hiện có ít hơn 50
select MaHang, TenHang
from dbo.MATHANG
where GiaHang > 100000 and SoLuong <50
--2.6 Cho biết mỗi mặt hàng trong công ty do ai cung cấp
select MaHang, TenHang, TenCongTy
from dbo.MATHANG inner join dbo.NHACUNGCAP
on dbo.MATHANG.MaCongTy = dbo.NHACUNGCAP.MaCongTy
--2.7 Công ty Dịch vụ vận tải đã cung cấp những mặt hàng nào.
select MaHang, TenHang
from dbo.MATHANG inner join dbo.NHACUNGCAP
on dbo.MATHANG.MaCongTy = dbo.NHACUNGCAP.MaCongTy
where TenCongTy = N'Dịch vụ vận tải'
--2.8 Loại hàng thực phẩm do những công ty nào cung cấp và địa chỉ của các
công ty đó là gì?
select distinct TenCongTy, DiaChi
from dbo.NHACUNGCAP inner join dbo.MATHANG
on dbo.NHACUNGCAP.MaCongTy = dbo.MATHANG.MaCongTy
inner join dbo.LOAIHANG
on dbo.MATHANG.MaLoaiHang = dbo.LOAIHANG.MaLoaiHang
where TenLoaiHang = N'Thực phẩm'
--2.9 Những khách hàng nào (tên giao dịch) đã đặt mua mặt hàng Cá hộp của công
ty?
select TenGiaoDich
from dbo.KHACHHANG inner join dbo.DONDATHANG
on dbo.KHACHHANG.MaKhachHang = dbo.DONDATHANG.MaKhachHang
inner join dbo.CHITIETDATHANG
on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon
inner join dbo.MATHANG
on dbo.CHITIETDATHANG.MaHang = dbo.MATHANG.MaHang
where TenHang = N'Cá hộp'
--2.10 Đơn đặt hàng số 10148 do ai đặt và do nhân viên nào lập, thời gian và
địa điểm giao hàng là ở đâu?
select TenGiaoDich, Ho + ' ' + Ten as NhanVienLap, NgayGiaoHang, NoiGiaoHang
from dbo.KHACHHANG inner join dbo.DONDATHANG
on dbo.KHACHHANG.MaKhachHang = dbo.DONDATHANG.MaKhachHang
inner join dbo.NHANVIEN
on dbo.DONDATHANG.MaNhanVien = dbo.NHANVIEN.MaNhanVien
where SoHoaDon = 10148
--2.11 Hãy cho biết số tiền lương mà công ty phải trả cho mỗi nhân viên là bao
nhiêu
-- (lương = lương cơ bản + phụ cấp)
select MaNhanVien, Ho + ' ' + Ten, (LuongCoBan+isnull(PhuCap,0)) as Lương
from dbo.NHANVIEN
--2.12 Trong đơn đặt hàng số 10266 đặt mua những mặt hàng nào và số tiền mà
khách phải trả cho mỗi mặt
--hàng là bao nhiêu ( số tiền phải được tính theo công thức SoLuong*GiaBan-
SoLuong*GiaBan*MucGiamGia/100)
select TenHang, sum(dbo.CHITIETDATHANG.SoLuong*GiaBan -
dbo.CHITIETDATHANG.SoLuong*GiaBan*MucGiamGia/100) as TienPhaiTra
from dbo.MATHANG inner join dbo.CHITIETDATHANG
on dbo.MATHANG.MaHang = dbo.CHITIETDATHANG.MaHang
group by TenHang
--2.13 Hãy cho biết có những khách hàng nào lại chính là đối tác cung cấp hàng
của công ty(tức là có cùng tên giao dịch)
select MaKhachHang, TenGiaoDich
from dbo.KHACHHANG
where TenGiaoDich in (
select TenGiaoDich from dbo.NHACUNGCAP
)
--2.14 Trong công ty có những nhân viên nào có cùng ngày vào làm
select * from nhanvien
where NgayLamViec in (
select NgayLamViec
from dbo.NHANVIEN
group by NgayLamViec
having count(MaNhanVien) > =2
)
--2.15 Những đơn đặt hàng nào yêu cầu giao hàng ngay tại công ty đặt hàng và
những đơn
--đặt hàng đó là của công ty nào
select TenCongTy
from dbo.KHACHHANG inner join dbo.DONDATHANG
on dbo.KHACHHANG.MaKhachHang = dbo.DONDATHANG.MaKhachHang
where NoiGiaoHang = DiaChi
--2.16 Cho biết tên công ty, tên giao dịch, địa chỉ và điện thoại của khách
hàng và các nhà
--cung cấp hàng cho công ty
select TenCongTy, TenGiaoDich, DiaChi, DienThoai
from dbo.KHACHHANG
union
select TenCongTy, TenGiaoDich, DiaChi, DienThoai
from dbo.NHACUNGCAP
--2.17 Những mặt hàng nào chưa từng được khách hàng đặt mua.
select MaHang, TenHang
from dbo.MATHANG
where MaHang not in (
select distinct MaHang from dbo.CHITIETDATHANG
)
--2.18 Những nhân viên nào của công ty chưa từng lập bất kỳ một hóa đơn đặt
hàng nào?
select MaNhanVien, Ho + ' ' + Ten as HoTen
from dbo.NHANVIEN
where MaNhanVien not in (
select distinct MaNhanVien
from dbo.DONDATHANG
)
--2.19 Những nhân viên nào của công ty có lương cơ bản cao nhất?
select top 3 *
from dbo.NHANVIEN
order by LuongCoBan desc
--2.20 Tổng số tiền mà khách hàng phải trả cho mỗi đơn đặt hàng là bao nhiêu
select KHACHHANG.MaKhachHang, TenGiaoDich, dbo.DONDATHANG.SoHoaDon,
sum(GiaBan*SoLuong- GiaBan*SoLuong*MucGiamGia/100) as TongTien
from dbo.KHACHHANG inner join dbo.DONDATHANG
on dbo.KHACHHANG.MaKhachHang = dbo.DONDATHANG.MaKhachHang
inner join dbo.CHITIETDATHANG
on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon
group by KHACHHANG.MaKhachHang, TenGiaoDich, dbo.DONDATHANG.SoHoaDon
--2.21 Trong năm 2011, Những mặt hàng nào đặt mua đúng một lần.
select dbo.MATHANG.MaHang, TenHang
from dbo.MATHANG inner join dbo.CHITIETDATHANG
on dbo.MATHANG.MaHang = dbo.CHITIETDATHANG.MaHang
inner join dbo.DONDATHANG
on dbo.CHITIETDATHANG.SoHoaDon = dbo.DONDATHANG.SoHoaDon
where year(NgayDatHang)=2011
group by dbo.MATHANG.MaHang, TenHang
having count(dbo.CHITIETDATHANG.SoHoaDon) = 1
--2.22 Hãy cho biết mỗi một khách hàng đã phải bỏ ra bao nhiêu tiền để đặt mua
hàng của công ty?
select dbo.KHACHHANG.MaKhachHang, TenGiaoDich, sum(GiaBan*SoLuong -
GiaBan*SoLuong*MucGiamGia/100)as TongTien
from dbo.KHACHHANG inner join dbo.DONDATHANG
on dbo.KHACHHANG.MaKhachHang = dbo.DONDATHANG.MaKhachHang
inner join dbo.CHITIETDATHANG
on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon
group by dbo.KHACHHANG.MaKhachHang, TenGiaoDich
--2.23 Mỗi một nhân viên của công ty đã lập bao nhiêu đơn đặt hàng
--(nếu nhân viên chưa hề lập một hoá đơn nào thì cho kết quả là 0).
select dbo.NHANVIEN.MaNhanVien, Ho + ' ' + Ten as HoTen, count(SoHoaDon) as
SoHoaDon
from dbo.NHANVIEN left join dbo.DONDATHANG
on dbo.NHANVIEN.MaNhanVien = dbo.DONDATHANG.MaNhanVien
group by dbo.NHANVIEN.MaNhanVien, Ho + ' ' + Ten
--2.24 Cho biết tổng số tiền hàng mà cửa hàng thu được trong mỗi tháng của năm
2003
--(thời gian được tính theo ngày đặt hàng).
select month(NgayDatHang) as Thang, sum(GiaBan*SoLuong -
GiaBan*SoLuong*MucGiamGia/100) as TongTien
from dbo.DONDATHANG inner join dbo.CHITIETDATHANG
on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon
group by month(NgayDatHang)
--2.25 Hãy cho biết tổng số tiền lời mà công ty thu được từ mỗi mặt hàng trong
năm 2011.
select TenHang, sum(GiaBan*dbo.CHITIETDATHANG.SoLuong -
GiaBan*dbo.CHITIETDATHANG.SoLuong*MucGiamGia/100 -
dbo.CHITIETDATHANG.SoLuong*GiaHang) as TienLoi
from dbo.MATHANG inner join dbo.CHITIETDATHANG
on dbo.MATHANG.MaHang = dbo.CHITIETDATHANG.MaHang
inner join dbo.DONDATHANG
on dbo.CHITIETDATHANG.SoHoaDon = dbo.DONDATHANG.SoHoaDon
where year(NgayDatHang) = 2011
group by TenHang
--2.26 Hãy cho biết tổng số lượng hàng của mỗi mặt hàng mà công ty đã có (tổng
số
--lượng hàng hiện có và đã bán).
select t.TenHang, sum(t.Soluong) as TongSoLuong
from(
select TenHang, SoLuong
from dbo.MATHANG
union all
select TenHang, dbo.CHITIETDATHANG.SoLuong
from dbo.MATHANG inner join dbo.CHITIETDATHANG
on dbo.MATHANG.MaHang = dbo.CHITIETDATHANG.MaHang
) as t
group by t.TenHang
--2.27 Nhân viên nào của công ty bán được số lượng hàng nhiều nhất và số lượng
hàng bán được
--của những nhân viên này là bao nhiêu?
select top 1 dbo.NHANVIEN.MaNhanVien, Ho + ' ' + Ten as HoTen, sum(SoLuong) as
TongSoLuong
from dbo.NHANVIEN inner join dbo.DONDATHANG
on dbo.NHANVIEN.MaNhanVien = dbo.DONDATHANG.MaNhanVien
inner join dbo.CHITIETDATHANG
on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon
group by dbo.NHANVIEN.MaNhanVien, Ho + ' ' + Ten
order by sum(SoLuong) desc
--2.28 Đơn đặt hàng nào có số lượng hàng được đặt mua ít nhất?
select top 1 SoHoaDon, sum(SoLuong) as SoLuongHang
from dbo.CHITIETDATHANG
group by SoHoaDon
order by sum(SoLuong)
--2.29 Số tiền nhiều nhất mà mỗi khách hàng đã từng bỏ ra để đặt hàng trong
các đơn
-- đặt hàng là bao nhiêu?
select dbo.KHACHHANG.MaKhachHang, TenGiaoDich, dbo.DONDATHANG.SoHoaDon,
max((GiaBan*SoLuong - GiaBan*SoLuong*MucGiamGia/100)) as Tien
from dbo.KHACHHANG inner join dbo.DONDATHANG
on dbo.KHACHHANG.MaKhachHang = dbo.DONDATHANG.MaKhachHang
inner join dbo.CHITIETDATHANG
on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon
group by dbo.KHACHHANG.MaKhachHang, TenGiaoDich, dbo.DONDATHANG.SoHoaDon
--2.30 Mỗi một đơn đặt hàng đặt mua những mặt hàng nào và tổng số tiền mà mỗi
đơn
-- đặt hàng phải trả là bao nhiêu?
select dbo.CHITIETDATHANG.SoHoaDon, TenHang, TongTien
from dbo.CHITIETDATHANG inner join dbo.MATHANG
on dbo.CHITIETDATHANG.MaHang = dbo.MATHANG.MaHang
left join
(select SoHoaDon , sum(GiaBan*SoLuong - GiaBan*SoLuong*MucGiamGia/100)
as TongTien
from dbo.CHITIETDATHANG
group by SoHoaDon) as t
on CHITIETDATHANG.SoHoaDon = t.SoHoaDon
--2.31 Hãy cho biết mỗi một loại hàng bao gồm những mặt hàng nào,
--tổng số lượng hàng của mỗi loại và tổng số lượng của tất cả các
--mặt hàng hiện có trong công ty là bao nhiêu?
select dbo.LOAIHANG.TenLoaiHang, TenHang, TongMoiLoai
from dbo.LOAIHANG inner join dbo.MATHANG
on dbo.LOAIHANG.MaLoaiHang = dbo.MATHANG.MaLoaiHang
left join (
select TenLoaiHang, sum(SoLuong) as TongMoiLoai
from dbo.LOAIHANG inner join dbo.MATHANG
on dbo.LOAIHANG.MaLoaiHang = dbo.MATHANG.MaLoaiHang
group by TenLoaiHang
) as t
on dbo.LOAIHANG.TenLoaiHang = t.TenLoaiHang
order by dbo.LOAIHANG.TenLoaiHang
compute sum(TongMoiLoai)
--2.32 Thống kê xem trong năm 2011, mỗi một mặt hàng trong mỗi tháng và trong
cả năm bán được
-- với số lượng bao nhiêu?
-- Yêu cầu: Kết quả được hiển thị dưới dạng bảng, hai cột đầu là mã hàng và
tên hàng,
-- các cột còn lại tương ứng với các tháng từ 1 đến 12 và cả năm. Như vậy mỗi
dòng trong
-- kết quả cho biết số lượng hàng bán được mỗi tháng và trong cả năm của mỗi
mặt hàng.
select mh.MaHang, TenHang,
sum(case month(NgayDatHang) when 1 then ctdh.SoLuong else 0 end) as
Thang1,
sum(case month(NgayDatHang) when 2 then ctdh.SoLuong else 0 end) as
Thang2,
sum(case month(NgayDatHang) when 3 then ctdh.SoLuong else 0 end) as
Thang3,
sum(case month(NgayDatHang) when 4 then ctdh.SoLuong else 0 end) as
Thang4,
sum(case month(NgayDatHang) when 5 then ctdh.SoLuong else 0 end) as
Thang5,
sum(case month(NgayDatHang) when 6 then ctdh.SoLuong else 0 end) as
Thang6,
sum(case month(NgayDatHang) when 7 then ctdh.SoLuong else 0 end) as
Thang7,
sum(case month(NgayDatHang) when 8 then ctdh.SoLuong else 0 end) as
Thang8,
sum(case month(NgayDatHang) when 9 then ctdh.SoLuong else 0 end) as
Thang9,
sum(case month(NgayDatHang) when 10 then ctdh.SoLuong else 0 end) as
Thang10,
sum(case month(NgayDatHang) when 11 then ctdh.SoLuong else 0 end) as
Thang11,
sum(case month(NgayDatHang) when 12 then ctdh.SoLuong else 0 end) as
Thang12,
sum(ctdh.SoLuong) as Nam2011
from dbo.MATHANG as mh inner join dbo.CHITIETDATHANG as ctdh
on mh.MaHang = ctdh.MaHang
inner join dbo.DONDATHANG as ddh
on ctdh.SoHoaDon = ddh.SoHoaDon
where year(NgayDatHang) = 2011
group by mh.MaHang, TenHang
--2.33 Cập nhật lại giá trị trường NGAYCHUYENHANG của những bản ghi có
NGAYCHUYENHANG
-- chưa xác định (NULL) trong bảng DONDATHANG bằng với giá trị của trường
NGAYDATHANG.
update dbo.DONDATHANG
set NgayChuyenHang = NgayDatHang
where NgayChuyenHang is null
--2.34 Tăng số lượng hàng của những mặt hàng do công ty SAFICO cung cấp lên
gấp đôi.
update dbo.MATHANG
set SoLuong = 2*SoLuong
where MaCongTy in (
select MaCongTy
from dbo.NHACUNGCAP
where TenGiaoDich = 'SAFICO'
)
--2.35 Cập nhật giá trị của trường NOIGIAOHANG trong bảng DONDATHANG bằng địa
chỉ của khách hàng
-- đối với những đơn đặt hàng chưa xác định được nơi giao hàng (giá trị trường
NOIGIAOHANG bằng NULL).
create view forUpdateDiaChi
as
select NoiGiaoHang, DiaChi
from dbo.DONDATHANG inner join dbo.KHACHHANG
on dbo.DONDATHANG.MaKhachHang = dbo.KHACHHANG.MaKhachHang
update forUpdateDiaChi
set NoiGiaoHang = DiaChi
where NoiGiaoHang is null
--2.36 Cập nhật lại dữ liệu trong bảng KHACHHANG sao cho nếu tên công ty và
tên giao dịch
-- của khách hàng trùng với tên công ty và tên giao dịch của một nhà cung cấp
-- nào đó thì địa chỉ, điện thoại, fax và e-mail phải giống nhau.
create view forUpdateInfKhachHang
as
select kh.TenCongTy as khTenCongTy ,kh.TenGiaoDich as khTenGiaoDich,kh.DiaChi
as khDiaChi,
kh.DienThoai as khDienThoai, kh.email as khEmail, kh.fax as khFax,
ncc.TenGiaoDich,ncc.DiaChi, ncc.DienThoai, ncc.email, ncc.fax
from dbo.KHACHHANG as kh inner join dbo.NHACUNGCAP as ncc
on kh.TenCongTy = ncc.TenCongTy
update forUpdateInfKhachHang
set khDiaChi = DiaChi,
khDienThoai = DienThoai,
khEmail = email,
khFax = fax
where khTenGiaoDich = TenGiaoDich
--2.37 Tăng lương lên gấp rưỡi cho những nhân viên bán được số lượng hàng
nhiều hơn 10 trong năm 2011.
update dbo.NHANVIEN
set LuongCoBan = LuongCoBan*1.5
where MaNhanVien in (
select MaNhanVien
from dbo.DONDATHANG inner join dbo.CHITIETDATHANG
on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon
where year(NgayDatHang) = 2011
group by MaNhanVien
having sum(SoLuong)>10
)
--2.38 Tăng phụ cấp lên bằng 50% lương cho những nhân viên bán được hàng nhiều
nhất.
update dbo.NHANVIEN
set PhuCap = 0.5*LuongCoBan
where MaNhanVien in (
select top 3 MaNhanVien
from dbo.DONDATHANG inner join dbo.CHITIETDATHANG
on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon
group by MaNhanVien
order by sum(SoLuong)
)
--2.39 Giảm 25% lương của những nhân viên trong năm 2011 không lập được bất kỳ
đơn đặt hàng nào.
update dbo.NHANVIEN
set LuongCoBan = 0.75*LuongCoBan
where MaNhanVien not in(
select distinct MaNhanVien
from dbo.DONDATHANG
where year(NgayDatHang) = 2011
)
--2.40 Giả sử trong bảng DONDATHANG có thêm trường SOTIEN cho biết số tiền mà
khách hàng phải
-- trả trong mỗi đơn đặt hàng. Hãy tính giá trị cho trường này.
select dbo.DONDATHANG.SoHoaDon, sum(GiaBan*SoLuong -
GiaBan*SoLuong*MucGiamGia/100) as SOTIEN
from dbo.DONDATHANG inner join dbo.CHITIETDATHANG
on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon
group by dbo.DONDATHANG.SoHoaDon
--2.41 Xoá khỏi bảng NHANVIEN những nhân viên đã làm việc trong công ty quá 5
năm.
delete dbo.NHANVIEN
where datediff(year, NgayLamViec, getdate()) > 5
--2.42 Xoá những đơn đặt hàng trước năm 2010 ra khỏi cơ sở dữ liệu.
delete dbo.DONDATHANG
where year(NgayDatHang) < 2010
--2.43 Xoá khỏi bảng LOAIHANG những loại hàng hiện không có mặt hàng.
delete dbo.LOAIHANG
where MaLoaiHang not in(
select distinct MaLoaiHang
from dbo.MATHANG
)
--2.44 Xoá khỏi bảng KHACHHANG những khách hàng hiện không có bất kỳ đơn đặt
hàng nào cho công ty.
delete dbo.KHACHHANG
where MaKhachHang not in(
select distinct MaKhachHang
from dbo.DONDATHANG
)
--2.45 Xoá khỏi bảng MATHANG những mặt hàng có số lượng bằng 0 và không được
--đặt mua trong bất kỳ đơn đặt hàng nào.
delete dbo.MATHANG
where SoLuong = 0 and MaHang not in (
select distinct MaHang
from dbo.CHITIETDATHANG
)

More Related Content

What's hot

Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTBài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTMasterCode.vn
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinVõ Phúc
 
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPT
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPTBài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPT
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPTMasterCode.vn
 
Mẫu báo cáo bài tập lớn
Mẫu báo cáo bài tập lớnMẫu báo cáo bài tập lớn
Mẫu báo cáo bài tập lớnJohn MacTavish
 
Bài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệuBài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệutrieulongweb
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựleemindinh
 
Ôn thi mạng máy tính
Ôn thi mạng máy tínhÔn thi mạng máy tính
Ôn thi mạng máy tínhKinhDinhBach
 
Bai 1 tong quan ve ctdl&amp;gt
Bai 1   tong quan ve ctdl&amp;gtBai 1   tong quan ve ctdl&amp;gt
Bai 1 tong quan ve ctdl&amp;gtTrangThu251076
 
Chuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệChuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệHưởng Nguyễn
 
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐỗ Đức Hùng
 
Mô hình hóa dữ liệu mức quan niệm
Mô hình hóa dữ liệu mức quan niệm Mô hình hóa dữ liệu mức quan niệm
Mô hình hóa dữ liệu mức quan niệm nataliej4
 
4 - Phan lop du lieu-Final.pptx
4 - Phan lop du lieu-Final.pptx4 - Phan lop du lieu-Final.pptx
4 - Phan lop du lieu-Final.pptxMUyn25
 
quản trị CSDL với SQL
quản trị CSDL với SQLquản trị CSDL với SQL
quản trị CSDL với SQLCuội Chú
 
Trac nghiem dap an
Trac nghiem dap anTrac nghiem dap an
Trac nghiem dap anTrí Ibanez
 
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di độngPhân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di độngNguyễn Danh Thanh
 
Quản lý bệnh viện
Quản lý bệnh việnQuản lý bệnh viện
Quản lý bệnh việnTam Nguyen
 
Hướng dẫn sử dụng phần mềm packet tracer
Hướng dẫn sử dụng phần mềm packet tracerHướng dẫn sử dụng phần mềm packet tracer
Hướng dẫn sử dụng phần mềm packet tracerBình Tân Phú
 

What's hot (20)

Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTBài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tin
 
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPT
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPTBài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPT
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPT
 
Mẫu báo cáo bài tập lớn
Mẫu báo cáo bài tập lớnMẫu báo cáo bài tập lớn
Mẫu báo cáo bài tập lớn
 
Bài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệuBài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệu
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sự
 
Ôn thi mạng máy tính
Ôn thi mạng máy tínhÔn thi mạng máy tính
Ôn thi mạng máy tính
 
Bai 1 tong quan ve ctdl&amp;gt
Bai 1   tong quan ve ctdl&amp;gtBai 1   tong quan ve ctdl&amp;gt
Bai 1 tong quan ve ctdl&amp;gt
 
Chuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệChuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệ
 
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
 
Mô hình hóa dữ liệu mức quan niệm
Mô hình hóa dữ liệu mức quan niệm Mô hình hóa dữ liệu mức quan niệm
Mô hình hóa dữ liệu mức quan niệm
 
4 - Phan lop du lieu-Final.pptx
4 - Phan lop du lieu-Final.pptx4 - Phan lop du lieu-Final.pptx
4 - Phan lop du lieu-Final.pptx
 
quản trị CSDL với SQL
quản trị CSDL với SQLquản trị CSDL với SQL
quản trị CSDL với SQL
 
Trac nghiem dap an
Trac nghiem dap anTrac nghiem dap an
Trac nghiem dap an
 
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di độngPhân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
 
Bai giang photoshop
Bai giang photoshopBai giang photoshop
Bai giang photoshop
 
Quản lý bệnh viện
Quản lý bệnh việnQuản lý bệnh viện
Quản lý bệnh viện
 
Bài tập HTML/CSS
Bài tập HTML/CSSBài tập HTML/CSS
Bài tập HTML/CSS
 
Luận văn: Bài tập Cơ sở dữ liệu quan hệ, HAY
Luận văn: Bài tập Cơ sở dữ liệu quan hệ, HAYLuận văn: Bài tập Cơ sở dữ liệu quan hệ, HAY
Luận văn: Bài tập Cơ sở dữ liệu quan hệ, HAY
 
Hướng dẫn sử dụng phần mềm packet tracer
Hướng dẫn sử dụng phần mềm packet tracerHướng dẫn sử dụng phần mềm packet tracer
Hướng dẫn sử dụng phần mềm packet tracer
 

Viewers also liked

诗檀软件 Oracle数据块损坏知识
诗檀软件 Oracle数据块损坏知识诗檀软件 Oracle数据块损坏知识
诗檀软件 Oracle数据块损坏知识maclean liu
 
SoCool@Eu
SoCool@EuSoCool@Eu
SoCool@EuZLC
 
Turniej Szachowy Barbórka 2015
Turniej Szachowy Barbórka 2015Turniej Szachowy Barbórka 2015
Turniej Szachowy Barbórka 2015KlubSzachowyJunior
 
K4 d ws_p_longstaff_bolzano_2013
K4 d ws_p_longstaff_bolzano_2013K4 d ws_p_longstaff_bolzano_2013
K4 d ws_p_longstaff_bolzano_2013know4drr
 
copy-sample101 to foodservice
copy-sample101 to foodservicecopy-sample101 to foodservice
copy-sample101 to foodservicenexchef
 

Viewers also liked (6)

诗檀软件 Oracle数据块损坏知识
诗檀软件 Oracle数据块损坏知识诗檀软件 Oracle数据块损坏知识
诗檀软件 Oracle数据块损坏知识
 
Modul 1 kb 1
Modul 1 kb 1Modul 1 kb 1
Modul 1 kb 1
 
SoCool@Eu
SoCool@EuSoCool@Eu
SoCool@Eu
 
Turniej Szachowy Barbórka 2015
Turniej Szachowy Barbórka 2015Turniej Szachowy Barbórka 2015
Turniej Szachowy Barbórka 2015
 
K4 d ws_p_longstaff_bolzano_2013
K4 d ws_p_longstaff_bolzano_2013K4 d ws_p_longstaff_bolzano_2013
K4 d ws_p_longstaff_bolzano_2013
 
copy-sample101 to foodservice
copy-sample101 to foodservicecopy-sample101 to foodservice
copy-sample101 to foodservice
 

Similar to Bai tapsql1

bai in.docx
bai in.docxbai in.docx
bai in.docxtrantp
 
Bai tap-thuc-hanh-he-quan-tri-csdl
Bai tap-thuc-hanh-he-quan-tri-csdlBai tap-thuc-hanh-he-quan-tri-csdl
Bai tap-thuc-hanh-he-quan-tri-csdlgiang nguyen le
 
Chuong6_NgonnguSQL.pdf
Chuong6_NgonnguSQL.pdfChuong6_NgonnguSQL.pdf
Chuong6_NgonnguSQL.pdfHanaYuki19
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3pisu412
 
b34-dml-sql-190213084703.pdf
b34-dml-sql-190213084703.pdfb34-dml-sql-190213084703.pdf
b34-dml-sql-190213084703.pdfQuyVo27
 
OVERVIEW ABOUT MS SQL SERVER FOR BEGINNING
OVERVIEW ABOUT MS SQL SERVER FOR BEGINNINGOVERVIEW ABOUT MS SQL SERVER FOR BEGINNING
OVERVIEW ABOUT MS SQL SERVER FOR BEGINNINGTonMnh13
 

Similar to Bai tapsql1 (8)

Bai tap access
Bai tap accessBai tap access
Bai tap access
 
bai in.docx
bai in.docxbai in.docx
bai in.docx
 
ORACLE_ch2_SQL.pptx
ORACLE_ch2_SQL.pptxORACLE_ch2_SQL.pptx
ORACLE_ch2_SQL.pptx
 
Bai tap-thuc-hanh-he-quan-tri-csdl
Bai tap-thuc-hanh-he-quan-tri-csdlBai tap-thuc-hanh-he-quan-tri-csdl
Bai tap-thuc-hanh-he-quan-tri-csdl
 
Chuong6_NgonnguSQL.pdf
Chuong6_NgonnguSQL.pdfChuong6_NgonnguSQL.pdf
Chuong6_NgonnguSQL.pdf
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
 
b34-dml-sql-190213084703.pdf
b34-dml-sql-190213084703.pdfb34-dml-sql-190213084703.pdf
b34-dml-sql-190213084703.pdf
 
OVERVIEW ABOUT MS SQL SERVER FOR BEGINNING
OVERVIEW ABOUT MS SQL SERVER FOR BEGINNINGOVERVIEW ABOUT MS SQL SERVER FOR BEGINNING
OVERVIEW ABOUT MS SQL SERVER FOR BEGINNING
 

Bai tapsql1

  • 1. BÀI TẬP SQL 1 Database use BANHANG_TuNghia -- Tao bang Khach Hang create table KHACHHANG( MaKhachHang char(10) not null primary key, TenCongTy nvarchar(100), TenGiaoDich nvarchar(100), DiaChi nvarchar(255), email char(50), DienThoai char(12), fax char(15) ) -- Tao bang Don Dat Hang create table DONDATHANG( SoHoaDon money not null primary key, MaKhachHang char(10) not null, MaNhanVien char(10) not null, NgayDatHang date not null, NgayGiaoHang date, NgayChuyenHang date, NoiGiaoHang nvarchar(255)
  • 2. ) -- Tao bang Nhan Vien create table NHANVIEN( MaNhanVien char(10) not null primary key, Ho nvarchar(50) not null, Ten nvarchar(100) not null, NgaySinh date, NgayLamViec date, DiaChi nvarchar(255), DienThoai char(12), LuongCoBan money, PhuCap money ) -- Tao bang nha cung cap create table NHACUNGCAP( MaCongTy char(10) not null primary key, TenCongTy nvarchar(100) not null, TenGiaoDich nvarchar(100), DiaChi nvarchar(255), DienThoai char(12), fax char(15), email char(50) ) -- Tao Bang Chi Tiet Dat Hang create table CHITIETDATHANG( SoHoaDon money not null, MaHang char(10) not null, GiaBan money, SoLuong integer, MucGiamGia money, constraint pk_CTDH primary key (SoHoaDon, MaHang) ) -- Tao bang Mat Hang create table MATHANG( MaHang char(10) not null primary key, TenHang nvarchar(100) not null, MaCongTy char(10) not null, MaLoaiHang char(10) not null, SoLuong integer, DonViTinh char(20), GiaHang money ) -- Tao bang loai hang create table LOAIHANG( MaLoaiHang char(10) not null primary key, TenLoaiHang nvarchar(100) not null ) -- Them quan he giua KHACHHANG va DONDATHANG alter table DONDATHANG add
  • 3. constraint fk_KH_DDH foreign key(MaKhachHang) references KHACHHANG(MaKhachHang) -- Them quan he giua DONDATHANG va NHANVIEN alter table DONDATHANG add constraint fk_DDH_NV foreign key(MaNhanVien) references NHANVIEN(MaNhanVien) -- Them quan He Giua DONDATHANG va CHITIETDATHANG alter table CHITIETDATHANG add constraint fk_DDH_CTDH foreign key(SoHoaDon) references DONDATHANG(SoHoaDon) -- Them quan he giua CHITIETDATHANG va MATHANG alter table CHITIETDATHANG add constraint fk_MT_CTDH foreign key(MaHang) references MATHANG(MaHang) -- Khoa Ngoai giua Nha cung cap va Mat Hang alter table MATHANG add constraint fk_NCC_MH foreign key(MaCongTy) references NHACUNGCAP(MaCongTy) -- Khoa Ngoai giua MATHANG va LOAIHANG alter table MATHANG add constraint fk_MH_LH foreign key(MaLoaiHang) references LOAIHANG(MaLoaiHang) -- Bài 3 : Bổ sung ràng buộc thiết lặp mặc định bằng 1 cho cột SoLuong alter table CHITIETDATHANG add constraint default_sl default(1) for SoLuong -- bằng 0 cho cột MucGiamGia trong bản CHITIETDONHANG alter table CHITIETDATHANG add constraint default_mgg default(0) for MucGiamGia -- Bài 4: Bổ sung cho bảng DONDATHANG rang buộc kiểm tra NgayGiaoHang và NgayChuyenHang -- phải sau hoặc bằng NgayDatHang alter table DONDATHANG add constraint check_Date check(NgayGiaoHang>=NgayDatHang and NgayChuyenHang>=NgayDatHang)
  • 4. -- Bài 5 : Bổ sung cho bảng NHANVIEN để đảm bảo nhân viên chỉ có thể làm việc từ 18 đến 60 -- Ngày hiện tại DATE(GETDATE()) alter table NHANVIEN add constraint tuoi_nv check(DATEDIFF(YEAR, NgaySinh, NgayLamViec) between 18 and 60) alter table NHANVIEN drop constraint tuoi_nv --Bài 6: Câu lệnh DROP TABLE NHACUNGCAP có thực hiện được không -- Trả lời : Không vì NHACUNGCAP đang được MATHANG tham chiếu --Bài 7: Cho khung nhìn được định nghĩa như sau: create view view_DonHang as select dbo.DONDATHANG.SoHoaDon, MaKhachHang, MaNhanVien, NgayDatHang, NgayGiaoHang, NgayChuyenHang NoiGiaoHang, MaHang, GiaBan, SoLuong, MucGiamGia from dbo.DONDATHANG inner join dbo.CHITIETDATHANG on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon -- Có thể thông qua khung nhìn này để bổ sung dữ liệu cho bảng DONADATHANG được không ? -- Trả lời : Không. -- Có thể thông qua khung nhìn này để bổ xung dữ liệu cho bảng CHITIETDONHANG được không? -- Trả lời: Không. -- Có thể qua khung nhìn này để xóa hay cập nhập dữ liệu trong bảng DONDATHANG được không -- Trả lời : Có thể cập nhập, Không thể xóa -- Có thể qua khung nhìn này để cập nhập dữ liệu trong bảng CHITIETDONHANG được không? -- Trả lời : Có -- Nhập dữ liệu cho bảng KHACHHANG insert into KHACHHANG values('KH001',N'Điện Toán Sài Gòn','CINOTEC',N'43 Yết Kiêu P6 Q3 TP HCM',null,'7931752',null) insert into KHACHHANG values('KH002',N'Vật Tư Thiết Bị GTVT','COMECO',N'226 An Dương Vương P11 Q11 TP HCM',null,'8456781',null) insert into KHACHHANG values('KH003',N'Phát Hành Sách Sài Gòn','FAHASA',N'12 Thuận Kiều Q5 TP HCM',null,'8452792',null) insert into KHACHHANG values('KH004',N'Dịch Vụ Đầu Tư Nước Ngoài','FISC',N'31 Trương Định P6 Q1 TP HCM',null,'8458247',null) insert into KHACHHANG values('KH005',N'Hừng Sáng','HUNSAN',N'175 Lý Thường Kiệt',null,'5465487',null) insert into KHACHHANG values('KH006',N'Bột Giặt LIX','LIXCO',N'79 Bàn Cờ P3 Q5 TP HCM',null,'8952187',null) -- Nhập dữ liệu bảng NHANVIEN insert into NHANVIEN values('NV001',N'Nguyễn Ngọc',N'Nga',CONVERT(date, '10/12/64', 3),convert(date, '13/07/04' , 3),N'13 Hùng Vương','0909123233',4000000,1200000)
  • 5. insert into NHANVIEN values('NV002',N'Hà Vĩnh',N'Phát',CONVERT(date, '07/12/79', 3),convert(date, '13/06/06' , 3),N'89 Đồng Khởi',null,2800000,1000000) insert into NHANVIEN values('NV003',N'Nguyễn Kim',N'Ngọc',CONVERT(date, '25/12/80', 3),convert(date, '01/09/09' , 3),N'187 Hậu Giang','0935123789',2100000,null) insert into NHANVIEN values('NV004',N'Trương Duy',N'Hùng',CONVERT(date, '10/10/86', 3),convert(date, '24/04/11' , 3),N'77 Trương Đình','01227678768',1900000,null) insert into NHANVIEN values('NV005',N'Lê Văn',N'Hùng',CONVERT(date, '06/03/57', 3),convert(date, '13/07/04' , 3),N'13 Hùng Vương','0909123233',4700000,1800000) -- Nhâp dữ liệu cho bảng DONDATHANG insert into DONDATHANG values(10148,'KH004','NV001',convert(date, '10/01/11' , 3),null,null,null) insert into DONDATHANG values(10150,'KH005','NV004',convert(date,'05/05/11',3),null,null,null) insert into DONDATHANG values(10156,'KH004','NV004',convert(date,'12/01/11',3),null,null,null) insert into DONDATHANG values(10157,'KH002','NV003',convert(date,'04/07/11',3),null,null,null) insert into DONDATHANG values(10226,'KH003','NV003',convert(date,'11/08/11',3),convert(date,'11/09/11 ',3),null,N'12 Thuận Kiều Q5 TP HCM') -- Nhập dữ liệu cho bảng NHACUNGCAP insert into NHACUNGCAP values('CC001',N'Bột giặt LIX','LIXCO',N'79 Bàn Cờ P3 Q5 TP HCM','8952187',null,null) insert into NHACUNGCAP values('CC002',N'Thủy Sản Xuất Khẩu','SAFICO',N'47 Bãi Sậy P1 Q11 TP HCM',null,null,null) insert into NHACUNGCAP values('CC003',N'Vàng Bạc Đá Quý Sài Gòn','SJC',N'350 CMT8 P12 Q3 TP HCM','8543543',null,null) insert into NHACUNGCAP values('CC004',N'Thương Mại Tấn Phát','TAFACO',N'4 Trần Phú Q5 TP HCM','8754875',null,null) insert into NHACUNGCAP values('CC005',N'Dịch Vụ Vận Tải','TRANACO',N'156 Lê Đại Thành P7 Q10 TP HCM','8654635',null,null) insert into NHACUNGCAP values('CC006',N'Nước Giải Khát Sài Gòn','SABICO',N'343 Nhật Tảo Q10',null,null,null) -- Nhập dữ liệu cho bảng LOAIHANG insert into LOAIHANG values('1',N'Thực phẩm') insert into LOAIHANG values('2',N'Nước uống') insert into LOAIHANG values('3',N'Hoa quả') insert into LOAIHANG values('4',N'May mặc') insert into LOAIHANG values('5',N'Gia dụng') -- Nhập dữ liệu cho bảng MATHANG insert into MATHANG values('MH001',N'Rượu','CC006','2',4,N'chai',2305000) insert into MATHANG values('MH002',N'Gia vị','CC004','1',2,N'thùng',400000) insert into MATHANG values('MH003',N'Táo','CC005','3',28,N'kg',50000) insert into MATHANG values('MH004',N'Cá hộp','CC002','1',5,N'thùng',650000) insert into MATHANG values('MH005',N'Áo Việt Tiến','CC004','4',60,N'cái',203000) insert into MATHANG values('MH006',N'Bột giặt','CC001','5',9,N'thùng',509000) -- Nhập dữ liệu cho bảng CHITIETDATHANG
  • 6. insert into CHITIETDATHANG values(10148,'MH003',57000,20,0) insert into CHITIETDATHANG values(10148,'MH004',720000,1,0) insert into CHITIETDATHANG values(10150,'MH002',430000,1,0) insert into CHITIETDATHANG values(10157,'MH001',2700000,2,0) insert into CHITIETDATHANG values(10157,'MH006',530000,2,0) insert into CHITIETDATHANG values(10226,'MH004',720000,2,2) --2.1 Cho biết danh sách các đối tác cung cấp hàng cho công ty. select * from NHACUNGCAP --2.2 Mã hàng, tên hàng và số lượng của các mặt hàng hiện có trong công ty. select MaHang, TenHang, SoLuong from dbo.MATHANG --2.3 Họ tên, địa chỉ và năm bắt đầu làm việc của các nhân viên trong công ty. select Ho + ' ' + Ten as HọTên, DiaChi, year(NgayLamViec) as NămLàmViệc from dbo.NHANVIEN --2.4 Địa chỉ và điện thoại của nhà cung cấp có tên giao dịch TAFACO là gì ? select DiaChi, DienThoai from dbo.NHACUNGCAP where TenGiaoDich = 'TAFACO' --2.5 Cho biết mã và tên của các mặt hàng có giá lớn hơn 100000 và số lượng hiện có ít hơn 50 select MaHang, TenHang from dbo.MATHANG where GiaHang > 100000 and SoLuong <50 --2.6 Cho biết mỗi mặt hàng trong công ty do ai cung cấp select MaHang, TenHang, TenCongTy from dbo.MATHANG inner join dbo.NHACUNGCAP on dbo.MATHANG.MaCongTy = dbo.NHACUNGCAP.MaCongTy --2.7 Công ty Dịch vụ vận tải đã cung cấp những mặt hàng nào. select MaHang, TenHang from dbo.MATHANG inner join dbo.NHACUNGCAP on dbo.MATHANG.MaCongTy = dbo.NHACUNGCAP.MaCongTy where TenCongTy = N'Dịch vụ vận tải' --2.8 Loại hàng thực phẩm do những công ty nào cung cấp và địa chỉ của các công ty đó là gì? select distinct TenCongTy, DiaChi from dbo.NHACUNGCAP inner join dbo.MATHANG on dbo.NHACUNGCAP.MaCongTy = dbo.MATHANG.MaCongTy inner join dbo.LOAIHANG on dbo.MATHANG.MaLoaiHang = dbo.LOAIHANG.MaLoaiHang where TenLoaiHang = N'Thực phẩm' --2.9 Những khách hàng nào (tên giao dịch) đã đặt mua mặt hàng Cá hộp của công ty? select TenGiaoDich from dbo.KHACHHANG inner join dbo.DONDATHANG on dbo.KHACHHANG.MaKhachHang = dbo.DONDATHANG.MaKhachHang inner join dbo.CHITIETDATHANG on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon inner join dbo.MATHANG on dbo.CHITIETDATHANG.MaHang = dbo.MATHANG.MaHang
  • 7. where TenHang = N'Cá hộp' --2.10 Đơn đặt hàng số 10148 do ai đặt và do nhân viên nào lập, thời gian và địa điểm giao hàng là ở đâu? select TenGiaoDich, Ho + ' ' + Ten as NhanVienLap, NgayGiaoHang, NoiGiaoHang from dbo.KHACHHANG inner join dbo.DONDATHANG on dbo.KHACHHANG.MaKhachHang = dbo.DONDATHANG.MaKhachHang inner join dbo.NHANVIEN on dbo.DONDATHANG.MaNhanVien = dbo.NHANVIEN.MaNhanVien where SoHoaDon = 10148 --2.11 Hãy cho biết số tiền lương mà công ty phải trả cho mỗi nhân viên là bao nhiêu -- (lương = lương cơ bản + phụ cấp) select MaNhanVien, Ho + ' ' + Ten, (LuongCoBan+isnull(PhuCap,0)) as Lương from dbo.NHANVIEN --2.12 Trong đơn đặt hàng số 10266 đặt mua những mặt hàng nào và số tiền mà khách phải trả cho mỗi mặt --hàng là bao nhiêu ( số tiền phải được tính theo công thức SoLuong*GiaBan- SoLuong*GiaBan*MucGiamGia/100) select TenHang, sum(dbo.CHITIETDATHANG.SoLuong*GiaBan - dbo.CHITIETDATHANG.SoLuong*GiaBan*MucGiamGia/100) as TienPhaiTra from dbo.MATHANG inner join dbo.CHITIETDATHANG on dbo.MATHANG.MaHang = dbo.CHITIETDATHANG.MaHang group by TenHang --2.13 Hãy cho biết có những khách hàng nào lại chính là đối tác cung cấp hàng của công ty(tức là có cùng tên giao dịch) select MaKhachHang, TenGiaoDich from dbo.KHACHHANG where TenGiaoDich in ( select TenGiaoDich from dbo.NHACUNGCAP ) --2.14 Trong công ty có những nhân viên nào có cùng ngày vào làm select * from nhanvien where NgayLamViec in ( select NgayLamViec from dbo.NHANVIEN group by NgayLamViec having count(MaNhanVien) > =2 ) --2.15 Những đơn đặt hàng nào yêu cầu giao hàng ngay tại công ty đặt hàng và những đơn --đặt hàng đó là của công ty nào select TenCongTy from dbo.KHACHHANG inner join dbo.DONDATHANG on dbo.KHACHHANG.MaKhachHang = dbo.DONDATHANG.MaKhachHang where NoiGiaoHang = DiaChi --2.16 Cho biết tên công ty, tên giao dịch, địa chỉ và điện thoại của khách hàng và các nhà --cung cấp hàng cho công ty select TenCongTy, TenGiaoDich, DiaChi, DienThoai from dbo.KHACHHANG
  • 8. union select TenCongTy, TenGiaoDich, DiaChi, DienThoai from dbo.NHACUNGCAP --2.17 Những mặt hàng nào chưa từng được khách hàng đặt mua. select MaHang, TenHang from dbo.MATHANG where MaHang not in ( select distinct MaHang from dbo.CHITIETDATHANG ) --2.18 Những nhân viên nào của công ty chưa từng lập bất kỳ một hóa đơn đặt hàng nào? select MaNhanVien, Ho + ' ' + Ten as HoTen from dbo.NHANVIEN where MaNhanVien not in ( select distinct MaNhanVien from dbo.DONDATHANG ) --2.19 Những nhân viên nào của công ty có lương cơ bản cao nhất? select top 3 * from dbo.NHANVIEN order by LuongCoBan desc --2.20 Tổng số tiền mà khách hàng phải trả cho mỗi đơn đặt hàng là bao nhiêu select KHACHHANG.MaKhachHang, TenGiaoDich, dbo.DONDATHANG.SoHoaDon, sum(GiaBan*SoLuong- GiaBan*SoLuong*MucGiamGia/100) as TongTien from dbo.KHACHHANG inner join dbo.DONDATHANG on dbo.KHACHHANG.MaKhachHang = dbo.DONDATHANG.MaKhachHang inner join dbo.CHITIETDATHANG on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon group by KHACHHANG.MaKhachHang, TenGiaoDich, dbo.DONDATHANG.SoHoaDon --2.21 Trong năm 2011, Những mặt hàng nào đặt mua đúng một lần. select dbo.MATHANG.MaHang, TenHang from dbo.MATHANG inner join dbo.CHITIETDATHANG on dbo.MATHANG.MaHang = dbo.CHITIETDATHANG.MaHang inner join dbo.DONDATHANG on dbo.CHITIETDATHANG.SoHoaDon = dbo.DONDATHANG.SoHoaDon where year(NgayDatHang)=2011 group by dbo.MATHANG.MaHang, TenHang having count(dbo.CHITIETDATHANG.SoHoaDon) = 1 --2.22 Hãy cho biết mỗi một khách hàng đã phải bỏ ra bao nhiêu tiền để đặt mua hàng của công ty? select dbo.KHACHHANG.MaKhachHang, TenGiaoDich, sum(GiaBan*SoLuong - GiaBan*SoLuong*MucGiamGia/100)as TongTien from dbo.KHACHHANG inner join dbo.DONDATHANG on dbo.KHACHHANG.MaKhachHang = dbo.DONDATHANG.MaKhachHang inner join dbo.CHITIETDATHANG on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon group by dbo.KHACHHANG.MaKhachHang, TenGiaoDich --2.23 Mỗi một nhân viên của công ty đã lập bao nhiêu đơn đặt hàng --(nếu nhân viên chưa hề lập một hoá đơn nào thì cho kết quả là 0). select dbo.NHANVIEN.MaNhanVien, Ho + ' ' + Ten as HoTen, count(SoHoaDon) as
  • 9. SoHoaDon from dbo.NHANVIEN left join dbo.DONDATHANG on dbo.NHANVIEN.MaNhanVien = dbo.DONDATHANG.MaNhanVien group by dbo.NHANVIEN.MaNhanVien, Ho + ' ' + Ten --2.24 Cho biết tổng số tiền hàng mà cửa hàng thu được trong mỗi tháng của năm 2003 --(thời gian được tính theo ngày đặt hàng). select month(NgayDatHang) as Thang, sum(GiaBan*SoLuong - GiaBan*SoLuong*MucGiamGia/100) as TongTien from dbo.DONDATHANG inner join dbo.CHITIETDATHANG on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon group by month(NgayDatHang) --2.25 Hãy cho biết tổng số tiền lời mà công ty thu được từ mỗi mặt hàng trong năm 2011. select TenHang, sum(GiaBan*dbo.CHITIETDATHANG.SoLuong - GiaBan*dbo.CHITIETDATHANG.SoLuong*MucGiamGia/100 - dbo.CHITIETDATHANG.SoLuong*GiaHang) as TienLoi from dbo.MATHANG inner join dbo.CHITIETDATHANG on dbo.MATHANG.MaHang = dbo.CHITIETDATHANG.MaHang inner join dbo.DONDATHANG on dbo.CHITIETDATHANG.SoHoaDon = dbo.DONDATHANG.SoHoaDon where year(NgayDatHang) = 2011 group by TenHang --2.26 Hãy cho biết tổng số lượng hàng của mỗi mặt hàng mà công ty đã có (tổng số --lượng hàng hiện có và đã bán). select t.TenHang, sum(t.Soluong) as TongSoLuong from( select TenHang, SoLuong from dbo.MATHANG union all select TenHang, dbo.CHITIETDATHANG.SoLuong from dbo.MATHANG inner join dbo.CHITIETDATHANG on dbo.MATHANG.MaHang = dbo.CHITIETDATHANG.MaHang ) as t group by t.TenHang --2.27 Nhân viên nào của công ty bán được số lượng hàng nhiều nhất và số lượng hàng bán được --của những nhân viên này là bao nhiêu? select top 1 dbo.NHANVIEN.MaNhanVien, Ho + ' ' + Ten as HoTen, sum(SoLuong) as TongSoLuong from dbo.NHANVIEN inner join dbo.DONDATHANG on dbo.NHANVIEN.MaNhanVien = dbo.DONDATHANG.MaNhanVien inner join dbo.CHITIETDATHANG on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon group by dbo.NHANVIEN.MaNhanVien, Ho + ' ' + Ten order by sum(SoLuong) desc --2.28 Đơn đặt hàng nào có số lượng hàng được đặt mua ít nhất? select top 1 SoHoaDon, sum(SoLuong) as SoLuongHang from dbo.CHITIETDATHANG group by SoHoaDon order by sum(SoLuong)
  • 10. --2.29 Số tiền nhiều nhất mà mỗi khách hàng đã từng bỏ ra để đặt hàng trong các đơn -- đặt hàng là bao nhiêu? select dbo.KHACHHANG.MaKhachHang, TenGiaoDich, dbo.DONDATHANG.SoHoaDon, max((GiaBan*SoLuong - GiaBan*SoLuong*MucGiamGia/100)) as Tien from dbo.KHACHHANG inner join dbo.DONDATHANG on dbo.KHACHHANG.MaKhachHang = dbo.DONDATHANG.MaKhachHang inner join dbo.CHITIETDATHANG on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon group by dbo.KHACHHANG.MaKhachHang, TenGiaoDich, dbo.DONDATHANG.SoHoaDon --2.30 Mỗi một đơn đặt hàng đặt mua những mặt hàng nào và tổng số tiền mà mỗi đơn -- đặt hàng phải trả là bao nhiêu? select dbo.CHITIETDATHANG.SoHoaDon, TenHang, TongTien from dbo.CHITIETDATHANG inner join dbo.MATHANG on dbo.CHITIETDATHANG.MaHang = dbo.MATHANG.MaHang left join (select SoHoaDon , sum(GiaBan*SoLuong - GiaBan*SoLuong*MucGiamGia/100) as TongTien from dbo.CHITIETDATHANG group by SoHoaDon) as t on CHITIETDATHANG.SoHoaDon = t.SoHoaDon --2.31 Hãy cho biết mỗi một loại hàng bao gồm những mặt hàng nào, --tổng số lượng hàng của mỗi loại và tổng số lượng của tất cả các --mặt hàng hiện có trong công ty là bao nhiêu? select dbo.LOAIHANG.TenLoaiHang, TenHang, TongMoiLoai from dbo.LOAIHANG inner join dbo.MATHANG on dbo.LOAIHANG.MaLoaiHang = dbo.MATHANG.MaLoaiHang left join ( select TenLoaiHang, sum(SoLuong) as TongMoiLoai from dbo.LOAIHANG inner join dbo.MATHANG on dbo.LOAIHANG.MaLoaiHang = dbo.MATHANG.MaLoaiHang group by TenLoaiHang ) as t on dbo.LOAIHANG.TenLoaiHang = t.TenLoaiHang order by dbo.LOAIHANG.TenLoaiHang compute sum(TongMoiLoai) --2.32 Thống kê xem trong năm 2011, mỗi một mặt hàng trong mỗi tháng và trong cả năm bán được -- với số lượng bao nhiêu? -- Yêu cầu: Kết quả được hiển thị dưới dạng bảng, hai cột đầu là mã hàng và tên hàng, -- các cột còn lại tương ứng với các tháng từ 1 đến 12 và cả năm. Như vậy mỗi dòng trong -- kết quả cho biết số lượng hàng bán được mỗi tháng và trong cả năm của mỗi mặt hàng. select mh.MaHang, TenHang, sum(case month(NgayDatHang) when 1 then ctdh.SoLuong else 0 end) as Thang1, sum(case month(NgayDatHang) when 2 then ctdh.SoLuong else 0 end) as Thang2, sum(case month(NgayDatHang) when 3 then ctdh.SoLuong else 0 end) as
  • 11. Thang3, sum(case month(NgayDatHang) when 4 then ctdh.SoLuong else 0 end) as Thang4, sum(case month(NgayDatHang) when 5 then ctdh.SoLuong else 0 end) as Thang5, sum(case month(NgayDatHang) when 6 then ctdh.SoLuong else 0 end) as Thang6, sum(case month(NgayDatHang) when 7 then ctdh.SoLuong else 0 end) as Thang7, sum(case month(NgayDatHang) when 8 then ctdh.SoLuong else 0 end) as Thang8, sum(case month(NgayDatHang) when 9 then ctdh.SoLuong else 0 end) as Thang9, sum(case month(NgayDatHang) when 10 then ctdh.SoLuong else 0 end) as Thang10, sum(case month(NgayDatHang) when 11 then ctdh.SoLuong else 0 end) as Thang11, sum(case month(NgayDatHang) when 12 then ctdh.SoLuong else 0 end) as Thang12, sum(ctdh.SoLuong) as Nam2011 from dbo.MATHANG as mh inner join dbo.CHITIETDATHANG as ctdh on mh.MaHang = ctdh.MaHang inner join dbo.DONDATHANG as ddh on ctdh.SoHoaDon = ddh.SoHoaDon where year(NgayDatHang) = 2011 group by mh.MaHang, TenHang --2.33 Cập nhật lại giá trị trường NGAYCHUYENHANG của những bản ghi có NGAYCHUYENHANG -- chưa xác định (NULL) trong bảng DONDATHANG bằng với giá trị của trường NGAYDATHANG. update dbo.DONDATHANG set NgayChuyenHang = NgayDatHang where NgayChuyenHang is null --2.34 Tăng số lượng hàng của những mặt hàng do công ty SAFICO cung cấp lên gấp đôi. update dbo.MATHANG set SoLuong = 2*SoLuong where MaCongTy in ( select MaCongTy from dbo.NHACUNGCAP where TenGiaoDich = 'SAFICO' ) --2.35 Cập nhật giá trị của trường NOIGIAOHANG trong bảng DONDATHANG bằng địa chỉ của khách hàng -- đối với những đơn đặt hàng chưa xác định được nơi giao hàng (giá trị trường NOIGIAOHANG bằng NULL). create view forUpdateDiaChi as select NoiGiaoHang, DiaChi from dbo.DONDATHANG inner join dbo.KHACHHANG on dbo.DONDATHANG.MaKhachHang = dbo.KHACHHANG.MaKhachHang update forUpdateDiaChi set NoiGiaoHang = DiaChi
  • 12. where NoiGiaoHang is null --2.36 Cập nhật lại dữ liệu trong bảng KHACHHANG sao cho nếu tên công ty và tên giao dịch -- của khách hàng trùng với tên công ty và tên giao dịch của một nhà cung cấp -- nào đó thì địa chỉ, điện thoại, fax và e-mail phải giống nhau. create view forUpdateInfKhachHang as select kh.TenCongTy as khTenCongTy ,kh.TenGiaoDich as khTenGiaoDich,kh.DiaChi as khDiaChi, kh.DienThoai as khDienThoai, kh.email as khEmail, kh.fax as khFax, ncc.TenGiaoDich,ncc.DiaChi, ncc.DienThoai, ncc.email, ncc.fax from dbo.KHACHHANG as kh inner join dbo.NHACUNGCAP as ncc on kh.TenCongTy = ncc.TenCongTy update forUpdateInfKhachHang set khDiaChi = DiaChi, khDienThoai = DienThoai, khEmail = email, khFax = fax where khTenGiaoDich = TenGiaoDich --2.37 Tăng lương lên gấp rưỡi cho những nhân viên bán được số lượng hàng nhiều hơn 10 trong năm 2011. update dbo.NHANVIEN set LuongCoBan = LuongCoBan*1.5 where MaNhanVien in ( select MaNhanVien from dbo.DONDATHANG inner join dbo.CHITIETDATHANG on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon where year(NgayDatHang) = 2011 group by MaNhanVien having sum(SoLuong)>10 ) --2.38 Tăng phụ cấp lên bằng 50% lương cho những nhân viên bán được hàng nhiều nhất. update dbo.NHANVIEN set PhuCap = 0.5*LuongCoBan where MaNhanVien in ( select top 3 MaNhanVien from dbo.DONDATHANG inner join dbo.CHITIETDATHANG on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon group by MaNhanVien order by sum(SoLuong) ) --2.39 Giảm 25% lương của những nhân viên trong năm 2011 không lập được bất kỳ đơn đặt hàng nào. update dbo.NHANVIEN set LuongCoBan = 0.75*LuongCoBan where MaNhanVien not in( select distinct MaNhanVien from dbo.DONDATHANG where year(NgayDatHang) = 2011 )
  • 13. --2.40 Giả sử trong bảng DONDATHANG có thêm trường SOTIEN cho biết số tiền mà khách hàng phải -- trả trong mỗi đơn đặt hàng. Hãy tính giá trị cho trường này. select dbo.DONDATHANG.SoHoaDon, sum(GiaBan*SoLuong - GiaBan*SoLuong*MucGiamGia/100) as SOTIEN from dbo.DONDATHANG inner join dbo.CHITIETDATHANG on dbo.DONDATHANG.SoHoaDon = dbo.CHITIETDATHANG.SoHoaDon group by dbo.DONDATHANG.SoHoaDon --2.41 Xoá khỏi bảng NHANVIEN những nhân viên đã làm việc trong công ty quá 5 năm. delete dbo.NHANVIEN where datediff(year, NgayLamViec, getdate()) > 5 --2.42 Xoá những đơn đặt hàng trước năm 2010 ra khỏi cơ sở dữ liệu. delete dbo.DONDATHANG where year(NgayDatHang) < 2010 --2.43 Xoá khỏi bảng LOAIHANG những loại hàng hiện không có mặt hàng. delete dbo.LOAIHANG where MaLoaiHang not in( select distinct MaLoaiHang from dbo.MATHANG ) --2.44 Xoá khỏi bảng KHACHHANG những khách hàng hiện không có bất kỳ đơn đặt hàng nào cho công ty. delete dbo.KHACHHANG where MaKhachHang not in( select distinct MaKhachHang from dbo.DONDATHANG ) --2.45 Xoá khỏi bảng MATHANG những mặt hàng có số lượng bằng 0 và không được --đặt mua trong bất kỳ đơn đặt hàng nào. delete dbo.MATHANG where SoLuong = 0 and MaHang not in ( select distinct MaHang from dbo.CHITIETDATHANG )