Tải bản đầy đủ (.docx) (8 trang)

bài thực hành sql bài thực hành 2

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (72.66 KB, 8 trang )

Cho Database như hình:

USE [CSDL_THB2]
GO
/****** Object: Table [dbo].[DIEMHOCPHAN] Script Date: 29/09/2021 10:21:11 SA ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[DIEMHOCPHAN](
[MaSinhVien] [int] NOT NULL,
[MaHocPhan] [int] NOT NULL,
[DiemHocPhan] [float] NOT NULL,
CONSTRAINT [PK_DIEMHOCPHAN] PRIMARY KEY CLUSTERED
(
[MaSinhVien] ASC,
[MaHocPhan] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[HOCPHAN] Script Date: 29/09/2021 10:21:11 SA ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[HOCPHAN](
[MaHocPhan] [int] IDENTITY(1,1) NOT NULL,
[TenHocPhan] [nvarchar](50) NOT NULL,
[SoTinChi] [int] NOT NULL,
[MaNganh] [int] NOT NULL,


[HocKy] [int] NULL,
CONSTRAINT [PK_HOCPHAN] PRIMARY KEY CLUSTERED
(
[MaHocPhan] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[KHOA] Script Date: 29/09/2021 10:21:11 SA ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[KHOA](
[MaKhoa] [int] IDENTITY(1,1) NOT NULL,


[TenKhoa] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_KHOA] PRIMARY KEY CLUSTERED
(
[MaKhoa] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[LOP] Script Date: 29/09/2021 10:21:11 SA ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[LOP](
[MaLop] [int] IDENTITY(1,1) NOT NULL,
[TenLop] [nvarchar](50) NOT NULL,
[MaNganh] [int] NOT NULL,
[KhoaHoc] [char](10) NOT NULL,
[HeDaoTao] [nvarchar](20) NOT NULL,
[NamNhapHoc] [date] NOT NULL,
CONSTRAINT [PK_LOP] PRIMARY KEY CLUSTERED
(
[MaLop] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[NGANH] Script Date: 29/09/2021 10:21:11 SA ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[NGANH](
[MaNganh] [int] IDENTITY(1,1) NOT NULL,
[TenNganh] [nvarchar](50) NOT NULL,
[MaKhoa] [int] NOT NULL,
CONSTRAINT [PK_NGANH] PRIMARY KEY CLUSTERED
(
[MaNganh] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[SINHVIEN] Script Date: 29/09/2021 10:21:11 SA ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[SINHVIEN](
[MaSinhVien] [int] IDENTITY(1,1) NOT NULL,
[HoTen] [nvarchar](30) NOT NULL,
[NgaySinh] [date] NULL,
[GioiTinh] [bit] NULL,
[DiaChi] [nvarchar](50) NULL,
[MaLop] [int] NOT NULL,
CONSTRAINT [PK_SINHVIEN] PRIMARY KEY CLUSTERED
(
[MaSinhVien] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO


ALTER TABLE [dbo].[DIEMHOCPHAN] WITH CHECK ADD CONSTRAINT [FK_DIEMHOCPHAN_HOCPHAN]
FOREIGN KEY([MaHocPhan])
REFERENCES [dbo].[HOCPHAN] ([MaHocPhan])
GO
ALTER TABLE [dbo].[DIEMHOCPHAN] CHECK CONSTRAINT [FK_DIEMHOCPHAN_HOCPHAN]

GO
ALTER TABLE [dbo].[DIEMHOCPHAN] WITH CHECK ADD CONSTRAINT [FK_DIEMHOCPHAN_SINHVIEN]
FOREIGN KEY([MaSinhVien])
REFERENCES [dbo].[SINHVIEN] ([MaSinhVien])
GO
ALTER TABLE [dbo].[DIEMHOCPHAN] CHECK CONSTRAINT [FK_DIEMHOCPHAN_SINHVIEN]
GO
ALTER TABLE [dbo].[HOCPHAN] WITH CHECK ADD CONSTRAINT [FK_HOCPHAN_NGANH] FOREIGN
KEY([MaNganh])
REFERENCES [dbo].[NGANH] ([MaNganh])
GO
ALTER TABLE [dbo].[HOCPHAN] CHECK CONSTRAINT [FK_HOCPHAN_NGANH]
GO
ALTER TABLE [dbo].[LOP] WITH CHECK ADD CONSTRAINT [FK_LOP_NGANH] FOREIGN KEY([MaNganh])
REFERENCES [dbo].[NGANH] ([MaNganh])
GO
ALTER TABLE [dbo].[LOP] CHECK CONSTRAINT [FK_LOP_NGANH]
GO
ALTER TABLE [dbo].[NGANH] WITH CHECK ADD CONSTRAINT [FK_NGANH_KHOA] FOREIGN KEY([MaKhoa])
REFERENCES [dbo].[KHOA] ([MaKhoa])
GO
ALTER TABLE [dbo].[NGANH] CHECK CONSTRAINT [FK_NGANH_KHOA]
GO
ALTER TABLE [dbo].[SINHVIEN] WITH CHECK ADD CONSTRAINT [FK_SINHVIEN_LOP] FOREIGN
KEY([MaLop])
REFERENCES [dbo].[LOP] ([MaLop])
GO
ALTER TABLE [dbo].[SINHVIEN] CHECK CONSTRAINT [FK_SINHVIEN_LOP]
GO


Hãy thực hiện:
--1. Sử dụng các lệnh Insert, update, delete để thêm, cập nhật Data vào các bảng trên, mỗi
bảng >=5 record.
--2. Tạo View gồm: MaSV, HoTen, MaLop, NgaySinh (dd/mm/yyyy),
--GioiTinh (Nam, Nữ) của những sinh viên có họ bắt đầu bằng chữ H, Đ, V.
SELECT MaSinhVien,HoTen,MaLop
CONVERT(VARCHAR(10),NgaySinh,103) AS NgaySinh,
CASE GioiTinh WHEN 1 THEN N'Nam' ELSE N'Nữ' END AS GioiTinh,
YEAR(Ngaysinh) AS Namsinh
INTO v_SV1
FROM [dbo].[SINHVIEN]
WHERE HoTen LIKE N'[HĐV]%'

--3. Tạo View gồm: MaSV, HoTen, MaLop, NgaySinh (dd/mm/yyyy),


--GioiTinh (Nam, Nữ) của những sinh viên Nam học lớp SQL01.
SELECT MaSinhVien, HoTen, MaLop,
CONVERT(VARCHAR(10),NgaySinh,103) AS NgaySinh,
CASE GioiTinh WHEN 1 THEN N'Nam' ELSE N'Nữ' END AS GioiTinh,
YEAR(NgaySinh) AS NamSinh
INTO v_SV2
FROM [dbo].[SINHVIEN]
WHERE GioiTinh=1 AND MaLop='SQL11'
--4. Tạo View gồm: MaSV, HoTen, MaLop, NgaySinh (dd/mm/yyyy),
--GioiTinh (Nam, Nữ) của những sinh viên học lớp: 02, 01,03
SELECT MaSinhVien, HoTen, MaLop,
CONVERT(VARCHAR(10),NgaySinh,103) AS NgaySinh,
CASE GioiTinh WHEN 1THEN N'Nam' ELSE N'Nữ' END AS GioiTinh
INTO v_SV3

FROM [dbo].[SINHVIEN]
WHERE MaLop IN ('01','02', '03')
--5. Tạo View gồm: MaSV, HoTen, MaLop, NgaySinh (dd/mm/yyyy),
--GioiTinh (Nam, Nữ), Tuổi của những sinh viên có tuổi từ 18-19.
SELECT MaSV, HoTen, MaLop,
CONVERT(VARCHAR(10),NgaySinh,103) AS NgaySinh,
CASE GioiTinh WHEN 1THEN N'Nam' ELSE N'Nữ ' END AS Gioi tinh,
YEAR(GETDATE())-YEAR(NgaySinh) AS Tuoi
INTO v_SV4
FROM [dbo].[SINHVIEN]
WHERE YEAR(GETDATE())-YEAR(NgaySinh) BETWEEN 19 AND 21


--6. Tạo View gồm MaSV, HoTên, MaLop, DiemHP, MaHP của những sinh viên có điểm
HP >= 8.
SELECT [dbo].[SINHVIEN].MaSV, HoTen, MaLop, DiemHocPhan, MaHocPhan
INTO v_DIEMHP
FROM [dbo].[SINHVIEN]
INNER JOIN [dbo].[DIEMHOCPHAN] ON [dbo].
[DIEMHOCPHAN].MaSinhVien=[dbo].[SINHVIEN].MaSinhVien
WHERE DiemHocPhan>=8
--7. Tạo View gồm MaSV, HoTen , MaLop, TenLop, MaHP, DiemHP
--được sắp xếp theo ưu tiên Mã lớp, Họ tên tăng dần.
SELECT [dbo].[SINHVIEN].MaSinhVien, HoTen, MaLop,
TenLop,DiemHocPhan,MaHocPhan
INTO v_SXSV
FROM [dbo].[SINHVIEN]
INNER JOIN [dbo].[DIEMHOCPHAN] ON [dbo].
[DIEMHOCPHAN].MaSinhVien=[dbo].[SINHVIEN].MaSinhVien
INNER JOIN [dbo].[LOP] ON [dbo].[SINHVIEN].MaLop=[dbo].[LOP].MaLop

ORDER BY MaLop, HoTen ASC
--8. Tạo View gồm MaSV, HoTen, MaLop, DiemHP, MaHP
--của những sinh viên có 8<= điểm HP <= 9 ở học kỳ I.
SELECT [dbo].[SINHVIEN].MaSinhVien, HoTen, MaLop, DiemHocPhan,
MaHocPhan,Hocky
INTO v_SV_HK1
FROM [dbo].[SINHVIEN]
INNER JOIN [dbo].[DIEMHOCPHAN] ON [dbo].
[DIEMHOCPHAN].MaSinhVien=[dbo].[SINHVIEN].MaSinhVien
WHERE (DiemHocPhan>=8 AND DiemHocPhan<=9) AND HocKy='1'


--9. Hiển thị danh sách sinh viên gồm MaSV, HoTen, MaLop, TenLop, MaKhoa của Khoa
có mã 01.
SELECT MaSinhVien, HoTen, [dbo].[SINHVIEN].MaLop, TenLop, MaKhoa
FROM [dbo].[SINHVIEN]
INNER JOIN [dbo].[LOP] ON [dbo].[SINHVIEN].MaLop=[dbo].[LOP].MaLop
INNER JOIN [dbo].[NGANH] ON [dbo].[NGANH].MaNganh=[dbo].
[LOP].MaNganh
WHERE MaKhoa='01'
--10. Thực hiện truy vấn cho biết MaLop, TenLop, tổng số sinh viên tương ứng của mỗi
lớp.

SELECT [dbo].[SINHVIEN].MaLop, TenLop, COUNT(MaSinhVien) AS TongSo
FROM [dbo].[LOP] INNER JOIN [dbo].[SINHVIEN] ON [dbo].
[LOP].MaLop=[dbo].[SINHVIEN].MaLop
GROUP BY [dbo].[SINHVIEN].MaLop,TenLop
--11. Cho biết điểm trung bình chung của mỗi sinh viên, xuất ra bảng mới có tên
--BANGDIEMTBC gồm MaSinhVien, TenSinhVien, DiemTBC với
--DiemTBC = Tong (DiemHocPhan * SoTinChi) / Tong(SoTinChi)

SELECT
MaSinhVien,TenSinhVien,SUM(DiemHocPhan*SoTinChi)/SUM(SoTinChi) AS
DiemTBC
INTO BANGDIEMTBC
FROM [dbo].[HOCPHAN]
INNER JOIN [dbo].[DIEMHOCPHAN] ON [dbo].
[HOCPHAN].MaHocPhan=[dbo].[DIEMHOCPHAN].MaHocPhan
GROUP BY MaSinhVien

--12. Tính điểm trung bình chung của mỗi sinh viên tương ứng mỗi học kỳ,
--Bảng mới gồm MaSinhVien, TenSinhVien, DiemTBC, HocKy


SELECT HocKy,MaSinhVien,TenSinhVien ,
SUM(DiemHocPhan*SoTinChi)/SUM(SoTinChi) AS DiemTBC
INTO v_TINH_DIEMTB
FROM [dbo].[HOCPHAN]
INNER JOIN [dbo].[DIEMHOCPHAN] ON [dbo].
[HOCPHAN].MaHocPhan=[dbo].[DIEMHOCPHAN].MaHocPhan
GROUP BY HocKy,MaSinhVien
ORDER BY HocKy
--13. Đếm số lượng nam nữ theo từng lớp,
--xuất ra bảng mới gồm: MaLop, TenLop, SoLuong
SELECT [dbo].[SINHVIEN].MaLop,Tenlop,
CASE GioiTinh WHEN 0 THEN N'Nữ' ELSE N'Nam' END AS GioiTinh,
COUNT(MaSinhVien) AS Soluong
INTO v_DEMSL
FROM [dbo].[LOP]
INNER JOIN [dbo].[SINHVIEN] ON [dbo].[LOP].MaLop=[dbo].
[SINHVIEN].MaLop

GROUP BY [dbo].[SINHVIEN].MaLop,Tenlop,GioiTinh
ORDER BY [dbo].[SINHVIEN].MaLop
--14. Tính điểm trung bình chung của mỗi sinh viên ở học kỳ 1.
SELECT MaSinhVien, SUM(DiemHocPhan*SoTinChi)/SUM(SoTinChi) AS
DiemTBC
FROM [dbo].[HOCPHAN]
INNER JOIN [dbo].[DIEMHOCPHAN] ON [dbo].
[HOCPHAN].MaHocPhan=[dbo].[DIEMHOCPHAN].MaHocPhan
WHERE HocKy='1'
GROUP BY MaSinhVien


--15. Truy vấn đưa ra danh sách gồm: MaSV, HoTen, Số các học phần
--có điểm HP <4 (DiemHP<4) của mỗi sinh viên.
SELECT [dbo].[SINHVIEN].MaSinhVien, HoTen, COUNT(MaHocPhan) AS
SoLuong
FROM [dbo].[DIEMHOCPHAN]
INNER JOIN [dbo].[SINHVIEN]ON [dbo].
[DIEMHOCPHAN].MaSinhVien=[dbo].[SINHVIEN].MaSinhVien
INNER JOIN [dbo].[HOCPHAN] ON [dbo].
[DIEMHOCPHAN].MaHocPhan=[dbo].[HOCPHAN].MaHocPhan
WHERE DiemHocPhan<4
GROUP BY [dbo].[SINHVIEN].MaSinhVien, HoTen
--16. Đếm số sinh viên có điểm HP <4 của mỗi học phần.
SELECT MaHocPhan, COUNT(MaSinhVien) AS SL_SV_duoi4
FROM [dbo].[DIEMHOCPHAN]
WHERE DiemHocPhan < 4
GROUP BY MaHocPhan
--17. Tính tổng số đơn vị học trình có điểm HP <5 của mỗi sinh viên
SELECT [dbo].[SINHVIEN].MaSinhVien, Hoten, SUM(SoTinChi)AS

Tongdonvihoctrinh
FROM [dbo].[DIEMHOCPHAN]
INNER JOIN [dbo].[SINHVIEN] ON [dbo].
[DIEMHOCPHAN].MaSinhVien=[dbo].[SINHVIEN].MaSinhVien
INNER JOIN [dbo].[HOCPHAN] ON [dbo].[HOCPHAN].MaHocPhan=[dbo].
[DIEMHOCPHAN].MaHocPhan
WHERE DiemHocPhan < 5
GROUP BY [dbo].[SINHVIEN].MaSinhVien, HoTen



×