Tải bản đầy đủ (.pdf) (37 trang)

BÀI TẬP THỰC HÀNH ĐỀ CƯƠNG BÀI GIẢNG HỌC PHẦN: 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 (819.93 KB, 37 trang )

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN

KHOA CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ THÔNG TIN

BÀI TẬP THỰC HÀNH
ĐỀ CƯƠNG BÀI GIẢNG
HỌC PHẦN: CƠ SỞ DỮ LIỆU

ĐạiDỮ
học LIỆU
Trình
độ đào tạo
HỌC
PHẦN:
CƠ:SỞ
Hệ đào tạo : Chính quy
Chuyên ngành : Kỹ thuật Phần mềm
Trình độ đào tạo : Đại học
Hệ đào tạo : Chính quy

Lưu hành nội bộ


MỤC LỤC
Bài 16: Thực hành về câu lệnh CREATE DATABASE/ TABLE, ALTER TABLE, DROP TABLE...... 3
16.1. Nhắc lại lý thuyết .......................................................................................................................... 5
16.2.

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


16.3.

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

Bài 17: Thực hành về RBTV .................................................................................................................... 11
17.1. Nhắc lại lý thuyết ........................................................................................................................ 11
17.2.

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

17.3. Bài tập thực hành ......................................................................................................................... 14
Bài 18: Thực hành về cập nhật dữ liệu..................................................................................................... 15
18.1. Nhắc lại lý thuyết ........................................................................................................................ 15
18.2. Bài tập mẫu.................................................................................................................................. 16
18.3. Bài tập thực hành ......................................................................................................................... 18
Bài 19: Thực hành truy vấn cơ bản .......................................................................................................... 19
19.1. Nhắc lại lý thuyết ........................................................................................................................ 19
19.2. Bài tập mẫu.................................................................................................................................. 21
19.3. Bài tập thực hành ......................................................................................................................... 22
Bài 20: Thực hành truy vấn lồng và các phép toán tập hợp ..................................................................... 23
20.1. Nhắc lại lý thuyết ........................................................................................................................ 23
20.2. Bài Tập mẫu ................................................................................................................................ 26
20.3. Bài tập thực hành ......................................................................................................................... 27
Bài 21: Thực hành hàm kết hợp và gom nhóm ........................................................................................ 28
21.1. Nhắc lại lý thuyết ........................................................................................................................ 28
21.2. Bài tập mẫu.................................................................................................................................. 30
21.3. Bài tập thực hành ......................................................................................................................... 32
Bài 22: Thực hành một số dạng truy vấn khác......................................................................................... 33
22.1. Nhắc lại lý thuyết ........................................................................................................................ 33
22.2. Bài tập mẫu.................................................................................................................................. 34

22.3. Bài tập thực hành ......................................................................................................................... 34
Bài 23: Kiểm tra thực hành ...................................................................................................................... 36

1


2


Bài 16: Thực hành về câu lệnh CREATE DATABASE, CREATE TABLE,
ALTER TABLE, DROP TABLE
Mục tiêu: Học xong bài học, người học có khả năng:
- Vận dụng thành thạo các câu lệnh CREATE DATABASE, create table để tạo một cơ sở dữ liệu và tạo
các bảng
- Sử dụng thành thạo các câu lệnh alter table, drop table để sửa, xoá các bảng trong CSDL.
- Áp dụng kiến thức đã học vào trong tình huống thực tế.

CHO CSDL QLMUONSACH GỒM CÁC BẢNG SAU
1.

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

Char

Mã lĩnh vực

10

tenLV

Nvarchar

Tên lĩnh vực

50

2.

NXB: Thông tin về nhà xuất bản

Tên trường

Kiểu dữ liệu

Mô tả

Độ rộng

maNXB


char

Mã nhà xuất bản

10

tenNXB

Nvarchar

Tên nhà xuất bản

50

diaChi

Nvarchar

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

50

dienThoai

char

Điện thoại

10


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

Kiểu dữ liệu

Mô tả

Độ rộng

maTG

char

mã tác giả

10

tenTG

Nvarchar

Tên tác giả

25

diaChi

Nvarchar

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


50

dienThoai

char

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

10

4.Bảng DauSach: 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

char

mã đầu sách

10
3



tenSach

Nvarchar

tên sách

50

namXB

int

năm xuất bản

ngayNhap

DateTime

Ngày nhập

soLuong

int

Số lượng

maLV

char


Mã lĩnh vực

10

maNXB

char

Mã nhà xuất bản

10

maTG

char

Mã tác giả

10

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

Kiểu dữ liệu

Mơ tả

Độ rộng

maSach


char

Mã sách

10

maDS

char

Mã đầu sách

10

tinhTrang

Nvarchar

Tình trạng sách

10

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

Kiểu dữ liệu

Mô tả


Độ rộng

Sothe

char

Số thẻ thư viện

10

hoTen

Nvarchar

Họ tên

50

ngaySinh

DateTime

ngày sinh

tenLop

Nvarchar

Lớp


15

Gt

Nvarchar

Giới tính

3

7. PhieuMuon: thơng tin về phiếu mượn
Tên trường

Kiểu dữ liệu

Mô tả

Độ rộng

Sophieu

char

Mã phiếu mượn

10

Sothe

char


Mã thẻ thư viện

10

maSach

char

Mã sách

10

ngayMuon

DateTime

Ngày mượn sách

ngayTra

DateTime

Ngày trả sách

Ràng buộc: ngày trả phải sau hoặc
bằng ngày

mượn..(Ràng buộc


này phải khai báo mức bảng)

4


16.1. 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,…
Ví dụ: Tạo CSDL có tên QLTV
CREATE DATABASE QLTV
Sau khi tạo song bảng này ta ấn F5 để thực thi, sau khi thực thi trên thư mục DATA CỦA thư
mục cài đặt, sẽ có 2 file dữ liệu được tạo ra trên đĩa: QLTV.MDF là file dữ liệu và
QLTV_LOG.LDF là file nhật ký.
Hoặc:

Sales ở thư mục Thu
saledat.mdf, salelog.ldf như sau:
Tạo 1 CSDL có tên

trong ổ D với 2 tệp dữ liệu và nhật ký là

USE master;
GO
CREATE DATABASE Sales
ON
( NAME = Sales_dat,
FILENAME = 'D:\thu\saledat.mdf', -- thư mục thu trong ổ D đã tồn tại
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )

LOG ON
( NAME = Sales_log,
FILENAME = 'D:\thu\salelog.ldf', -- thư mục thu trong ổ D đã tồn tại
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB ) ;
GO
CREATE TABLE
5


- Bảng là một cấu trúc để cất giữ các bộ của quan hệ.Có khn 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
CREATE TABLE NHAN_VIEN (maNV char(11) constraint p _NV Primary key, hoten
Varchar(25), Ngaysinh datetime, chucvu varchar(20), diachi varchar(30), luong float);
trong VD trên ta tạo ra một ràng buộc là p_NV được định nghĩa là khóa chính.

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 (maNV, Hoten) từ bảng NHAN_VIEN SELECT maNv,
hoten 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..)
6


+ 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 cột giadinh kiểu char (1) vào bảng R1
ALTER TABLE R1 ADD giadinh char (1)
VD2: Thay đổi kiểu dữ liệu của cột diachi nvarchar (30) trong R1 thành diachi Nvarchar(20):
ALTER TABLE R1 ALTER COLUMN diachi Nvarchar (20)
VD3: Xóa cột diachi khỏi bảng R1
ALTER TABLE R1 Drop COLUMN diachi
VD4: Xóa bỏ ràng buộc trường khố tại cột Manv trong R1
ALTER TABLE R1 DROP constraint NV_prim
Trong đó, NV_prim là tên ràng buộc khóa chính của bảng R1.
Lưu ý: Khi xóa một cột của một bảng nào đó đang có ràng buộc thì phải xóa ràng buộc trước
khi tạo bảng đó.
c. Lệnh DROP
- Dùng để xố bỏ một bảng, khi ta xố 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
16.2. Bài tập làm mẫu
1. Sử dụng câu lệnh SQL tạo bảng NXB trong CSDL QLMUONSACH
- Ta nhận thấy với bảng NXB, trường maNXB chính là khóa chính của bảng, các trường
tenNXB, diaChi ta 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
7


môi trường là hệ quản trị SQL Server 2008 trở lên:

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.
Lưu ý:
Trong quá trình làm việc với CSDL cần lưu ý tên của Database làm việc hiện hành trong
mục 3 của hình vẽ trên (Đây là tên CSDL làm việc hiện hành).


- Tạo database có tên QLTV
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:

8


Muốn thao tác với CSDL này, dùng câu lệnh:
USE QLTV
mục đích để cho hiểu thị Database có tên QLTV muốn thao tác trong mục 3 của hình vẽ
trên.
Hoặc có thể tạo CSDL QLTV trong một thư mục có sẵn giống với CSDL ví dụ có

saledat.mdf, salelog.ldf trong thư mục “D:\thu” như trên.
Để tạo bảng NXB ta sử dụng câu lệnh sau đây:
CREATE TABLE NXB
(
maNXB char(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 NXB 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 NXB
(maNXB char(10) constraint p_NXB primary key,
tenNXB varchar(50) not null,
diaChi varchar(50) not null,

dienThoai varchar(10) null )
Lưu ý: Có thể tạo một cấu trúc bảng chưa có khóa chính sau đó dùng câu lệnh thêm ràng buộc
để tạo khóa chính. Tuy nhiêu, những cột ý định tham gia vào khóa chính khơng được phép rỗng
9


(phải là không rỗng - not null).
- Để xem cấu trúc bảng NXB vừa tạo ra, ta dùng câu lệnh sau:

Exec sp_help nxb
Để xem thông tin về các ràng buộc của bảng nxb

Exec sp_helpconstraint nxb
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 NXB alter column tenNXB varchar (40) not null
3. Sử dụng câu lệnh SQL xóa bảng NXB.
- Để xóa bảng ta sử dụng câu lệnh drop như sau:
Drop table NXB
16.3. 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 với tên QLTV_hotensv ở trên
2. Tạo các bảng trong CSDL QLTV_hotensv (các ràng buộc khóa chính, khóa ngoại)
3. Thêm cột idSach vào bảng Sach
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 NhapSach.
6.
7.
8.
9.


Thay đổi kiểu dữ liệu của cột Đơn giá trong bảng NhapSach thành FLOAT.
Xóa các bảng trong CSDL vừa tạo.
Xóa CSDL đã tạo ra.
Tạo lại các cấu trúc bảng và thiết lập các ràng buộc khóa chính, khóa ngoại.

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.

10


Bài 17: Thực hành về RBTV
Mục tiêu: Học xong bài học, người học có khả năng:
- Thành thạo việc sử dụng các ràng buộc khi thiết kế CSDL trong các tình huống cụ thể.


o
o
o
o
o
o
o


17.1. Nhắc lại lý thuyết
Có các loại ràng buộc sau:
NOT NULL
NULL

UNIQUE
DEFAULT
PRIMARY KEY
FOREIGN KEY / REFERENCES
CHECK
Cách đặt tên cho ràng buộc:
CONSTRAINT <Ten_RBTV> <RBTV>
17.2. Bài tập làm mẫu

Ví dụ: Đặ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),
GIOITINH 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
11



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 NXB
(
maNXB char(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 NXB
(
maNXB char(10) constraint p_NXB primary key, tenNXB varchar(50), diaChi
varchar(50), dienThoai varchar(10))
Cách 2:
CREATE TABLE NXB
(
maNXB char(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_RBTV1> <LOẠI RBTV>,
CONSTRAINT <Ten_RBTV2> <LOẠI 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_GIOITINH trên cột GIOITINH của bảng

NHANVIEN:
ALTER TABLE NHANVIEN ADD CONSTRAINT c_GIOITINH CHECK (GIOITINH
IN („Nam‟, „Nu‟))
Hoặc:
ALTER TABLE NHANVIEN ADD CONSTRAINT c_Gioitinh CHECK
(GIOITINH='nam' OR GIOITINH='nu')
Chú ý: Ngôn ngữ SQL không phân biệt chữ hoa, chữ thường.
12


Ví dụ 1:
- Tạo bảng PHONGBAN:
CREATE TABLE PhongBan
(maphong char(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 char(10) vào bảng NHANVIEN:
ALTER TABLE NHANVIEN ADD maphong char(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 ThamgiaDT (masv CHAR(10), madt CHAR(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 (Điều kiện: bảng
PHONGBAN khơng có bảng nào tham chiếu đến)
ALTER TABLE PHONGBAN DROP CONSTRAINT P_PHONG
- Xóa ràng buộc Check trên cột Gioitinh của bảng NHANVIEN:
ALTER TABLE NHANVIEN DROP CONSTRAINT C_GIOITINH
13


17.3. 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 (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 DauSach đảm bảo phải
>=10.
2. Tạo ràng buộc trên cột tenSach trong bảng Dausach sao cho mỗi đầu sách có duy nhất
một tên. u_ts
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). d_nn
4. Xóa hết ràng buộc tại các cột trong các bảng trong CSDL QLTV. (Đối với ràng buộc
khóa chính và khóa ngoại, ta phải xóa ràng buộc trên bảng tham chiếu trước, bảng
bị tham chiếu sau)

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ằng cách thêm các ràng buộc vào các cấu trúc bảng đã tồn tại)
6. Kiểm tra lại tất cả các cột, các ràng buộc trên các bảng trong CSDL để thay đổi cho
phù hợp với thực tế.
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.

14


Bài 18: Thực hành về cập nhật dữ liệu
Mục tiêu: Học xong bài học, người học có khả năng:
- Vận dụng thành thạo các câu lệnh cập nhật dữ liệu để giải quyết các bài tập trong phần bài tập
thực hành.
- Áp dụng kiến thức đã học vào trong tình huống thực tế.

18.1. Nhắc lại lý thuyết
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 để xố 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 xố 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
15


18.2. Bài tập mẫu
1. 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
các bảng:
Tacgia:
maTG
tenTG
diaChi
dienThoai
Tg001

Tô Phương Lan

Hà Nội

04 7892345

Tg002


Đỗ Xuân Lôi

Đồng Nai

078 789223

NXB
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

LinhVuc
maLV

tenLV

CNTT

Công Nghệ Thông Tin

DauSach.
maDS

tenSach

1010111 Lý thuyết CSDL

namXB

ngaynhap

soluong maLV maNXB

maTG

2007

12/09/2008 60


cntt

Nxb01

Tg002

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

12/01/2009 19

cntt

Nxb02

Tg001

với C#
1011112 Tốn cao cấp

03/09/2005 40

tt

Nxb02

Tg002

2004

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, việc nhập thành công khi các giá trị tại các cột (thuộc tính, trường)
phải giống với danh sách các cột cả về số lượng và kiểu dữ liệu; sử dụng câu lệnh
UPDATE: để thay đổi giá trị của một hoặc nhiều trường của một bảng nào đó; câu
lệnh DELETE: để 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 thực hiện thêm được một bản ghi hoặc nhiều bản ghi
cho mỗi lần thực hiện câu lệnh. Để đơn dễ hiểu ta thực hiện trường hợp thêm 1 bản
16


ghi cho 1 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.
- Với các bảng trong CSDL, ta phải nhập dữ liệu vào bảng bị tham chiếu trước, bảng
tham chiếu sau. Nghĩa trong ví dụ này, ta phải nhập dữ liệu vào các bảng Tacgia, NXB
và Linhvuc trước; bảng Dausach nhập sau.
Bài làm:
1. Nhập dữ liệu vào các bảng
- Nhập dữ liệu vào bảng Tacgia:
INSERT INTO Tacgia (MaTg, tenTG, diaChi, dienThoai)
VALUES („Tg001‟, „Tô Phương Lan‟, „Hà Nội‟, „04 7892345‟)
INSERT INTO Tacgia (MaTg, tenTG, diaChi, dienThoai)
VALUES („Tg002‟, „Đỗ Xuân Lôi‟, „Đồng Nai, „078 789223‟)
- Nhập dữ liệu vào bảng NXB:
INSERT INTO NXB (MaNXB, tenNXB, diaChi, dienThoai)
VALUES („Nxb01‟, „Nhà xuất bản giáo dục‟, „Hà Nội‟, „04 7892345‟)
INSERT INTO NXB (MaNXB, tenNXB, diaChi, dienThoai)

VALUES („Nxb02‟, „Nhà xuất bản đồng nai‟, „Đồng Nai‟, „078 789223‟)
- Nhập dữ liệu vào bảng Linhvuc:
INSERT INTO Linhvuc (maLV, tenLV)
VALUES („CNTT‟, „Công Nghệ Thông Tin‟)
- Nhập dữ liệu vào bảng Dausach:
INSERT INTO DauSach
VALUES („1010111‟, „Lý thuyết CSDL, 2007,‟ 12/09/2008‟,60, „CNTT‟, „Nxb01‟,
Tg002‟);
INSERT INTO DauSach
VALUES („1011111‟, „Lập trình hướng đối tượng với C#‟, 2008,‟ 12/01/2009‟, 19
, „CNTT‟, „Nxb02‟, „Tg001‟);
Bản ghi thứ 3 không nhập được vào bảng DAUSACH do lỗi khóa ngoại (khóa ngoại
maLV có giá trị TT chưa tồn tại trong bảng bị tham chiếu linhvuc).

2. delete FROM DauSach WHERE maDS like ‘%11’;
17


3. update DauSach Set maDS =’1010110’
WHERE maDS = ‘1010111’;
18.3. Bài tập thực hành
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 TacGia (tối thiểu 10 bản ghi trong 1 bảng), Chẳng
hạn:
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 NXB
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

Hà Nội

04 2230498

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

tenLV

CNTT

Công Nghệ Thông Tin

Dt

Điện- Điện tử

MTK


May và thiết kế

TT

Toán

Sinh viên tự thêm dữ liệu vào các bảng còn lại trong CSDL của bài thực hành số 1, gồm các
bảng: DauSach, Sach, Docgia, PhieuMuon. Lưu ý việc nhập dữ liệu trên các bảng có chứa
khóa ngoại: Dữ liệu tại cột khóa ngoại phải lấy tại cột trong bảng bị tham chiếu. chẳng hạn,
bảng DauSach có 3 khóa ngoại tham chiếu đến 3 bảng linhvuc, NXB, tacgia nên dữ liệu tại
các cột MaTG, MaNXB, MaLV trong bảng Dausach phải lấy dữ liệu tại các cột tương ứng
trong các bảng NXB, tacgia, linhvuc.
18


Chú ý việc nhập dữ liệu tại các cột mang kiểu dữ liệu datetime. Nên dùng câu lệnh SELECT

GETDATE() để xem dữ liệu ngày tháng của hệ thống máy tính hiện thị như thế nào để
định dạng giá trị tại cột mang kiểu dữ liệu datetime cho phù hợp.
4. Thay đổi mã của tác giả Phạm Ngọc Thạch thành „Tg005‟
5. Thay đổi tên tác giả có mã „TG007‟ thành „Đỗ Xn 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ả 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. Tăng số lượng của đầu sách có mã „DS01‟ lên gấp rưỡi.
10. Giảm số lượng đầu sách có mã „DS02‟ xuống 20%.
11. Sửa giới tính của độc giả có mã „DG02‟ thành „Nam‟.
12. Xóa tất cả các dữ liệu của bảng LINHVUC.

Bài 19: Thực hành truy vấn cơ bản

Mục tiêu: Học xong bài học, người học có khả năng:
- Vận dụng thành thạo các câu lệnh truy vấn cơ bản để giải quyết các bài tập trong phần bài tập
thực hành.
- Rèn luyện tính sáng tạo, tư duy logic.

19.1. 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
19


Phép toán: > , < , <= , >=, <> , LIKE và BETWEEN, IN, NOT IN
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 TacGia ta thực hiện câu truy vấn sau:
SELECT maTG, tenTG FROM TacGia
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
IN
Trong danh sách các giá trị
Lưu ý: Trong một số phiên bản của SQL, phép tố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 DauSach
WHERE namXB >= 2004 and namXB <= 2008
20


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 DauSach
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).
Lưu ý: Khi giá trị là dữ liệu kiểu text thì phải có cặp dấu ‘ ’ bao giá trị đó.
19.2. Bài tập mẫu
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à „Sky20984‟
Hướng dẫn:
- Ta nhận thấy thông tin về các nhà xuất bản có trong bảng NXB. Để 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 DocGia
- Thông tin về đầu sách được lưu trong bảng DauSach
Bài làm:
a) SELECT tenNXB as [Nhà xuất bản] FROM NXB;
b) SELECT * FROM DauSach WHERE maDS like „101%‟;

c) Câu này là một truy vấn trên 2 bảng nên phải nối giữa 2 bảng thơng qua khóa
21


chính, khố ngoại.
SELECT tenSach
FROM DauSach ds INNER JOIN LinhVuc lv ON ds.MaLV = lv.MaLV
WHERE tenLV= „Công nghệ thông tin‟
ORDER BY tenSach;
d) SELECT * FROM DocGia WHERE soThe =‟sv10118734‟;
19.3. Bài tập thực hành
Bài 1: 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 trong ngày hôm nay (ngày hiện tại).
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 độc giả đang mượn sách.
4. 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.
5. Hiển thị tất cả tác giả viết cuốn sách „C# nâng cao‟.
6. Hiển thị tất cả tác giả có địa chỉ ở Hà Nội
7. Hiển thị tất cả độc giả sinh ngày năm 15/10/1988.
8. Hiển thị thông tin về các độc giả sinh năm 1987.
9. Hiển thị thơng tin của các độc giả giới tính nữ đã mượn sách có tên “CSDL”.
10. Hiển thị thơng tin của các độc giả có giới tính nam sinh vào tháng 5 và đã mượn sách
của tác giả có mã „tg006‟.
Bài 2: 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‟.
22


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‟.

Bài 20: Thực hành truy vấn lồng và các phép toán tập hợp
Mục tiêu: Học xong bài học, người học có khả năng:
- Rèn luyện kỹ năng về việc nhận biết một câu lệnh truy vấn lồng.
- Biết cách áp dụng các câu lệnh truy vấn lồng trong tình huống cụ thể.
- Vận dụng các phép tốn tập hợp trên quan hệ (bảng)

20.1. Nhắc lại lý thuyết
- 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]
23


[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>
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 DauSach WHERE maDS NOT IN (SELECT maDS
FROM PhieuNhap WHERE ngayNhap BETWEEN '1/1/2007' AND '31/12/2007');
câu lệnh SELECT có thể lồng nhau ở nhiều mức
truy vấn con thường trả về một tập các giá trị

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
24


×