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