Bài thực hành cơ sở dữ liệu - Pdf 31

BÀI 1: THỰC HÀNH CÂU LỆNH CREATE DATABASE, CREATE TABLE,
ALTER TABLE, DROP TABLE
CHO CSDL QUẢN LÝ THƯ VIỆN GỒM CÁC BẢNG SAU
1.

Bảng tblDauSach: Lưu trữ thông tin của các đầu sách có trong thư viện
Tên trường

Kiểu dữ liệu

Mô tả

Độ rộng

maDS

varchar

mã đầu sách

4

tenSach

varchar

tên sách

50

namXB


maNXB

varchar

Mã nhà xuất bản

10

maTG

varchar

Mã tác giả

10

2.

3.

4.

Bảng tblDocGia: lưu trữ thông tin về độc gia
Tên trường

Kiểu dữ liệu

Mô tả


Lớp

5

Gt

varchar

Giới tính

4

tblLinhVuc: Thông tin về các lĩnh vực sách
Tên trường

Kiểu dữ liệu

Mô tả

Độ rộng

maLV

varchar

Mã lĩnh vực

10

tenLV

50

diaChi

varchar

Địa chỉ nhà xuất bản

50

dienThoai

varchar

Điện thoại

10

5. tblPhieuMuon: thông tin về phiếu mượn

1


6.

7.

Tên trường

Kiểu dữ liệu


DateTime

Nhày mượn sách

ngayTra

DateTime

Ngày trả sách

tblSach: Thông tin về sách
Tên trường

Kiểu dữ liệu

Mô tả

Độ rộng

maSach

varchar

Mã sách

10

maDS



tenTG

varchar

Tên tác giả

25

diaChi

varchar

Địa chỉ của tác giả

50

dienThoai

varchar

Điện thoại của tác giả

10

I. Nhắc lại lý thuyết
a. Lệnh CREATE
Lệnh này dùng để tạo ra các đối tượng như DATABASE, TABLE
CREATE TABLE
- Bảng là một cấu trúc để cất giữ các bộ của quan hệ.Có khuôn dạng hai chiều gồm

Cú pháp:
SELECT <ds cột> into <tên bảng mới>
from <Tên bảng>
[where <điều kiện>]
Với cấu trúc này, bảng tạo ra có cấu trúc và dữ liệu, tuy nhiên bảng mới không có ràng
buộc khóa chính.
VD: Tạo ra 1 bảng mới có tên là NVN (NV,họ_tên) từ bảng NHAN_VIEN
SELECT NV,họ_tên into NVN FROM NHAN_VIEN;
b. Lệnh ALTER
- Dùng để hoặc là thêm một hay nhiều trường vào bảng hoặc sửa đổi kiểu dữ liệu một
cột hiện tại và thêm hoặc thay đồi ràng buộc.
-Cú pháp:
ALTER TABLE TABLE_name ADD | ALTER |DROP option (colum
Datatype..)
+ ADD: thêm cột mới, hoặc ràng buộc
+ ALTER: sửa đổi kiểu dữ liệu của cột
+ DROP: xoá bỏ các ràng buộc, cột
VD1: thêm trường gia đình kiểu varchar(1) vào R1
ALTER TABLE R1 ADD gia đình varchar(1)
VD2: thay đổi trường Địa_chỉ Varvarchar(30) trong R1 thành Địa_Chỉ(20):
ALTER TABLE R1 ALTER COLUMN Địa_Chỉ varvarchar(20)
VD3: Xóa cột Địa_chỉ khỏi bảng R1
3


ALTER TABLE R1 Drop COLUMN Địa_Chỉ
VD4: huỷ bỏ ràng buộc trường khoá #NV trong R1
ALTER TABLE R1 DROP constraint NV_prim
c. Lệnh DROP
- Dùng để xoá bỏ một bảng, khi ta xoá bỏ một bảng thì tất cả các đối tượng gắn ở trên

nào của ngôn ngữ SQL, database đang được mở hiện thị ở 3.
- Tạo database có tên QLTV
4


create database QLTV
Bôi đen và dùng F5 để thực hiện câu lệnh n ày, khi đó hệ thống sẽ tạo ra một cơ sở
dữ liệu trên ổ đĩa với đường dẫn sau:

Muốn thao tác với CSDL này, dùng câu lệnh:
Use QLTV
Để tạo bảng tblNXB ta sử dụng câu lệnh sau đây:
CREATE TABLE tblNXB
(
maNXB varchar(10) primary key,
tenNXB varchar(50) not null,
diaChi varchar(50) not null,
dienThoai varchar(10) null )
Sau khi thực thi câu lệnh này, bảng tblNXB sẽ được tạo ra trong CSDL có tên QLTV, và
hệ thống sẽ tạo ra cho bảng 1 ràng buộc khóa chính với một tên do hệ thống quy định.
Muốn đặt tên ràng buộc cho khóa chính (tên ràng buộc là P_NXB), câu lệnh trên sẽ được
viết lại như sau:
CREATE TABLE tblNXB
(
maNXB varchar(10) constraint p_NXB primary key, tenNXB varchar(50)
not null, diaChi varchar(50) not null, dienThoai varchar(10) null )
- Để xem cấu trúc bảng TblNXB vừa tạo ra, ta dùng câu lệnh sau:

Exec sp_help tblnxb
5

A. RBTV


Có các loại ràng buộc sau:
o NOT NULL
o NULL
o UNIQUE
o DEFAULT
o PRIMARY KEY
o FOREIGN KEY / REFERENCES
o CHECK



Cách đặt tên cho ràng buộc:
CONSTRAINT <Ten_RBTV> <RBTV>

B. CẬP NHẬT DỮ LIỆU
Câu lệnh INSERT INTO được dùng để chèn dòng mới vào bảng.
Cú pháp:

- Chèn 1 bản ghi vào bảng:
INSERT INTO tên_bảng VALUES (giá_trị_1, giá_trị_2,....)
Bạn cũng có thể chỉ rõ các cột/trường nào cần chèn dữ liệu:
INSERT INTO tên_bảng (cột_1, cột_2,...) VALUES (giá_trị_1, giá_trị_2,....)
- Chèn nhiều bản ghi vào bảng từ một bảng khác:
INSERT INTO <Tên bảng>
SELECT Clause
Câu lệnh UPDATE được sử dụng để cập nhật/sửa đổi dữ liệu đã có trong bảng.
Cú pháp:

PHAI CHAR(3),
LUONG INT CONSTRAINT NV_LUONG_DF DEFAULT (10000),
MA_NQL CHAR(9),
PHG INT)


Muốn xem thông tin về các ràng buộc trong bảng, ta dùng câu lệnh sau:

Exec sp_helpconstraint NHANVIEN
Ràng buộc toàn vẹn tạo ra khi ta tạo ra các cấu trúc bảng hoặc sau khi tạo ra cấu trúc
bảng:
Ví dụ:
Cấu trúc tạo bảng sau có 1 ràng buộc khóa chính:


CREATE TABLE tblNXB
(
maNXB varchar(10) primary key, tenNXB varchar(50), diaChi archar(50), dienThoai
varchar(10))
với các này, hệ thống sẽ quy định tên của ràng buộc.
hoặc ta có thể viết theo cách khác như sau:
cách 1:
CREATE TABLE tblNXB
(
maNXB varchar(10) constraint p_NXB primary key, tenNXB varchar(50), diaChi
varchar(50), dienThoai varchar(10))
cách 2:
CREATE TABLE tblNXB
(
maNXB varchar(10) , tenNXB varchar(50), diaChi archar(50), dienThoai varchar(10),

- Thêm cột maphong Varchar(10) vào bảng NHANVIEN:
ALTER TABLE NHANVIEN ADD maphong varchar(10)
- Thêm ràng buộc khóa ngoại của bảng NHANVIEN và ràng buộc tham chiếu đến bảng
PHONGBAN thông qua cột Maphong:
ALTER TABLE NHANVIEN ADD f_NV FOREIGN key(maphong) REFERENCES
PHONGBAN(maPhong) ON DELETE CASCADE ON UPDATE CASCADE
- Tùy chọn:
ON DELETE CASCADE: Khi xóa dữ liệu bảng bị tham chiếu thì bảng tham chiếu sẽ bị
xóa theo.
ON UPDATE CASCADE: Khi sửa dữ liệu bảng bị tham chiếu thì bảng tham chiếu sẽ bị
sửa theo.
Ví dụ 2: Ràng buộc khóa chính gồm nhiều thuộc tính:
CREATE TABLE Thuctap(masv VARCHAR(10), madt VARCHAR(10) , NTT
NVARCHAR(25),
kqtt FLOAT CONSTRAINT c_kqtt CHECK(kqtt>0 AND kqtt

với C#
1011112 Lý thuyết CSDL

2004

101

Nxb03

Tg003

1011113 Lập trình mạng với C#

2007

101

Nxb02

Tg004

2. Viết câu truy vấn SQL thực hiện xóa các bản ghi có mã đầu sách kết thúc bằng xâu
‘11’.
3. Viết câu lệnh truy vấn SQL thực hiện sửa năm xuất bản của đầu sách có mã
1010111 thành 1010110.
Hướng dẫn
Để thực hiện sửa đổi dữ liệu ta thực hiện các câu lệnh: insert into : Thêm một bộ dữ
liệu vào CSDL; update: để thay đổi giá trị của một hoặc nhiều trường của một bảng


hiện tại (hàm Getdate() lấy ngày hiện hành).
4. Xóa hết ràng buộc tại các cột trong các bảng trong CSDL QLTV.
5. Tạo lại các ràng buộc khóa chính, khóa ngoại và các ràng buộc khác trên các bảng
trong CSDL QLTV.


Bài 2: Viết các câu lệnh SQL thực hiện các yêu
cầu sau:
1. Thêm các thông tin sau vào bảng tblTacGia
maTG

tenTG

diaChi

dienThoai

Tg001

Tô Phương Lan

Hà Nội

04 7892345

Tg002

Đỗ Xuân Lôi

Đồng Nai

Nhà xuất bản giáo dục

Hà Nội

04 7892345

Nxb02

Nhà xuất bản đồng nai

Đồng Nai

078 789223

Nxb03

Nhà xuất bản giao thông vận tải Hà Nội

04 3223049

Nxb04

Nhà xuất bản Kim Đồng

04 2230498

Hà Nội

3. Thêm các thông tin sau vào bảng tblLinhVuc
maLV


4. Thay đổi mã của tác giả Quách Tuấn Ngọc thành ‘Tg005’
5. Thay đổi tên tác giả có mã ‘TG007’ thành ‘Đỗ Xuân Lôi’
6. Thay đổi tên cuốn sách có mã ‘2010111’ thành ‘Kết cấu ô tô’
7. Xóa tất cả các độc giải có mã bắt đầu bằng chuỗi ‘10103’
8. Xóa tất cả các đầu sách được nhập vào ngày ‘20/6/2008’
9. Hiển thị tất cả các tác giả viết sách thuộc về lĩnh vực Công Nghệ Thông Tin.
10. Thực hiện các bài tập trong phần 18.3


Chú ý: Sinh viên làm các bài tập thực hành ở trên, cuối buổi thực hành nộp lại bài
làm cho giáo viên.


BÀI 3: TRUY VẤN DỮ LIỆU
I. Nhắc lại lý thuyết.
Cú pháp cơ bản của câu lệnh select
+ Gồm 3 mệnh đề
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <điều kiện>
- <danh sách các cột>: Tên các cột cần được hiển thị trong kết quả truy vấn
- <danh sách các bảng>: Tên các bảng liên quan đến câu truy vấn
- <điều kiện>: Biểu thức boolean xác định dòng nào sẽ được rút trích
Nối các biểu thức: AND, OR, và NOT
Phép toán: < , > , <= , >=, , =, LIKE và BETWEEN
Cú pháp
Cú pháp của câu lệnh SELECT như sau:
SELECT tên_các_cột
FROM tên_bảng

Lớn hơn hoặc bằng

= 2004) and (namXB
7. Hiển thị tất cả tác giả có địa chỉ ở Hà Nội
8. Hiển thị tất cả độc giả sinh ngày năm 15/10/1988.
………………


BÀI 4: TRUY VẤN DỮ LIỆU (TIẾP)
Mục tiêu:
Rèn luyện kỹ năng truy vấn trên nhiều bảng có sử dụng các toán tử: IN, LIKE,
BETWEEN.
Đề bài tập:
Cho CSDL QLDIEM gồm các bảng như sau:
Khoa(MaKhoa, TenKhoa)
MonHoc(MaMH, TenMH, SoTc)
SinhVien(MaSV, Hoten,Ngaysinh, Quequan, GioiTinh, MaKhoa)
KetQua(MaSV, MaMH, DiemL1, DiemL2 )
Hãy tạo CSDL và thiêt lập các ràng buộc theo mô tả dưới đây:
-Một khoa có nhiều sinh viên
-Một sinh viên có nhiều kết quả (một sinh viên học nhiều môn học).
-Một môn học có nhiều kết quả (mỗi sinh viên có 1 KQ riêng).
Sau đó nhập dữ liệu cho các bảng và thực hiện các yêu cầu sau đây:
1. Liệt kê tất cả các sinh viên, thông tin gồm MaSV, TenSV, GioiTinh. Tên sinh
viên viết Hoa, sắp xếp tên sinh viên theo thứ tự giảm dần trong bảng chữ cái.
2. Hiển thị thông tin của các sinh viên họ ‘Nguyễn’.
3. Hiển thị thông tin của các sinh viên gồm: Masv, Hoten, Tuoi (đây là thuộc tính
tự đặt).
4. Hiển thị thông tin của các sinh viên thuộc khoa ‘Công nghệ thông tin’ và có
điểm thi lần 1 các môn >=8.
5. Hiển thị thông tin của các môn học có số tín chỉ >=3 thuộc khoa có mã “KT”.
6. Hiển thị thông tin về các khoa có các sinh viên tên: ‘Lan’, ‘Mai’, ‘Hoa’.
7. Hiển thị thông tin của các sinh viên chưa tham gia thi bất kì môn nào. (chưa có

-

Toán tử EXCEPT: phép trừ

SELECT <ds cột> FROM <ds bảng> WHERE <điều kiện>
EXCEPT [ALL]
SELECT <ds cột> FROM <ds bảng> WHERE <điều kiện>
B. TRUY VẤN LỒNG
Cú pháp của câu truy vấn lồng


Ví dụ : trong cơ sở dữ liệu quản lý sách của thư viện trường ĐHSPKTHY, hiển thị
tên các đầu sách không được nhập trong năm 2007, chúng ta sẽ thiết kế câu truy vấn
như sau:
SELECT tenDS FROM tblDauSach WHERE maDS NOT IN (SELECT
maDS
FROM tblPhieuNhap
'31/12/2007' );

WHERE

ngayNhap

BETWEEN

'1/1/2007'

AND

 Các câu lệnh SELECT có thể lồng nhau ở nhiều mức

 IN
- <tên cột> IN <câu truy vấn con>
- Thuộc tính ở mệnh đề SELECT của truy vấn con phải có cùng kiểu dữ liệu với
thuộc tính ở mệnh đề WHERE của truy vấn cha
 EXISTS


- Không cần có thuộc tính, hằng số hay biểu thức nào khác đứng trước
- Không nhất thiết liệt kê tên thuộc tính ở mệnh đề SELECT của truy vấn con
Những câu truy vấn có ANY hay IN đều có thể chuyển thành câu truy vấn có
EXISTS

C. HÀM KẾT HỢP
Hàm count(), min(), max(), sum(), avg()
Cú pháp của hàm COUNT:
SELECT COUNT(tên_cột) FROM tên_bảng
Hàm COUNT(*):
Hàm COUNT(*) trả về số lượng các dòng được chọn ở trong bảng.
Hàm COUNT(column):
Hàm COUNT(column) sẽ trả về số lượng các dòng có giá trị khác NULL ở cột được
chỉ định.
Mệnh đề COUNT DISTINCT
Lưu ý: Các ví dụ dưới đây chỉ hoạt động với CSDL Oracle và MS SQL Server,
không hoạt động trên MS Access (chưa thử nhiệm với các hệ CSDL khác!)
Từ khoá DISTINCT và COUNT có thể được dùng chung với nhau để đếm số lượng
các kết quả không trùng nhau.
Cú pháp như sau:
SELECT COUNT(DISTINCT <Tên cột>) As ‘Ten_cot’ FROM table
SQL có sẵn khá nhiều hàm để thực hiện đếm và tính toán.
Cú pháp:

không thể nào kiểm tra được điều kiện với các hàm tập hợp.
Cú pháp của HAVING như sau:
SELECT tên_cột, SUM(tên_cột) FROM tên_bảng
GROUP BY tên_cột


HAVING SUM(tên_cột) điều_kiện giá_trị
II. Bài Tập mẫu
1. Hãy viết câu truy vấn lấy về tất cả các đầu sách có người mượn vào ngày ’20-92008’
Hướng dẫn:
Ta nhận thấy rằng ta cần lấy về thông tin của các cuốn sách có maDS trong bảng
tblDauSach trùng với maDS được mượn trong ngày ‘20/9/2008’.
Lời giải:
Select *
from tblDauSach
where maDS IN (select maDS
from tblSach
where maSach IN (select maSach
from tblPhieuMuon
where ngayMuon = ‘20/9/2008’))
2. Hãy viết câu truy vấn SQL thực hiện lấy về tất cả các cuốn sách không phải là
sách của NXB giao thông vận tải.
Hướng dẫn
Ta nhận thấy rằng ta cần lấy về các thông tin của các cuốn sách có maNXB khác với
maNXB của NXB Giao thông vận tải.
Lời giải
Select *
From tblDauSach
Where maNXB not in (select maNXB
From tblNXB

Select count(maDS) as [Số lượng đầu sách]
From tblDauSach
Where maTG in (select maTG from tblTacGia where tenTG = ‘Quách Tuấn Ngọc’)
3. Hiển thị số lượng sách của mỗi lĩnh vực có trong thư viện.
Hướng dẫn
Ta thực hiện gom nhóm số lượng đầu sách theo lĩnh vực.
Bài làm
Select maLV, sum(soLuong) as [Số Lượng]
From tblDauSach



Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status