3.sửa lại số lượng cho hóa đơn có mã HD1 để hóa đơn này có số lượng bằng số lượng HD3UPDATE CHITIETHOADON SET SOLUONG = SELECT SOLUONG FROM CHITIETHOADONWHERE SOHD = 'HD3'WHERE SOHD = '
Trang 1TRƯỜNG ĐẠI HỌC PHƯƠNG ĐÔNG KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG
Trang 2A-Viết lệnh tạo một cơ sở dữ liệu có ít nhất 5 bảng (có tạo khóa chính, khóa ngoại nếu có, Check, Default, Unique, … nếu cần):
create table NHACUNGCAP
(MANCC varchar(10) primary key,
select * from NHACUNGCAP
[1]
Trang 3/*A2_Tạo bảng HÀNG HÓA và nhập DL cho bảng HÀNG HÓA*/
/*Tạo ràng buộc giá trị mặc định: default*/
create table HANGHOA
(MAHH varchar(10) primary key,
VALUES ('HH1',N'Iphone 12 pro max 512G',N'32000000',N'Chiếc','NCC1'),
('HH2',N'Xiaomi Redmi K20 Pro Premium
',N'10000000',N'Chiếc','NCC2'),
('HH3',N'Tai nghe thỏ hồng siêu cute',N'500000',N'Chiếc','NCC3'),('HH4',N'Samsung Galaxy S20 Plus',N'15000000',N'Chiếc','NCC4')SELECT * FROM HANGHOA
[2]
Trang 4/*A3_Tạo bảng HÓA ĐƠN và nhập DL cho bảng HÓA ĐƠN */
create table HOADON
(SOHD varchar(50) primary key,
SELECT FROM HOADON*
/*A4_Tạo bảng CHI TIẾT HÓA ĐƠN và nhập DL cho bảng CHI TIẾT HÓA ĐƠN*/
[3]
Trang 5/*Tạo ràng buộc kiểm tra điều kiện*/
create table CHITIETHOADON
Trang 6/*A5_Tạo bảng NHÂN VIÊN và nhập DL cho bảng NHÂN VIÊN*/
create table NHANVIEN
(MANV varchar(10) primary key,
[5]
Trang 7VALUES ('NV1',N'Nguyễn Thị Kim',0,'1995/04/08','0910567425',N'Hà Đông-Hà Nội',5000000),
('NV2',N'Trần Tuấn Minh',1,'1990/01/10','0388354671',N'Thanh Xuân-Hà Nội',7000000),
('NV3',N'Vũ Thanh Tùng',1,'1997/10/08','0328654214',N'Nam Định',10000000),('NV4',N'Phạm Đăng Phú',1,'1990/05/15','0328541478',N'TP Hồ Chí
Minh',8000000)
SELECT * FROM NHANVIEN
/*A6_Tạo bảng THÔNG TIN CỬA HÀNG và nhập DL cho bảng THÔNG TIN CỬA HÀNG*/
create table THONGTINCUAHANG
(TENCUAHANG nvarchar(70) not null,
(N'Bách Hóa Xanh','0327165370',N'Hà Nội')
SELECT * FROM THONGTINCUAHANG
[6]
Trang 8B.Viết 3 lệnh sửa dữ liệu theo điều kiện; Viết 3 lệnh Xóa
dữ liệu theo điều kiện:
/*C1.3 lệnh sửa DL theo điều kiện: */
1.Sửa lại ngày sinh cho nhân viên là 2000/03/20 và điện thoại là 0328854712 cho
nhân viên có mã nhân viên là NV2
Trang 93.sửa lại số lượng cho hóa đơn có mã HD1 để hóa đơn này có số lượng bằng số lượng HD3
UPDATE CHITIETHOADON
SET SOLUONG = ( SELECT SOLUONG
FROM CHITIETHOADONWHERE SOHD = 'HD3')WHERE SOHD = 'HD1'
/*C1.3 lệnh xóa DL theo điều kiện: */
1.xóa những hàng hóa có giá bán nằm trong khoảng từ 700000 đến 10000000
DELETE FROM HANGHOA
WHERE GIABAN BETWEEN 700000 AND 10000000
2.xóa hàng hóa có giá bán nhỏ nhất
DELETE FROM HANGHOA
WHERE GIABAN = (SELECT MIN(GIABAN)
FROM HANGHOA)
3.xóa tên cửa hàng có tên cửa hàng là ESHOP và địa chỉ là HÀ NỘI
DELETE FROM THONGTINCUAHANG
WHERE TENCUAHANG = N'ESHOP' AND DIACHICH = N'HàNội'
[8]
Trang 10C.Viết 5 lệnh sửa cấu trúc bảng: Thêm cột/ Xóa cột /Sửa kiểu dữ liệu (độ rộng) cột /Thêm ràng buộc khóa chính, khóa ngoại:
1.Sửa tên cửa hàng có độ rộng 100
ALTER TABLE THONGTINCUAHANG
ALTER COLUMN TENCUAHANG nvarchar(100)
2.Thêm cột chức vụ vào bảng nhân viên
ALTER TABLE NHANVIEN
ADD CHUCVU nvarchar(50)
3.Xóa cột địa chỉ ở bảng nhà cung cấp
ALTER TABLE NHACUNGCAP
DROP COLUMN DIACHI
[9]
Trang 114.Thêm ràng buộc khóa chính cho bảng THONGTINCUAHANG
D.Tạo Diagram hiển thị đủ các bảng: Chụp lại Diagram :
[10]
Trang 13E.Tạo 2 khung nhìn VIEW có nối 3 bảng Chụp màn
Trang 14F.Viết 15 câu hỏi về Select trong đó có sử dụng:
• Hàm day, month, year, datediff, getdate
• Hàm Count; Hàm max ; min ; Sum ;có Group by ; có Order by
• Truy vấn trên một bảng có where ; Truy vấn trên nhiều bảng có where
• Sử dụng Select lồng nhau; …
1.Đưa ra các website có tên miền là vn
SELECT website
FROM NHACUNGCAP
WHERE WEBSITE like N'%.vn'
2.Đưa ra tên nhân viên tuổi những nhân viên có tuổi nhỏ hơn 30
SELECT TENNV, datediff(yy,NGAYSINH, getdate()) as [Tuổi]FROM NHANVIEN
WHERE datediff(yy,NGAYSINH, getdate()) <30
3.Đưa ra top 3 nhân viên đầu tiên có lương cao nhất
[13]
Trang 15SELECT top 3 TENNV
FROM NHANVIEN
ORDER BY Luong DESC
4.Đưa ra Hàng hóa có giá bán cao nhất.
6.Tính Tổng số lượng số hóa đơn mà đã được thống kê.
SELECT sum(soluong) as [Số lượng hóa đơn]
9.Đếm xem có bao nhiêu nhân viên Nam có lương từ 5 triệu đến 10 triệu.
SELECT count(*) as [Số nhân viên]
[14]
Trang 16FROM NHANVIEN
WHERE gioitinh = 1 and luong between 5000000 and 10000000
10.Đưa ra giới tính và số nhân viên tương ứng
SELECT gioitinh, count (*) as [Số nhân viên]
WHERE DIACHICH = N'Hà Nội'
12.Đưa ra tên nhân viên có mức lương giảm dần.
SELECT TENNV
FROM NHANVIEN
ORDER BY LUONG DESC
13.Đưa ra tên nhân viên sắp xếp theo mức lương tăng dần.
SELECT TENNV
FROM NHANVIEN
ORDER BY LUONG asc
14.Đưa ra tên,giới tính,tuổi của những nhân viên có lương nhỏ hơn mức lương trung bình.
SELECT TENNV,GIOITINH,datediff(yy,ngaysinh,getdate()) as [TUỔI]FROM NHANVIEN
WHERE luong < (SELECT avg(luong)
FROM NHANVIEN)
[15]
Trang 1715.Đưa ra MANV,tên nhân viên có mức lương từ 3 triệu đến 9 triệu
SELECT MANV,TENNV
FROM NHANVIEN
WHERE luong between 3000000 and 9000000
16.Đưa ra tên, lương những nhân viên có tháng sinh thuộc quý 2, năm sinh là 1990.
SELECT TENNV,LUONG
FROM NHANVIEN
WHERE month(NGAYSINH) in (4,5,6) and year(NGAYSINH) = 1990
17.Đưa ra Tên nhân viên,gioitinh,tên khách hang,đơn giá hàng hóa của những hóa đơn được lập vào quý 2 năm 2021.
WHERE TENKH LIKE N'_h%n'
19.Đưa ra nhà cung cấp,website,số điện thoại,tên hàng hóa hóa,giá bán của các loại hàng hóa.
[16]
Trang 18SELECT
NHACUNGCAP.MANCC,WEBSITE,DIENTHOAI,HANGHOA.TENHH,GIABAN
FROM NHACUNGCAP,HANGHOA
WHERE NHACUNGCAP.MANCC = HANGHOA.MANCC
20.Đưa ra tên những hàng hóa có giá không nằm trong khoảng từ 500000 đến
WHERE GIABAN < 500000 OR GIABAN > 10000000
21.Đưa ra các website có số điện thoại bắt đầu là 19.
SELECT WEBSITE
FROM NHACUNGCAP
WHERE DIENTHOAI LIKE '19%'
22.Đưa ra website có số điện thoại ở vị trí thứ 2 là 8.
SELECT WEBSITE
FROM NHACUNGCAP
WHERE DIENTHOAI LIKE '_8%'
23.Đưa ra tên hang hóa,số hóa đơn và mức tiền phải chi cho mỗi hàng hóa tương ứng đó.
SELECT TENHH,CHITIETHOADON.SOHD,DONGIA*SOLUONG AS [THÀNH TIỀN]
FROM CHITIETHOADON,HANGHOA
[17]
Trang 19WHERE CHITIETHOADON.MAHH = HANGHOA.MAHH
24.đếm xem có bao nhiêu hóa đơn có số lượng nhỏ hơn 4.
SELECT count(*) AS [Số hóa đơn < 4]
FROM CHITIETHOADON
WHERE SOLUONG < 4
25.Tính số tiền mà khách hàng phải trả ứng với số lượng hàng hóa mà họ mua
SELECT SOLUONG * DONGIA AS [Tiền phải trả]
FROM CHITIETHOADON
G.Viết 4 thủ tục có viết lệnh gọi:
1 /*Viết thủ tục xóa những hàng hóa có giá bán nhỏ hơn giá bán người dùng đưa ra */
CREATE PROC XoaHH
(@GIABAN int )
AS
DELETE FROM HANGHOA
WHERE GIABAN < @GIABAN
EXEC XoaHH 700000
SELECT * from HANGHOA
[18]
Trang 202 /*Viết_thủ_tục_nhập_dữ_liệu_vào_bảng: THONGTINCUAHANG TENCUAHANG DIENTHOAICH DIACHIC ( , ,
select * from THONGTINCUAHANG
3 /*Viết thủ tục kiểm tra số nguyên tố - */
H.Viết 2 hàm có viết lệnh gọi:
4 /*Đưa ra tên hàng hóa có giá bán nằm giữa 2 giá bán do người khác đưa ra có sử dụng hàm*/
CREATE FUNCTION GIA
(@gia1 int, @gia2 int)
RETURNS TABLE
AS
RETURN (SELECT HANGHOA.TENHH
FROM HANGHOAWHERE GIABAN BETWEEN @gia1 AND
@gia2)
[19]
Trang 21SELECT * FROM GIA(100000,10000000)
I.Viết 1 trigger thực hiện một nhiệm vụ nào đó:
Viết trigger cấm xoá dữ liệu trên bảng NHACUNGCAP
Create trigger camxoaNhacungcap
Trang 22TRƯỜNG ĐẠI HỌC PHƯƠNG ĐÔNG
KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG
BÀI TẬP MÔN HỌC
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU SQL SERVER
Họ tên sinh viên:
Lớp:
Mã số:
Trang 23create table trinhdohocvan
(matdhv varchar(10 )primary key,
tentdhv nvarchar(50)not null,
chuyennganh nvarchar(50))
/*Tạo bảng lương*/
(bacluong varchar(10)primarykey,
luongcoban floatnot null,
hesoluong floatnot null,
hesophucap floatnot null)
/*Tạo bảng nhân viên*/
(manv varchar(10 )primary key,
hodem nvarchar(30)not null,
gioitinh bitnot null,
ngaysinh date,
dantoc nvarchar(20)default N'Kinh',
[23]
Trang 24quequan nvarchar( ),50
sodienthoai varchar(10)unique,
mapb varchar(10)references phongban(mapb),
macv varchar(10)references chucvu(macv),
matdhv varchar(10)references trinhdohocvan(matdhv),
bacluong varchar(10)references luong(bacluong))
/*tạo bảng hợp đồng lao động*/
(mahd varchar(10 )notnull,
manv varchar(10)not null,
tungay datenot null,
denngay datenotnull)
B.Viết 5 lệnh sửa cấu trúc bảng: Thêm cột/ Xóa cột /Sửa kiểu dữ liệu (độ rộng) cột /Thêm ràng buộc khóa chính, khóa ngoại, giá trị mặc định, duy nhất, kiểm tra điều kiện.
1.Xóa cột quê quán ở bảng nhân viên
[24]
Trang 252.Thêm cột địa chỉ vào bảng nhân viên
add diachi nvarchar( )50
3.Thêm ràng buộc khóa chính trên bảng hopdonglaodong
4.Thêm ràng buộc luongcoban>4500000 trên bảng luong
C.Viết lệnh liên quan đến dữ liệu trong bảng
+)Nhập vào mỗi bảng ít nhất 3 dòng Chụp lại bảng dữ liệu sau khi nhập
/*Bảng phòng ban*/
[25]
Trang 26insert into phongban
/*Bảng lương*/
[26]
Trang 27insert into luong
[27]
Trang 28values('tdhv3',N'Đại học',N'Quản trị nhân lực')
/*Bảng nhân viên*/
'pb01' 'cv001' 'tdhv1' 'bac1', , , , N'Hà Đông-Hà Nội')
'0322345678' 'pb02' 'cv102' 'tdhv2' 'bac2', , , , ,N'Kinh Môn-Hải Dương')
'cv103' 'tdhv1' 'bac3', , , N'Sơn Tây-Hà Nội')
'cv001' 'tdhv2' 'bac4', , , N'Đống Đa-Hà Nội')
'cv103' 'tdhv1' 'bac3', , , N'Hà Giang')
[28]
Trang 29values ('nv007', N'Hoàng Phương' N'Nga', ,1 '1990/07/03', N'Kinh', '0320898876', 'pb01',
'cv103' 'tdhv2' 'bac2', , , N'Nam Định')
'032098796' 'pb03' 'cv103' 'tdhv3' 'bac2', , , , , N'Hạ Long-Quảng Ninh')
Trang 30insert into hopdonglaodong
+)Viết 3 lệnh sửa dữ liệu theo điều kiện;
1.Sửa ngày bắt đầu hợp đồng lao động và ngày kết thúc hợp đồng lần lượt là 01/01/2020 và 01/01/2022 của nhân viên có mã nhân viên là nv001
Trang 31set diachi=N'Hạ Long-Quảng Ninh',
hodem=N'Phạm Thanh'
+) Viết 3 lệnh Xóa dữ liệu theo điều kiện
1.Xóa nhân viên trong bảng nhân viên có mã là nv002
2.Xóa hợp đồng lao động của nhân viên có tên là Phương ở phòng kế toán
from nhanvien,phongban
and ten=N'Phương'
and tenphongban=N'Kế toán')
3.Xóa nhân viên có chức vụ là trưởng phòng và có họ Nguyễn
from nhanvien,chucvu
and tenchucvu=N'Trưởng phòng'
[31]
Trang 32and hodem like N'Nguyễn%')
D.Tạo Diagram hiển thị đủ các bảng: Chụp lại Diagram
E.Viết 25 câu hỏi về Select trong đó có sử dụng: (lưu ý viết cả câu hỏi và câu trả lời)
Hàm day, month, year, datediff, getdate
Hàm Count; Hàm max ; min ; Sum ;có Group by ; có Order by
Truy vấn trên một bảng có where ; Truy vấn trên nhiều bảng có where
Sử dụng Select lồng nhau; …
1 Đưa ra mã nhân viên, họ tên, ngày sinh của nhân viên nữ sinh vào quý III
from nhanvien
[32]
Trang 33and gioitinh 0=
2.Đưa ra mã nhân viên, họ đệm, tên, trình độ học vấn những nhân viên sinh sau năm
1997 có trình độ đại học
from nhanvien,trinhdohocvan
andyear(ngaysinh 1997)>
and tentdhv=N'đại học'
3.Đưa ra mã nhân viên họ đệm, tên tuổi của nhân viên thuộc phòng kế toán , ,
from nhanvien,phongban
and tenphongban=N'Kế toán'
4 Đưa ra mã nhân viên, họ đệm, tên những nhân viên có sinh nhật trước ngày
20 07 1994 / /
from nhanvien
or(year(ngaysinh 1994 )= andmonth(ngaysinh 7)< )
or(year(ngaysinh 1994 )= andmonth(ngaysinh 7)=
[33]
Trang 34andday(ngaysinh 20)< )
5 Đưa ra số lượng nhân viên mỗi phòng ban
from nhanvien,phongban
6.Đưa ra mã nhân viên, họ đệm, tên của từng nhân viên và sắp xếp theo chiều lương giảm dần
from nhanvien,phongban luong,
and phongban mapb =nhanvien.mapb
7.Đưa ra mã nhân viên, họ đệm, tên, lương của nhân viên có lương cao nhất công ty
from nhanvien,luong
and luongcoban hesoluong hesophucap*( + )
from nhanvien,luong
[34]
Trang 35where luong.bacluong nhanvien bacluong= )
8.Đưa ra mã nhân viên họ đệm, tên, lương của nhân viên có lương thấp nhất phòng ,
kế toán
from nhanvien,luong
and luongcoban hesoluong hesophucap*( + )
from nhanvien,luong,phongban
and phongban mapb =nhanvien.mapb
and tenphongban=N'kế toán')
9.Đưa ra mã nhân viên họ tên lương của nhân viên có lương mức lương trung , , <
bình của cả công ty
from nhanvien,luong
and luongcoban hesoluong hesophucap*( + )
<(selectavg(luongcoban hesoluong hesophucap*( + ))
from nhanvien,luong
[35]
Trang 36where nhanvien.bacluong luong= bacluong)
10 Đưa ra tổng lương mà công ty chi trả cho mỗi phòng ban
from nhanvien,luong,phongban
and nhanvien mapb =phongban.mapb
11.Đưa mã nhân viên, họ đệm, tên, phòng ban, địa chỉ của nhân viên có chức vụ là nhân viên địa chỉ ở Quảng Ninh và thuộc phòng phát triển thị trường ,
from nhanvien,phongban chucvu,
and nhanvien mapb =phongban.mapb
and diachi like N'%Quảng Ninh'
and tenphongban=N'Phát triển thị trường'
and tenchucvu=N'nhân viên'
12 Đưa ra họ tên của từng trưởng phòng của từng phòng ban trong công ty
from nhanvien,chucvu phongban,
[36]
Trang 37and nhanvien mapb =phongban.mapb
and tenchucvu=N'trưởng phòng'
13 Đưa ra họ tên và chuyên ngành của những nhân viên có trình độ học vấn đại học
from nhanvien,trinhdohocvan
and tentdhv=N'đại học'
14 Đưa ra họ tên trưởng phòng tên phòng ban của nhân viên có mã nhân viên là ,
nv003
from nhanvien,phongban,chucvu
and nhanvien.macv chucvu= macv
and tenchucvu=N'trưởng phòng'
and nhanvien.mapb=(select nhanvien.mapb
from nhanvien
where manv='nv003')
15 Đưa ra số lượng nhân viên theo trình độ học vấn
[37]
Trang 38from nhanvien,trinhdohocvan
16.Đưa ra họ tên những nhân viên những nhân viên có họ là Hoàng
from nhanvien
17.Đưa ra tổng lương của nhân viên
from nhanvien,luong
18.Đưa ra số lượng nhân viên nam và số lượng nhân viên nữ
from nhanvien
19.Đưa ra họ tên, phòng ban của nhân viên có lương >15 000 000
from nhanvien,phongban luong,
nhanvien mapb phongban = mapb and
luongcoban hesoluong hesophucap 15000000*( + )>
20 Mức lương trung bình của một người ở mỗi phòng ban
from nhanvien,phongban luong,
[38]
Trang 39where nhanvien.mapb=phongban.mapb and
nhanvien bacluong luong bacluong =
21.Đưa ra họ tên nhân viên có mức lương KHÔNG nằm trong khoảng 10 000 000 đến 15 000 000
from nhanvien,luong
and luongcoban hesoluong hesophucap *( + ) not between 10000000 and 15000000
22 Đưa ra họ tên những nhân viên có tên bắt đầu bằng H, kí tự thứ 3 là n
from nhanvien
23.Đưa ra số lượng nhân viên nam có quê ở Hải Dương
from nhanvien
and gioitinh='1'
24.Đưa ra những nhân viên có sinh nhật vào tháng 7 hoặc tháng 8 ở phòng kế toán
from nhanvien,phongban
andmonth(ngaysinh)in( , )7 8
and tenphongban =N'Kế toán'
25.Đưa ra họ tên, tuổi nhân viên có tuổi >30
[39]
Trang 40select hodem,ten,datediff(yyyy,ngaysinh,getdate())as [Tuổi]
from nhanvien
F.Tạo 2 khung nhìn VIEW có nối 3 bảng Chụp màn hình của VIEW
G.Viết 4 thủ tục có viết lệnh gọi
1 Đưa ra danh sách mã nhân viên, họ tên của nhân viên thuộc phòng ban mà người dùng đưa ra
(@tenphongban nvarchar( ))50
as
from nhanvien,phongban
and tenphongban @tenphongban=
[40]
Trang 41/*Lệnh gọi*/
exec dsnhanvienN'kế toán'
2 Sửa bậc lương của nhân viên có mã nhân viên người dùng đưa ra giống với bậc lương của nhân viên có mã nhân viên do người dùng đưa ra
(@manv1 varchar(10),@manv2 varchar(10))
as
update nhanvien
set bacluong=(select bacluong
from nhanvien
/*Lệnh gọi:*/
exec suabacluong'nv003' 'nv004',
3.Giải một bài toán nào đó
Thủ tục tìm ước chung lớn nhất theo thuật toán Euclid của 2 số a và b
4 Tìm bội chung nhỏ nhất của 2 số a và b
H.Viết 3 hàm có viết lệnh gọi
[41]
Trang 422.Đưa ra mã nhân viên, họ đệm, tên của trưởng phòng theo phòng ban mà người dùng đưa ra
(@phongban nvarchar(50))
returns table
as
from nhanvien,phongban chucvu,
and nhanvien macv chucvu macv =
and tenphongban @phongban=
and tenchucvu=N'trưởng phòng' )
/*lệnh gọi*/
I.Viết 1 trigger thực hiện một nhiệm vụ nào đó
[42]