Bài tập SQL quản lý công trình có loi giải

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

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  [831.13 KB, 22 trang ]

Cơ sở Dữ liệu MSSQL  Bài tập về Quản lý hàng hóa và Quản lý điểm của Sinh viên

Biên soạn: Th.s Nguyễn Anh Việt

Trang 1


Cơ sở Dữ liệu MSSQL  Bài tập về Quản lý hàng hóa và Quản lý điểm của Sinh viên
* Kết nối SQL Server
Chạy chương trình HeidiSQL [//www.heidisql.com/download.php?download=portable] và nối kết
vào SQL Server:

VIET-PC: Tên
máy

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]
* Tạo CSDL: Database QLHH
Kích chọn phần thực hiện Truy vấn SQL

rồi nhập lệnh

CREATE DATABASE "QLHH";

Bấm phím [F9] để thực thi hoặc nút mũi tên xanh giống như hình trên
USE "QLHH";

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,
PRIMARY KEY ["MaKH"]
]
;

Biên soạn: Th.s Nguyễn Anh Việt

Trang 2


Cơ sở Dữ liệu MSSQL  Bài tập về Quản lý hàng hóa và Quản lý điểm của Sinh viên
* 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

Biên soạn: Th.s Nguyễn Anh Việt

Trang 3


Cơ sở Dữ liệu MSSQL  Bài tập về Quản lý hàng hóa và Quản lý điểm của Sinh viên
* Nhập dữ liệu cho Table: MatHang

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

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

Biên soạn: Th.s Nguyễn Anh Việt

Trang 4



Cơ sở Dữ liệu MSSQL  Bài tập về Quản lý hàng hóa và Quản lý điểm của Sinh viên
* 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

Khoá
ngoại
Foreign

* 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:

Biên soạn: Th.s Nguyễn Anh Việt

Trang 5


Cơ sở Dữ liệu MSSQL  Bài tập về Quản lý hàng hóa và Quản lý điểm của Sinh viên
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 Bitis 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/05/01' And NgayGH
[select MIN[Diem] from KetQua where MaMH = 1]

- Kết quả như sau:

Ví dụ 7: Cho biết mã số và tên những sinh viên có điểm thi môn 1 lớn hơn điểm thi môn 1 của sinh
viên 3.
- 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 MH.MaMH = 1 and Diem >

[Select Diem From KetQua Where MaMH = 1 and MaSV = 3]

Biên soạn: Th.s Nguyễn Anh Việt

Trang 21


Cơ sở Dữ liệu MSSQL  Bài tập về Quản lý hàng hóa và Quản lý điểm của Sinh viên
- Kết quả như sau:

Ví dụ 8: Cho biết số sinh viên phải thi lại môn Cơ sở dữ liệu.
- Thực hiện:
Select COUNT[*] as N'Số sv thi lại'
From MonHoc MH, KetQua KQ
Where MH.MaMH = KQ.MaMH and TenMH = N'Mạng máy tính' and Diem < 5

- Kết quả như sau:

Ví dụ 9: Cho biết MaSV, TenSV, Điểm của các sinh viên phải thi lại môn Cơ sở dữ liệu.
- Thực hiện:
Select SV.MaSV, SV.TenSV, KQ.Diem
From MonHoc MH, KetQua KQ, SinhVien SV
Where MH.MaMH = KQ.MaMH and TenMH = N'Mạng máy tính' and Diem < 5 and
SV.MaSV=KQ.MaSV

- Kết quả như sau:

Biên soạn: Th.s Nguyễn Anh Việt

Trang 22




Chủ Đề