1. Trang chủ
  2. » Giáo án - Bài giảng

■ Bài tập MSSQL (SQL Server) có lời giải ■ Quản lý hàng hóa và điểm thi của sinh viên

22 5K 19

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 831,13 KB

Nội dung

■ Nối kết MSSQL với HeidiSQL■ Thiết kế Cơ sở dữ liệu (CREATE DATABASE TABLE)■ Tạo truy vấn (CREATE VIEW)■ Bài tập Quản lý Hàng hóa ≡ Hiển thị Đơn đặt hàng ≡ Hiển thị Đơn đặt hàng theo thời điểm giao hàng ≡ Tính Tổng số lượng, Thành tiền các mặt hàng ≡ Tính tổng số tiền đã đặt hàng theo công ty ≡ Tìm công ty đặt hàng nhiều nhất ...■ Bài tập Quản lý Điểm thi của sinh viên ≡ Cho kết quả các môn thi của 1 sinh viên ≡ Cho biết sinh viên đã thi ít nhất là 1 trong các môn cụ thể ≡ Cho biết những môn mà sinh viên chưa có điểm. ≡ Cho biết những sinh viên có điểm thi môn không thấp nhất khoa...

Trang 2

* Kết nối SQL Server

Chạy chương trình HeidiSQL (https://www.heidisql.com/download.php?download=portable) và nối kết vào SQL Server:

Nếu không kết nối được thì cần cài Visual Studio 2008 (máy chạy Windows XP, cài thêm SQLServer

2008 SP1 và 2, chọn Upgrade SQL =>2008) hay Visual Studio 2010 (máy chạy Windows 7 trở lên)

Thực thi xong chọn nút Refresh ([F5]) đề quan sát kết quả Bấm chọn vào Database QLHH

* Tạo Table: KhachHang

CREATE TABLE "KhachHang" (

"MaKH" NVARCHAR(4) NOT NULL,

"TenKH" NVARCHAR(30) NULL DEFAULT NULL,

"DiaChi" NVARCHAR(255) NULL DEFAULT NULL,

"DThoai" NVARCHAR(255) NULL DEFAULT NULL,

VIET-PC: Tên

máy

Trang 3

* Tạo Table: MatHang

CREATE TABLE "MatHang" (

"MaMH" NVARCHAR(4) NOT NULL,

"TenMH" NVARCHAR(255) NOT NULL,

"DVT" NVARCHAR(255) NULL DEFAULT NULL,

"DonGia" INT NULL DEFAULT NULL,

PRIMARY KEY ("MaMH")

)

;

* Tạo Table: DonDH

CREATE TABLE DonDH (

"MaDH" NVARCHAR(4) NOT NULL,

"NgayDH" DATE NULL,

"NgayGH" DATE NULL,

"MaKH" NVARCHAR(255) NULL DEFAULT NULL,

PRIMARY KEY ("MaDH")

)

;

* Tạo Table: ChiTietDH

CREATE TABLE "ChiTietDH" (

"MaDH" NVARCHAR(4) NOT NULL,

"MaMH" NVARCHAR(4) NOT NULL,

"SoLuong" INT NULL DEFAULT NULL

)

;

* Nhập dữ liệu cho Table: KhachHang

Trang 4

* Nhập dữ liệu cho Table: MatHang

* Nhập dữ liệu cho Table: DonDH

* Nhập dữ liệu cho Table: ChiTietDH

Trang 5

* Khoá ngoại

Là các cột ở một Table khác nhưng có liên kết dữ liệu đến một cột là khoá chính của một Table

* Hiển thị tất cả các Đơn đặt hàng

SELECT DonDH.MaDH, DonDH.MaKH, KhachHang.TenKH, MatHang.TenMH,

MatHang.DVT, MatHang.DonGia, ChiTietDH.SoLuong, [DonGia]*[SoLuong] AS [Thành tiền]

FROM MatHang INNER JOIN (KhachHang INNER JOIN (DonDH INNER JOIN ChiTietDH

ON DonDH.MaDH = ChiTietDH.MaDH) ON KhachHang.MaKH = DonDH.MaKH) ON

MatHang.MaMH = ChiTietDH.MaMH;

Kết quả như sau:

Khoá

ngoại

Foreign

Trang 6

Muốn giới hạn chỉ hiển thị các đơn đặt hàng của công ty Hoàng Hôn, thêm vào điều kiện WHERE SELECT DonDH.MaDH, DonDH.MaKH, KhachHang.TenKH, MatHang.TenMH,

MatHang.DVT, MatHang.DonGia, ChiTietDH.SoLuong, [DonGia]*[SoLuong] AS [Thành tiền]

FROM MatHang INNER JOIN (KhachHang INNER JOIN (DonDH INNER JOIN ChiTietDH

ON DonDH.MaDH = ChiTietDH.MaDH) ON KhachHang.MaKH = DonDH.MaKH) ON

MatHang.MaMH = ChiTietDH.MaMH

Where KhachHang.TenKH = 'Hoàng Hôn'

Kết quả như sau:

Tuy nhiên, để tìm các đơn đặt hàng của Biti’s thì khó hơn một chút:

SELECT DonDH.MaDH, DonDH.MaKH, KhachHang.TenKH, MatHang.TenMH,

MatHang.DVT, MatHang.DonGia, ChiTietDH.SoLuong, [DonGia]*[SoLuong] AS [Thành tiền]

FROM MatHang INNER JOIN (KhachHang INNER JOIN (DonDH INNER JOIN ChiTietDH

ON DonDH.MaDH = ChiTietDH.MaDH) ON KhachHang.MaKH = DonDH.MaKH) ON

MatHang.MaMH = ChiTietDH.MaMH

Where KhachHang.TenKH = 'Biti' + Char(39) + 's'

Kết quả như sau:

* Hiển thị các Đơn đặt hàng có Ngày giao hàng trong thời điểm từ 1-3-2004 đến 30-4-2004 SELECT DonDH.MaDH, DonDH.NgayGH, DonDH.MaKH, KhachHang.TenKH,

MatHang.TenMH, MatHang.DVT, MatHang.DonGia, ChiTietDH.SoLuong,

[DonGia]*[SoLuong] AS [Thành tiền]

FROM MatHang INNER JOIN (KhachHang INNER JOIN (DonDH INNER JOIN ChiTietDH

ON DonDH.MaDH = ChiTietDH.MaDH) ON KhachHang.MaKH = DonDH.MaKH) ON

MatHang.MaMH = ChiTietDH.MaMH

Where DonDH.NgayGH >= '2004-03-01' and DonDH.NgayGH <= '2004-04-30'

Trang 7

Kết quả như sau:

* Tính Tổng số lượng và Thành tiền các mặt hàng

SELECT ChiTietDH.MaMH, MatHang.TenMH, Sum(ChiTietDH.SoLuong) AS [So

Luong], Sum([SoLuong]*[DonGia]) AS [Thanh Tien]

FROM MatHang INNER JOIN ChiTietDH ON MatHang.MaMH = ChiTietDH.MaMH

GROUP BY ChiTietDH.MaMH, MatHang.TenMH;

Kết quả như sau:

* Tính tổng số tiền đã đặt hàng theo từng công ty, hiển thị MaKH, TenKH, Tong So Tien Chú ý cột Tong So Tien = DonGia * SoLuong

SELECT DonDH.MaKH, KhachHang.TenKH, Sum([SoLuong]*[DonGia]) AS [Tong so tien]

FROM MatHang INNER JOIN (KhachHang INNER JOIN (DonDH INNER JOIN ChiTietDH

ON DonDH.MaDH = ChiTietDH.MaDH) ON KhachHang.MaKH = DonDH.MaKH) ON

MatHang.MaMH = ChiTietDH.MaMH

GROUP BY DonDH.MaKH, KhachHang.TenKH;

Kết quả như sau:

Trang 8

* Tìm công ty đặt hàng có Tổng trị giá cao nhất, hiển thị MaKH, TenKH, Tong So Tien

- Trước tiên, tạo View để hiển thị Tổng thành tiền theo Khách hàng:

Create View "View - Thanh tien theo Khach hang" as

SELECT DonDH.MaKH, KhachHang.TenKH, Sum([SoLuong]*[DonGia]) AS [Tong so tien]

FROM MatHang INNER JOIN (KhachHang INNER JOIN (DonDH INNER JOIN ChiTietDH

ON DonDH.MaDH = ChiTietDH.MaDH) ON KhachHang.MaKH = DonDH.MaKH) ON

MatHang.MaMH = ChiTietDH.MaMH

GROUP BY DonDH.MaKH, KhachHang.TenKH

Kết quả như sau, (vào mục Data để xem):

- Sau đó tìm Công ty có Tổng giá trị mua hàng cao nhất:

SELECT MaKH, TenKH, "Tong so tien"

FROM "View - Thanh tien theo Khach hang"

Where "Tong so tien" = (Select Max("Tong so tien") from "View - Thanh tien theo Khach hang")

Kết quả như sau :

- Cuối cùng, tạo View theo Kết quả trên:

Create View "View - Max Thanh tien theo Khach hang" as

SELECT MaKH, TenKH, "Tong so tien"

FROM "View - Thanh tien theo Khach hang"

Where "Tong so tien" = (Select Max("Tong so tien") from "View - Thanh tien theo Khach hang")

Trang 9

* Tìm công ty đặt hàng có Tổng trị giá thấp nhất, hiển thị MaKH, TenKH, TongSoTien

- Tìm Công ty có Tổng giá trị mua hàng thấp nhất:

SELECT MaKH, TenKH, "Tong so tien"

FROM "View - Thanh tien theo Khach hang"

Where "Tong so tien" = (Select Min("Tong so tien") from "View - Thanh tien theo Khach hang")

Kết quả như sau :

- Cuối cùng, tạo View theo Kết quả trên:

Create View "View - Max Thanh tien theo Khach hang" as

SELECT MaKH, TenKH, "Tong so tien"

FROM "View - Thanh tien theo Khach hang"

Where "Tong so tien" = (Select Min("Tong so tien") from "View - Thanh tien theo Khach hang")

* Tìm mặt hàng bán chậm nhất (có Tổng trị giá nhỏ nhất) Hiển thị MaMH, TenMH, Tong So Tien

- Trước tiên, tạo View để hiển thị Tổng thành tiền theo Mặt hàng:

Create View "View – Tong thanh tien theo mat hang" as

Select ChiTietDH.MaMH, MatHang.TenMH, Sum (ChiTietDH.SoLuong *

MatHang.DonGia) as ThanhTien From ChiTietDH Inner Join MatHang on

ChiTietDH.MaMH = MatHang.MaMH

Group by ChiTietDH.MaMH, MatHang.TenMH

Kết quả như sau (vào mục Data để xem):

Trang 10

- Sau đó tìm Mặt hàng có Tổng giá trị thấp nhất:

Select MaMH, TenMH, ThanhTien from "View – Tong thanh tien theo mat hang"

Where ThanhTien = (Select Min(ThanhTien) from "View – Tong thanh tien theo mat hang")

Kết quả như sau :

- Cuối cùng, tạo View theo Kết quả trên:

Create View "View - Min Tong thanh tien theo mat hang" as

Select MaMH, TenMH, ThanhTien from "View – Tong thanh tien theo mat hang"

Where ThanhTien = (Select Min(ThanhTien) from "View – Tong thanh tien theo mat hang")

* Tìm mặt hàng bán chạy nhất (có Tổng trị giá cao nhất) Hiển thị MaMH, TenMH, TongSoTien

- Tìm Mặt hàng có Tổng giá trị cao nhất:

Select MaMH, TenMH, ThanhTien from "View – Tong thanh tien theo mat hang"

Where ThanhTien = (Select Max(ThanhTien) from "View – Tong thanh tien theo mat hang")

Kết quả như sau :

- Cuối cùng, tạo View theo Kết quả trên:

Create View "View - Min Tong thanh tien theo mat hang" as

Select MaMH, TenMH, ThanhTien from "View – Tong thanh tien theo mat hang"

Where ThanhTien = (Select Max(ThanhTien) from "View – Tong thanh tien theo mat hang")

Trang 11

* Tìm mặt hàng được khách đặt hàng nhiều nhất (có số lần đặt hàng lớn nhất) Hiển thị MaMH, TenMH, SoLanDatHang

- Trước hết, tạo View để chứa số lần đặt hàng của các mặt hàng

Create View "View - Dem Mat hang" as

Select ChiTietDH.MaMH, MatHang.TenMH, Count(ChiTietDH.MaMH) as SoLan From ChiTietDH Inner Join MatHang On ChiTietDH.MaMH = MatHang.MaMH

Group by ChiTietDH.MaMH, MatHang.TenMH

- Kết quả như sau:

- Tiếp tục các mặt hàng được đặt hàng nhiều nhất

Select MaMH, TenMH, SoLan from "View - Dem Mat hang"

Where SoLan = (Select Max(SoLan) from "View - Dem Mat hang")

- Kết quả như sau:

* Tìm Khách hàng có Tổng số tiền đặt hàng trung bình trên một hoá đơn là lớn nhất Hiển thị MaKH, TenKH, SoTienTB_HD

- Trước hết, tạo View để chứa số lượng hoá đơn của các khách hàng

Create View "View - So luong Hoa don" as

SELECT DonDH.MaKH, KhachHang.TenKH, Count(DonDH.MaKH) AS [SoLuongHD]

FROM KhachHang INNER JOIN DonDH ON KhachHang.MaKH = DonDH.MaKH

GROUP BY DonDH.MaKH, KhachHang.TenKH

Trang 12

- Kết quả như sau:

- Trong “View – Tong Thanh tien theo Khach hang” đã có Tổng số tiền của từng Khách hàng, Đem số này chia cho Số lượng HĐ là có kết quả:

Create View "View - So tien TB tren HD" as

SELECT "View - So luong Hoa don".MaKH, "View - So luong Hoa don".TenKH,

"View - Thanh tien theo Khach hang"."Tong So Tien" / "View - So luong Hoa don".SoLuongHD as TBSoTienHD

FROM "View - So luong Hoa don" INNER JOIN "View - Thanh tien theo Khach

hang" ON "View - Thanh tien theo Khach hang".MaKH = "View - So luong Hoa don".MaKH

- Kết quả như sau:

- Cuối cùng tìm khách hàng có số tiền TB trên hoá đơn cao nhất:

SELECT MaKH, TenKH, TBSoTienHD

From "View - So tien TB tren HD"

Where TBSoTienHD = (Select Max(TBSoTienHD) from "View - So tien TB tren HD")

- Kết quả như sau:

Trang 13

- Tạo View cho truy vấn:

Create View "View - Max So tien TB tren HD" as

SELECT MaKH, TenKH, TBSoTienHD

From "View - So tien TB tren HD"

Where TBSoTienHD = (Select Max(TBSoTienHD) from "View - So tien TB tren HD")

* Tìm các Khách hàng không có đặt hàng trong tháng 5/2004 Hiển thị MaKH, TenKH

- Trước hết, tạo View để tìm các khách hàng có đặt hàng trong tháng 5/2004:

Create View "View - Khach hang dat hang thang 5/2004" as

SELECT CONVERT(VARCHAR(10),NgayGH,103) as [Ngay GH], DonDH.MaKH,

KhachHang.TenKH

FROM KhachHang INNER JOIN (DonDH INNER JOIN ChiTietDH ON DonDH.MaDH =

ChiTietDH.MaDH) ON KhachHang.MaKH = DonDH.MaKH

Where NgayGH >= '2004/05/01' And NgayGH <= '2004/05/31'

- Kết quả như sau:

- Sau đó tìm các khách hàng có trong danh sách KhachHang nhưng không có trong danh sách trên

Create View "View - Khach hang khong dat hang thang 5/2004" as

Select KhachHang.MaKH, KhachHang.TenKH from KhachHang

where KhachHang.MaKH not in (Select MaKH from "View - Khach hang dat hang thang 5/2004")

- Kết quả như sau:

Trang 14

* Tìm các Mặt hàng không có khách hàng nào đặt hàng Hiển thị MaMH, TenMH

- Trước hết, tạo View để tìm các mặt hàng có đặt hàng trong tất cả các đơn đặt hàng:

Create View "View - Mat hang co dat hang" as

Select Distinct ChiTietDH.MaMH, MatHang.TenMH from ChiTietDH Inner Join MatHang on ChiTietDH.MaMH = MatHang.MaMH

- Kết quả như sau:

- Tiếp tục tìm các mặt hàng không được đặt hàng:

Create View "View - Mat hang khong co dat hang" as

Select MaMH, TenMH from MatHang

Where MaMH not in

(Select MaMH from "View - Mat hang co dat hang")

- Kết quả như sau:

Trang 16

* Tạo Database QuanLySinhVien

- Trước hết, nếu đã có QuanLySinhVien thì xoá đi, sau đó tạo và Chọn QuanLySinhVien để làm việc:

If Exists (Select Name from Sys.Databases Where Name=N'QuanLySinhVien')

Drop Database QuanLySinhVien;

Create Database QuanLySinhVien;

Use QuanLySinhVien;

- Chọn Refresh để xem kết quả:

* Tạo Table SinhVien

- Trước hết, nếu đã có Table SinhVien thì xoá đi, sau đó tạo lại Table SinhVien:

If Exists (Select Name from Sys.Tables Where Name=N'SinhVien') Drop Table SinhVien;

Create Table SinhVien

(

MaSV Int Not Null Primary Key Identity,

TenSV NVarChar(50) Not Null,

* Tạo Table MonHoc

- Nếu đã có Table MonHoc thì xoá đi, sau đó tạo lại Table MonHoc:

If Exists (Select Name from Sys.Tables Where Name=N'MonHoc') Drop Table MonHoc;

Create Table MonHoc

(

MaMH Int Not Null Primary Key Identity,

TenMH NVarChar(50),

DVHT Int

Trang 17

* Tạo Table KetQua

- Nếu đã có Table KetQua thì xoá đi, sau đó tạo lại Table KetQua:

If Exists (Select Name from Sys.Tables Where Name=N'KetQua') Drop Table KetQua;

Create Table KetQua

(

MaSV Int,

MaMH Int,

Diem Int,

Constraint Check_Diem Check (Diem Between 0 and 10),

Constraint Primary_Key Primary Key (MaSV, MaMH),

Constraint KhoaNgoai_SV_KQ Foreign Key (MaSV) References SinhVien (MaSV),

Constraint KhoaNgoai_MH_KQ Foreign Key (MaMH) References MonHoc (MaMH) )

* Nhập dữ liệu vào Table SinhVien

Insert Into Sinhvien

Select N 'Phạm Trung Tính', 'Nam', '03/30/1996', N 'Quảng Ninh', 'L01' Union All

Select N 'Trần Bảo Trọng', 'Nam', '12/14/1995', 'Hà Giang', 'L02' Union All

Select N 'Lê Thùy Dung', N 'Nữ', '05/12/1997', N 'Hà Nội', 'L03' Union All

Select N 'Lê Trường An', 'Nam', '11/20/1995', N 'Ninh Bình', 'L04' Union All

Select N 'Phạm Thị Hương Giang', N 'Nữ', '2/21/1999', N 'Hòa Bình', 'L02' Union All

Select N 'Đoàn Duy Thức', 'Nam', '4/12/1994', N 'Hà Nội', 'L01' Union All

Select N 'Dương Tuấn Thông', 'Nam', '4/12/1991', N 'Nam Định', 'L03' Union All

Select N 'Lê Thành Đạt', 'Nam', '4/15/1993', N 'Phú Thọ', 'L04'

- Bấm phím F5 (hoặc chọn Refresh), chọn dbo.SinhVien và mục Data để xem kết quả:

Trang 18

* Nhập dữ liệu vào Table MonHoc

Insert Into MonHoc

Select N 'Toán cao cấp', 3 Union All

Select N 'Mạng máy tính', 3 Union All

Select N 'Tin học đại cương', 4 Union All

Select N 'Hệ quản trị cơ sở dữ liệu', 2 Union All

Select N 'Cơ sở dữ liệu', 2

- Tương tự, xem kết quả như sau:

* Nhập dữ liệu vào Table KetQua

Insert Into Ketqua

Select 1,1,8 Union All

Select 1,2,5 Union All

Select 2,2,1 Union All

Select 3,2,7 Union All

Select 4,2,3 Union All

Select 1,3,7 Union All

Select 2,1,9 Union All

Select 4,1,2 Union All

Select 3,1,4 Union All

Select 2,3,2 Union All

Select 5,1,4 Union All

Select 6,1,2 Union All

Select 6,3,9 Union All

Select 6,2,7 Union All

Select 6,5,10

Trang 19

- Tương tự, xem kết quả như sau:

Ví dụ 1: Cho biết mã số, tên, điểm thi tất cả các môn của sinh viên Phạm Trung Tính

- Tìm điểm của sinh viên theo tên sinh viên:

Select MH.MaMH, TenMH, Diem

From SinhVien SV, MonHoc MH, KetQua KQ

Where SV.MaSV = KQ.MaSV and MH.MaMH = KQ.MaMH and TenSV = N'Phạm Trung Tính'

- Kết quả như sau:

Ví dụ 2: Cho biết mã số, tên, điểm thi tất cả các môn của sinh viên có mã sinh viên = 2

- Tìm điểm của sinh viên theo mã sinh viên:

Select MH.MaMH, TenMH, Diem

From SinhVien SV, MonHoc MH, KetQua KQ

Where SV.MaSV = KQ.MaSV and MH.MaMH = KQ.MaMH and SV.MaSV = 2

Trang 20

- Kết quả như sau:

Ví dụ 3: Cho biết mã số, tên môn và điểm thi ở những môn mà sinh viên Đoàn Duy Thức phải thi lại (điểm<5)

- Thực hiện:

Select MH.MaMH, TenMH, Diem

From SinhVien SV, MonHoc MH, KetQua KQ

Where SV.MaSV = KQ.MaSV and MH.MaMH = KQ.MaMH and Diem < 5

and TenSV = N'Đoàn Duy Thức'

- Kết quả như sau:

Ví dụ 4: Cho biết mã số, tên những sinh viên đã thi ít nhất là 1 trong 3 môn Cơ sở dữ liệu, cấu trúc dữ

liệu, mạng máy tính

- Thực hiện:

Select SV.MaSV, TenSV

From SinhVien SV, MonHoc MH, KetQua KQ

Where SV.MaSV = KQ.MaSV and MH.MaMH = KQ.MaMH and TenMH in (N'Cơ sở dữ liệu', N'Cấu trúc dữ liệu', N'Mạng máy tính')

- Kết quả như sau:

Ngày đăng: 24/10/2017, 17:20

HÌNH ẢNH LIÊN QUAN

Bấm phím [F9] để thực thi hoặc nút mũi tên xanh giống như hình trên - ■ Bài tập  MSSQL (SQL Server) có lời giải ■ Quản lý hàng hóa và điểm thi của sinh viên
m phím [F9] để thực thi hoặc nút mũi tên xanh giống như hình trên (Trang 2)

TỪ KHÓA LIÊN QUAN

w