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