Tải bản đầy đủ (.doc) (30 trang)

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

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 (462 KB, 30 trang )

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



int

năm xuất bản

4

ngayNhap

DateTime

Ngày nhập

8

soLuong

int

Số lượng

4

maLV

varchar

Mã lĩnh vực

10


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ả


Độ rộng

soThe

varchar

Số thẻ thư viện

4

hoTen

varchar

Họ tên

50

ngaySinh

DateTime

ngày sinh

4

tenLop

varchar


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


varchar

Tên lĩnh vực

50

tblNXB: Thông tin về nhà xuất bản
Tên trường

Kiểu dữ liệu

Mô tả

Độ rộng

maNXB

varchar

Mã nhà xuất bản

10

tenNXB

varchar

Tên nhà xuất bản


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


Mô tả

Độ rộng

Sophieu

varchar

Mã phiếu mượn

10

soThe

varchar

Mã thẻ thư viện

10

maSach

varchar

Mã sách

10

ngayMuon


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


varchar

Mã đầu sách

10

tinhTrang

varchar

Tình trạng sách

10

tblTacGia: Thông tin về tác giả
Tên trường

Kiểu dữ liệu

Mô tả

Độ rộng

maTG

varchar

mã tác giả

10


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ó các cột và hàng. Nó là yếu tố cơ bản cho các thao tác khác nhau. Có thể nói việc
tạo bảng là bước đầu tiên quan trọng nhất để thiết lập CSDL.
-Cú pháp của lệnh này:
CREATE TABLE table-name(colom_name type(size)..)
Khi tạo ra bảng chúng ta phải chỉ ra kiểu dữ liệu của cột và mỗi cột chỉ có thể có môt
kiểu dữ liệu duy nhất. Khi tạo bảng ta có thể đưa ra các ràng buộc
Các ràng buộc của các trường có thể là : primary key, foreign key , unique, not null ...
VD:Tạo bảng nhân viên
2


CREATE TABLE NHAN_VIEN (NV varchar(4) constraint p_NV Primary
key, ho_ten

Varchar(25),

Ng_sinh

datetime,

chứcvụ

varchar(20),

đia_chi

varchar(30), luong int);
trong VD trên ta tạo ra một ràng buộc là p_NV được định nghĩa là primary key

Ta cũng có thể tạo ra bảng mới với cấu trúc và dữ liệu từ 1 bảng khác.

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

bảng cũng bị loại bỏ.
Cú pháp:
DROP TABLE Name
VD:Xoá bỏ bảng Nhan_vien
DROP TABLE Nhan_vien
II.
1.

Bài tập làm mẫu
Sử dụng câu lệnh SQL tạo bảng tblNXB trong CSDL Quản lý thư viện

- Ta nhận thấy với bảng tblNXB, trường maNXB chính là khóa chính của bảng, các
trường tenNXB, diaChi ta yêu cầu không được trống, trường dienThoai có thể trống.
- Để tạo bảng ta sử dụng câu lệnh create table
- Để tạo khóa chính của bảng ta sử dụng ràng buộc primary key
Thực thi các câu lệnh này trong hệ quản trị CSDL access hoặc hệ quản trị CSDL SQL
server. Cài đặt hệ quản trị 2000 trở lên. Sau đây là cửa sổ soạn thạo và thực thi các câu
lệnh SQL trong môi trường là hệ quản trị SQL Server 2008:

2

1
3

Cửa sổ
soạn thảo
câu lệnh
SQL

Click vào 1, sẽ mở ra cửa sổ 2, cửa sổ này cho phép soạn thảo bất kỳ một câu lệnh

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



2. Sử dụng câu lệnh SQL sửa đổi độ rộng của trường tenNXB có độ rộng 40 ký tự.
Alter table tblNXB alter column tenNXB varchar(40) not null
3. Sử dụng câu lệnh SQL xóa bảng tblNXB.
- Để xóa bảng ta sử dụng câu lệnh drop như sau:
Drop table tblNXB
III.

Bài tập thực hành

Anh/Chị hãy dùng các câu lệnh SQL thực hiện các yêu cầu sau:
1. Tạo cơ sở dữ liệu Quản lý sách thư viện ở trên
2. Tạo các bảng trong CSDL Quản lý sách thư viện
3. Thêm cột idSach vào bảng tblDauSach
4. Thêm bảng nhapSach (gồm các trường maPhieuNhap, maDS, ngayNhap,
soLuong, đơn giá) vào CSDL trên.
5. Xóa các trường ngayNhap, soLuong của bảng tblDauSach.
6. Xóa cột idSach ở bảng tblDauSach
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.

6


BÀI 2: THỰC HÀNH VỀ RBTV, CẬP NHẬT DỮ LIỆU
I.

Nhắc lại lý thuyết:


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:

UPDATE tên_bảng
SET tên_cột = giá_trị_mới
WHERE tên_cột = giá_trị


Câu lệnh DELETE được dùng để xoá tất cả các dòng hoặc tất cả các dòng ra khỏi bảng.
Cú pháp:
Xóa những bản ghi thỏa mãn điều kiện:
DELETE FROM tên_bảng
WHERE <Điều kiện>
Xoá tất cả các dòng:
Đôi khi ta muốn xoá tất cả dữ liệu trong bảng nhưng vẫn giữ lại bảng cùng với cấu
trúc và tất cả các thuộc tính của bảng, ta có thể dùng câu lệnh:
DELETE FROM table_name
II.

Bài tập làm mẫu

1) Đặt tên ràng buộc khóa chính trên các cột: HoNV, MaNV, luong của bảng
NHANVIEN.
CREATE TABLE NHANVIEN (
HONV VARCHAR(10) CONSTRAINT NV_HONV_NN NOT NULL,
TENLOT VARCHAR(20) NOT NULL,
TENNV VARCHAR(10) NOT NULL,
MANV CHAR(9) CONSTRAINT NV_MANV_PK PRIMARY KEY,
NGSINH

DATETIME,

DCHI VARCHAR(50),

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),

constraint p_NXB primary key(MaNXB) )
với 2 cách này, ta tự đặt tên cho ràng buộc khóa chính là p_NXB.
- Cách 1, chỉ phù hợp với trường hợp ràng buộc khóa chính có 1 cột còn cách 2 thì có thể áp
dùng cho mọi trường hợp (số lượng cột tham gia ràng buộc >=1).


Câu lệnh thêm ràng buộc:
ALTER TABLE <Tên_bảng> ADD
CONSTRAINT <Ten_RBTV> <RBTV>,
CONSTRAINT <Ten_RBTV> <RBTV>,


Câu lệnh này sử dụng khi đã tạo xong cấu trúc bảng (bảng chưa có dữ liệu).
Ví dụ 1: Thêm ràng buộc check có tên c_PHAI trên cột PHAI của bảng NHANVIEN:
ALTER TABLE NHANVIEN ADD CONSTRAINT c_PHAI CHECK (PHAI IN (‘Nam’,
‘Nu’))
Hoặc:
ALTER TABLE NHANVIEN ADD CONSTRAINT c_phai CHECK(PHAI='nam' OR


PHAI='nu')
Chú ý: Ngôn ngữ SQL không phân biệt chữ hoa, chữ thường.
Ví dụ 1:
- Tạo bảng PHONGBAN:
CREATE TABLE PhongBan
(
maphong varchar(10) NOT NULL, tenphong varchar(50), diadiem varchar(50))
- Thêm ràng buộc khóa chính trên cột maphong:
ALTER TABLE PHONGBAN ADD CONSTRAINT P_PHONG primary key (maphong)
Lưu ý: Cột tham gia vào ràng buộc khóa chính phải NOT NULL.

- 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<=10),
CONSTRAINT p_tt PRIMARY key(masv,madt),
CONSTRAINT f1_tt FOREIGN key(masv) REFERENCES sv(masv) ON DELETE
CASCADE ON UPDATE CASCADE ,
CONSTRAINT f2_tt FOREIGN key(madt) REFERENCES dt(madt) ON DELETE
CASCADE ON UPDATE CASCADE )




Câu lệnh xóa ràng buộc:
ALTER TABLE <Tên_bảng> DROP CONSTRAINT <Tên_RBTV>

Ví dụ:
- Xóa ràng buộc khóa chính trên cột Maphong của bảng PHONGBAN:
ALTER TABLE PHONGBAN DROP CONSTRAINT P_PHONG

- Xóa ràng buộc Check trên cột Phai của bảng NHANVIEN:
ALTER TABLE NHANVIEN DROP CONSTRAINT C_PHAI

2 ) Hãy viết các câu truy vấn SQL thực hiện thêm các bản ghi sau vào bảng
tblDauSach.
maDS

tenSach

1010111 Phương pháp tính

namXB maLV maNXB

maTG

2007

111

Nx01

Tg002

1011111 Lập trình hướng đối tượng 2008

101

Nxb02

Tg001


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



nào đó; delete from: để thực hiện xóa một hoặc nhiều bộ dữ liệu trong một bảng nào
đó.
- Với mỗi câu lệnh insert into ta chỉ thực hiện thêm được một bộ bản ghi cho mỗi lần
thực hiện câu lệnh. Vì vậy cần thêm bao nhiêu bản ghi thì ta cần thực hiện bấy nhiêu
câu lệnh.
Lời giải:
1. insert into tblDauSach
values (‘1010111’, ‘Phương pháp tính’, 2007, ‘111’, ‘Nxb01’, ‘Tg002’);
insert into tblDauSach
values (‘1011111’, ‘Lập trình hướng đối tượng với C#’, 2008, ‘101’, ‘Nxb02’,
‘Tg001’);
insert into tblDauSach
values (‘1011112’, ‘Lý thuyết CSDL’, 2004, ‘101’, ‘Nxb03’, ‘Tg003’);
insert into tblDauSach
values (‘1011113’, ‘Lập trình mạng với C#’, 2007, ‘101’, ‘Nxb02’, ‘Tg004’);
2. delete from tblDauSach where maDS like ‘%11’;
3. update tblDauSach Set maDS =’1010110’
Where maDS = ‘1010111’ ;
II.

Bài tập thực hành

Bài 1: Anh/Chị hãy dùng các câu lệnh SQL thực hiện các yêu cầu sau (Sử dụng CSDL
của bài thực hành số 1):
1. Tạo ràng buộc kiểm tra có tên c_SL trên cột Soluong trong bảng tblDauSach đảm
bảo phải >=10.
2. Tạo ràng buộc trên cột tenSach trong bảng TblDausach sao cho mỗi đầu sách có
duy nhất một tên.
3. Tạo ràng buộc trên cột ngayNhap sao cho cột này nhận giá trị mặc định là ngày

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


078 789223

Tg003

Phạm Ngọc Thách

Hà Nội

04 3223049

Tg004

Nguyễn Văn Ba

Hà Nội

04 2230498

2. Thêm các thông tin sau vào bảng tblNXB
maNXB

tenNXB

diaChi

dienThoai

Nxb01


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


tenLV

101

Công Nghệ Thông Tin

102

Điện

103

Điện tử

111

Toán Tin

112

Toán ứng dụng

113

Hóa học

114

Vật liệu may


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

Để truy xuất nhiều cột ta liệt kê các cột sao cho mỗi cột đặt cách nhau bởi dấu phẩy.
Ví Dụ: Để truy xuất maTG và tenTG trong bảng tblTacGia ta thực hiện câu truy vấn
sau:
SELECT maTG, tenTG
FROM tblTacGia
Truy xuất tất cả các cột
Để truy xuất tất cả các cột từ bảng nào đó ta dùng ký hiệu * thay cho danh sách các
cột:
SELECT * FROM tên_Bảng;
Cú pháp mệnh đề WHERE trong câu lệnh SELECT như sau:
SELECT tên_cột[,…] FROM tên_bảng[,…]
WHERE tên_cột phép_toán giá_trị[and/or …]
Trong mệnh đề WHERE, các phép toán được sử dụng là
=
So sánh bằng
<>

So sánh không bằng

>

Lớn hơn


<

Nhỏ hơn

>=


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

<=

Nhỏ hơn hoặc bằng

BETWEEN

Nằm giữa một khoảng

LIKE

So sánh mẫu chuỗi

Lưu ý: Trong một số phiên bản của SQL, phép toán <> có thể được viết dưới dạng !=
Ví dụ 1: Để lấy về tất cả các cuốn sách được xuất bản từ năm 2004 đến năm 2008 ta
có câu truy vấn sau:
Select *
From tblDauSach
Where (namXB >= 2004) and (namXB <= 2008);
Ví dụ 2: Để lấy về tất cả tên các cuốn sách có mã là ‘1010111’. Ta sử dụng câu truy
vấn sau:
Select tenSach
From tblDauSach
Where maDS = ‘1010111’;
-Để loại bỏ các bộ giá trị (các hàng) trùng nhau ta thêm từ khoá Distinct vào sau
SELECT (trước đây SQL thêm từ khoá unique).
II. Bài tập mẫu
1.Dùng câu lệnh SQL thực hiện các yêu cầu sau:
a) Hiện thị tất cả các nhà xuất bản có trong trong CSDL.

b) Hiển thị tất cả các thông tin về các đầu sách có mã bắt đầu bằng ký tự :’101’
c) Hiển thị tất cả tên sách thuộc lĩnh vực ‘Công nghệ thông tin’, tên sách được sắp
xếp theo thứ tự từ A đến Z.
d) Hiển thị tất cả thông tin của độc giả có mã thẻ thư viện là ‘skh20984’
Hướng dẫn:
- Ta nhận thấy thông tin về các nhà xuất bản có trong bảng tblNXB. Để hiển thị tất cả
các nhà xuất bản có trong CSDL ta chỉ việc lấy ra tất cả các nhà xuất bản có trong
CSDL.
- Để kiểm tra một xâu có được bắt đầu bằng chuỗi ký tự nào đó ta sử dụng từ khóa
like
- Thông tin về các độc giả được lưu trong bảng tblDocGia


- Thông tin về đầu sách được lưu trong bảng tblDauSach
Lời giải
a) select tenNXB [Nhà xuất bản] from tblNXB;
b) select * from tblDauSach where maDS like ‘101%’;
c) select tenSach from tblDauSach ds, tblLinhVuc lv
where ((ds.MaLV = lv.MaLV) and (tenLV= ‘Công nghệ thông tin’))
order by tenSach;
d) select * from tblDocGia where soThe =’skh20984’;
III. Bài tập thực hành
Sử dụng các câu lệnh SQL thực hiện các truy vấn sau:
1. Hiển thị thông tin về các độc giả mượn sách ngày: 23/03/2005
2. Hiển thị tất cả các đầu sách của tác giả Quách Tuấn Ngọc
3. Hiển thị tất cả các sách có số lượng lớn hơn 100
4. Hiển thị tất cả các đọc giả đang mượn sách.
5. Hiển thị tất cả thông tin về sách thuộc về lĩnh vực ‘Kinh tế’, sắp xếp kết quả theo
trường ngayNhap.
6. Hiển thị tất cả tác giả viết cuốn sách ‘Pascal nâng cao’.

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ó

kết quả thi môn học).


BÀI 5: TRUY VẤN LỒNG, HÀM KẾT HỢP VÀ GOM NHÓM
I. Nhắc lại lý thuyết
A. CÁC PHÉP TOÁN TẬP HỢP
-

Toán tử UNION cho phép ta hợp các kết quả của hai hay nhiều truy vấn
thành một tập kết quả duy nhất. Cú pháp của phép hợp như sau:
Query_1
[UNION [ALL] Query_2 ]
...
[UNION [ALL] Query_N ]
[ORDER BY clause]
[COMPUTE clause]
Trong đó Query_1 có dạng như sau: SELECT select_list
[INTO clause]
[FROM clause]
[WHERE clause]
[GROUP BY clause]
[HAVING clause]

-

Toán tử INTERSECT: phép giao

SELECT <ds cột> FROM <ds bảng> WHERE <điều kiện>
INTERSECT [ALL]
SELECT <ds cột> FROM <ds bảng> WHERE <điều kiện>

-

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

 Câu truy vấn con thường trả về một tập các giá trị
 Các câu truy vấn con trong cùng một mệnh đề WHERE được kết hợp bằng phép
nối logic
 Mệnh đề WHERE của câu truy vấn cha
- <biểu thức> <so sánh tập hợp> <truy vấn con>
- So sánh tập hợp thường đi cùng với một số toán tử
IN, NOT IN, ALL, ANY hoặc SOME
- Kiểm tra sự tồn tại
EXISTS, NOT EXISTS
Truy vấn lồng phân cấp
+ Mệnh đề WHERE của truy vấn con không tham chiếu đến thuộc tính của các quan
hệ trong mệnh đề FROM ở truy vấn cha
+ Khi thực hiện, câu truy vấn con sẽ được thực hiện trước
Ví dụ:
SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG


Truy vấn lồng tương quan:
+ Mệnh đề WHERE của truy vấn con tham chiếu ít nhất một thuộc tính của các quan hệ
trong mệnh đề FROM ở truy vấn cha
+ Khi thực hiện, câu truy vấn con sẽ được thực hiện nhiều lần, mỗi lần tương ứng với một
bộ của truy vấn cha
Ví dụ:
SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG

Toán tử In và Exists

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



Cú pháp để gọi hàm trong câu lệnh SQL như sau:
SELECT function(tên_cột) As FROM tên_bảng
Hàm AVG(column)
Hàm AVG trả về giá trị trung bình tính theo cột được chỉ định của các dòng được
chọn. Các giá trị NULL sẽ không được xét đến khi tính giá trị trung bình.
Hàm MAX(column)
Hàm MAX trả về giá trị lớn nhất trong cột. Các giá trị NULL sẽ không được xét đến.
Hàm MIN(column)
Hàm MAX trả về giá trị nhỏ nhất trong cột. Các giá trị NULL sẽ không được xét đến.
Lưu ý: Hàm MIN và MAX cũng có thể áp dụng cho các cột có dữ liệu là chuỗi văn
bản. Dữ liệu trong cột sẽ được so sánh theo thứ tự tăng dần của từ điển
Hàm SUM(column)
Hàm SUM trả về tổng giá trị của cột. Các giá trị NULL sẽ không được xét đến.
D. HÀM GOM NHÓM
Cú pháp
Các hàm tập hợp (ví dụ như SUM) thông thường cần thêm chức năng của mệnh đề
GROUP BY.
GROUP BY...
Mệnh đề GROUP BY...được thêm vào SQL bởi vì các hàm tập hợp (như SUM) trả về
một tập hợp của các giá trị trong cột mỗi khi chúng được gọi, và nếu không có
GROUP BY ta không thể nào tính được tổng của các giá trị theo từng nhóm riêng lẻ
trong cột.
Cú pháp của GROUP BY như sau:
SELECT tên_cột, SUM(tên_cột) FROM tên_bảng GROUP BY tên_cột
Điều kiện trên nhóm
HAVING...
Mệnh đề HAVING...được thêm vào SQL vì mệnh đề WHERE không áp dụng được
đối với các hàm tập hợp (như SUM, AVG, COUNT,…). Nếu không có HAVING, ta

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

Where tenNXB = ‘NXB Giao Thông Vận Tải’)
2. Viết câu truy vấn SQL hiển thị tất cả các mặt hàng có số lượng nhập lớn
nhất. Hướng dẫn
- Sử dụng hàm Max để tìm số lượng của một đầu sách được nhập.
- Chỉ nhận về các bản ghi có số lượng nhập = số lượng lớn nhất
Bài làm


Select * from tblDauSach
Where maDS IN ( select maDS
from tblPhieuNhap
where soLuong = (Select max(soLuong) From TblDausach);
Hoặc:
Select * from tblDauSach
Where maDS IN ( select maDS
from tblPhieuNhap
where soLuong >=ALL (Select soLuong From TblDausach);
2. Đếm số đầu sách có trong thư viện.
Hướng dẫn
Vì mỗi đầu sách có một mã đầu sách, do đó để đếm số đầu sách có trong thư viện ta
chỉ cần đếm số lượng bản ghi có trong bảng tblDauSach.
Bài làm
Select count(maDS) as [Số lượng đầu sách]
From tblDauSach
3. Đếm số lượng đầu sách của tác giả ‘Quách Tuấn Ngọc’ có trong thư viện.
Hướng dẫn
Vì mỗi đầu sách có một mã đầu sách, do đó để đếm số đầu sách có trong thư viện ta
chỉ cần đếm số lượng bản ghi có trong bảng tblDauSach thỏa mãn điều kiện có maTG
là mã của tác giả ‘Quách Tuấn Ngọc’.
Lời giải

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


×