You are on page 1of 12

Nội dung trình bày

Chương 5 ƒ Giới thiệu


ƒ Định nghĩa dữ liệu
Ngôn ngữ truy vấn SQL ƒ Cập nhật dữ liệu
ƒ Truy vấn dữ liệu

Giới thiệu Định nghĩa dữ liệu


ƒ SQL (Structured Query Language) ƒ Ngôn ngữ
• Ngôn ngữ cấp cao.
• Mô tả lược đồ cho các quan hệ.
• 1970, phát triển bởi IBM.
• Được chuẩn hóa bởi ANSI và ISO • Mô tả miền giá trị cho các thuộc tính.
- SQL-86. • Mô tả ràng buộc toàn vẹn.
- SQL-92.
- SQL-99. • Chỉ mục trên mỗi quan hệ.
ƒ Gồm ƒ Gồm các lệnh
• Ngôn ngữ định nghĩa dữ liệu. • CREATE / DROP DATABASE
• Ngôn ngữ thao tác dữ liệu.
• Ngôn ngữ định nghĩa khung nhìn. • CREATE / DROP / ALTER TABLE
• Ngôn ngữ phân quyền và bảo mật. • CREATE / DROP DOMAIN

Ngôn ngữ truy vấn SQL 1


Kiểu dữ liệu (1) Kiểu dữ liệu (2)
ƒ Chuỗi ký tự
ƒ Số • Chuỗi có độ dài cố định
• Số nguyên - CHARACTER(n) (CHAR(n))
• Chuỗi có độ dài thay đổi
- INTEGER (INT) - CHARACTER VARYING(n) (VARCHAR(n))
- SMALL INTEGER (SMALLINT) • Chuỗi ký tự unicode
- NATIONAL CHARACTER(n)
• Số thực - NATIONAL CHARACTER VARYING (n)
• Giá trị mặc định n = 1.
- FLOAT[n]
ƒ Chuỗi Bit
- REAL • BIT(n)
- DOUBLE PRECISION • BIT VARYING(n)
ƒ Ngày, giờ
• Số thập phân • DATE
- DECIMAL(p,n) • TIME
• TIMESTAMP

Tạo và hủy CSDL Tạo bảng (1)


ƒ CREATE TABLE <tên bảng> (
ƒ CREATE DATABASE <tên csdl>
<tên thuộc tính> <kiểu dữ liệu> [<RBTV>],
• create database CsdlCongty <tên thuộc tính> <kiểu dữ liệu> [<RBTV>],
...
ƒ DROP DATABASE <tên csdl> [RESTRICT |
[<RBTV>]
CASCADE] )
• drop database CsdlCongty ƒ RBTV
• NOT NULL
• NULL
• UNIQUE
• DEFAULT
• PRIMARY KEY
• FOREIGN KEY / REFERENCES
• CHECK

Ngôn ngữ truy vấn SQL 2


Tạo bảng (2) Tạo bảng (3)
ƒ Ví dụ ƒ Đặt tên cho RBTV
create table NHANVIEN ( • CONSTRAINT <tên RBTV> <RBTV>
Ho varchar(15) not null, ƒ Ví dụ
Dem varchar(20),
create table PHONGBAN (
Ten varchar(15) not null,
Ten varchar(15) unique,
MaNV char(9) not null,
MaPB int not null,
Ngsinh date,
TrPhong varchar(9) not null,
Dchi varchar(30),
NgNhanChuc date,
GTinh char,
constraint PB_PK primary key (MaPB),
Luong decimal(10,2),
constraint PB_TrPh foreign key (TrPhong) references
MaGSat char(9),
NHANVIEN (MaNV) on delete set null on update cascade
MaPhong int not null
)
)

Xóa bảng Sửa bảng (1)


ƒ DROP TABLE <tên bảng> [RESTRICT | ƒ ALTER TABLE <tên bảng> ADD COLUMN <tên
CASCADE] thuộc tính> <kiểu dữ liệu> [<RBTV>]
• Ví dụ
ƒ DROP TABLE <tên bảng>
alter table NHANVIEN add column DThoai char(10)
ƒ Ví dụ ƒ ALTER TABLE <tên bảng> DROP COLUMN <tên
drop table PHONGBAN thuộc tính>
• Ví dụ
alter table NHANVIEN drop column DThoai
ƒ ALTER TABLE <tên bảng> ALTER COLUMN <tên
thuộc tính> <kiểu dữ liệu mới>
• Ví dụ
alter table NHANVIEN alter column GTinh int

Ngôn ngữ truy vấn SQL 3


Sửa bảng (2) Tạo và xóa miền giá trị
ƒ ALTER TABLE <tên bảng> ADD CONSTRAINT ƒ CREATE DOMAIN <tên kiểu dữ liệu mới> AS <kiểu
<tên RBTV> <RBTV> dữ liệu cơ bản>
• Ví dụ • Ví dụ
alter table NHANVIEN add constraint NV_Luong check create domain Diachi as varchar(100)
(Luong > 0) ƒ DROP DOMAIN <tên kiểu dữ liệu>
ƒ ALTER TABLE <tên bảng> DROP CONSTRAINT
<tên RBTV>
• Ví dụ
alter table NHANVIEN drop constraint NV_Luong

Cập nhật dữ liệu (1) Cập nhật dữ liệu (2)


ƒ Chèn dữ liệu ƒ Xóa dữ liệu
• Chèn từng dòng • DELETE FROM <tên bảng> [WHERE <điều
- INSERT INTO <tên bảng> [(<danh sách thuộc tính>)] kiện>]
VALUES (<danh sách giá trị>) • Ví dụ
- Ví dụ - delete from NHANVIEN where MaPhong = 5
+ insert into DUAN (TenDA, MaDA, Diadiem, Phong) values
('San pham X',1,'Tan Binh',5) - delete from NHANVIEN
+ insert into DUAN values ('San pham X',1,'Tan Binh',5)
• Chèn nhiều dòng
- INSERT INTO <tên bảng> [(<danh sách thuộc tính>)]
<lệnh truy vấn>

Ngôn ngữ truy vấn SQL 4


Cập nhật dữ liệu (3) Cập nhật dữ liệu (4)
PHONGBAN TenPB MaPB TrPhong NgNhanChuc ƒ Sửa dữ liệu
Nghiên cứu 5 888665555 19/06/1981
• UPDATE <tên bảng>
Điều hành 4 987987987 01/01/1995
SET <tên thuộc tính> = <giá trị mới>,
DIADIEM_PHG MaPB Diadiem <tên thuộc tính> = <giá trị mới>,
5 Tân Bình ...
5 Thủ Đức [WHERE <điều kiện>]
5 Phú Nhuận
• Ví dụ
4 Gò Vấp
- update DUAN
set Diadiem = ‘Hanoi’, Phong = 4
DUAN TenDA MaDA Diadiem Phong
where Maso=10
Sản phẩm X 1 Tân Bình null
5
- update NHANVIEN
Sản phẩm Y 2 Thủ Đức null
5
set Luong = 1.1 * Luong

Truy vấn dữ liệu Phép toán quan hệ


ƒ Cú pháp ƒ Trong đó ƒ π<dstt>(R) ƒ π<dstt>(σ<đkc>(R))
• SELECT <dstt> • <dstt>: danh sách thuộc tính select <dstt> select <dstt>
FROM <dsb> của quan hệ kết quả. from R from R
[WHERE <đk>] • <dsb>: danh sách bảng liên ƒ σ<đkc>(R) where <đkc>
[GROUP BY <dstt nhóm>] quan đến câu truy vấn. select *
[HAVING <đk nhóm>] • <đk>: điều kiện để chọn hoặc from R
ghép các bộ. where <đkc>
[ORDER BY <dstt sắp xếp>]
• <dstt nhóm>: danh sách ƒ R×S
ƒ Kết quả của lệnh truy vấn thuộc tính để nhóm các bộ. select *
là một bảng. • <đk nhóm>: điều kiện chọn from R, S
ƒ Bảng trong SQL có thể các nhóm.
ƒ R <đkk> S
chứa các bộ trùng nhau. • <dstt sắp xếp>: danh sách
select *
các thuộc tính và thứ tự sắp
from R, S
xếp tương ứng.
where <đkk>

Ngôn ngữ truy vấn SQL 5


Ví dụ Phép toán tập hợp
ƒ Tìm các nhân viên làm việc trong phòng số 4. ƒ SQL hổ trợ các phép toán ƒ (SELECT <dstt> FROM <dsb>
• σMaPB = 4(NHANVIEN) WHERE <đk>)
• UNION (Hội)
• select * UNION [ALL]
• EXCEPT (Hiệu).
from NHANVIEN (SELECT <dstt> FROM <dsb>
• INTERSECT (Giao).
where MaPB = 4 WHERE <đk>)
• Đặc điểm ƒ (SELECT <dstt> FROM <dsb>
ƒ Cho biết họ, tên, giới tính và mức lương của các nhân viên. - Các dòng giống nhau bị loại WHERE <đk>)
• πHo, Ten, GTinh, Luong(NHANVIEN) trong bảng kết quả.
EXCEPT [ALL]
• select Ho, Ten, GTinh, Luong - Các bảng tham gia phép
(SELECT <dstt> FROM <dsb>
from NHANVIEN toán phải có tính khả hợp
WHERE <đk>)
ƒ Cho biết tên các trưởng phòng ƒ Giữ lại các dòng giống ƒ (SELECT <dstt> FROM <dsb>
• πHo, Ten(PHONGBAN TrPhg=MaNV NHANVIEN) nhau WHERE <đk>)
• select Ho, Ten • UNION ALL INTERSECT [ALL]
from NHANVIEN, PHONGBAN • EXCEPT ALL (SELECT <dstt> FROM <dsb>
where TrPhg = MaNV • INTERSECT ALL WHERE <đk>)

Đặt tên Phép toán số học


ƒ Đặt tên trong mệnh đề SELECT: ƒ +, –, *, / có thể áp dụng cho các giá trị số trong mệnh đề
SELECT
select count(*) as ‘Tong so nhan vien’ select 1.1 * SUM(Luong) as ‘Luong moi’
from NHANVIEN from NHANVIEN
ƒ Đặt tên trong mệnh đề FROM: NHANVIEN ... Luong ... Luong moi
• Đặt tên cho bảng 40000 44000
select NV.Ho,
select NV.Ten. PB.Ten PB.Ten
NV.Ho, NV.Ten. 30000 33000
from NHANVIEN, PHONGBAN
from NHANVIEN as NV, PHONGBAN as PB 38000 41800
where MaPB
where= NV.MaPB
MaPB = PB.MaPB 25000 27500
• Đặt tên cho bảng và thuộc tính
select * ƒ +, - có thể áp dụng cho các giá trị kiểu ngày giờ
from PHONGBAN AS PB(Ten, Maso, MaTrPhg, Ngay) select NgNhanChuc + 150 as ‘Cong Ngay’
from PHONGBAN

Ngôn ngữ truy vấn SQL 6


Phép toán so sánh và luận lý Phép toán so sánh chuỗi
ƒ Dùng trong mệnh đề WHERE hoặc HAVING để xây dựng ƒ LIKE <mẫu đối sánh> ƒ Tìm nhân viên họ Nguyen
các điều kiện chọn và điều kiện kết. [ESCAPE <kí tự thoát>] • select MaNV, Ho, Ten from
• =, <, ≤, >, ≥, <> NHANVIEN
ƒ Mẫu đối sánh where Ho LIKE ‘Nguyen%’
• BETWEEN <giá trị> AND <giá trị>
• Chuỗi ký tự để so sánh.
• AND, OR, NOT ƒ Tìm nhân viên họ Nguyen_
• % - thay cho một đoạn ký tự
ƒ Tìm các nhân viên phòng số 5 có lương giữa 30.000 và tùy ý.
• select MaNV, Ho, Ten from
40.000 NHANVIEN
• _ - thay cho một ký tự tùy ý. where Ho LIKE ‘Nguyen\_%
• select *
from NHANVIEN ƒ Ký tự thoát escape ‘\’
where (Luong >= 30000) and (Luong <= 40000) and Phg = 5 • Ký tự để loại bỏ chức năng
• select * đặc biệt của % và _.
from NHANVIEN • Có thể dùng ký tự bất kỳ
where (Luong between 30000 and 40000) and Phg = 5 không xuất hiện trong mẫu
đối sánh.

Khử các dòng giống nhau Các hàm tập hợp


ƒ select Luong ƒ SQL không tự động loại các bộ ƒ SQL cung cấp 5 hàm tập hợp:
from NHANVIEN trùng nhau • SUM(<tên thuộc tính>) - tính tổng các giá trị của thuộc tính
• Tốn thời gian so sánh và sắp • MAX(<tên thuộc tính>) - tìm giá trị lớn nhất của thuộc tính
Luong xếp.
• MIN(<tên thuộc tính>) - tìm giá trị nhỏ nhất của thuộc tính
• Sử dụng cho các truy vấn thống
40000 • AVG(<tên thuộc tính>) - tính giá trị trung bình của thuộc tính

30000 • COUNT(*) - đếm số dòng của bảng
ƒ select distinct Luong
38000 • COUNT(<tên thuộc tính>) - đếm các giá trị khác null của thuộc tính
from NHANVIEN
25000 ƒ Ví dụ
43000 Luong select sum(Luong) AS TongLuong,
25000 40000 max(Luong) AS LuongCaonhat,
30000 min(Luong) AS LuongThapnhat,
25000
38000
avg(Luong) AS LuongTB
from NHANVIEN
25000
43000
ƒ Chỉ được xuất hiện trong mệnh đề SELECT hoặc HAVING

Ngôn ngữ truy vấn SQL 7


Gom nhóm các bộ Ví dụ
ƒ GROUP BY - HAVING ƒ Với mỗi phòng, cho biết số dự án phòng đó điều phối.
SELECT <dstt nhóm> [, <dshth>] select Phong, count(MaDA) as ‘So du an’
FROM <dsb> from DUAN
[WHERE <đk>] group by Phong
GROUP BY <dstt nhóm>
[HAVING <đk nhóm>] DUAN TenDA MaDA Diadiem Phong Phong So du an
ƒ Trong đó Sản phẩm X 1 Tân Bình 5 5 3
• <dstt nhóm>: danh sách thuộc tính gom nhóm Sản phẩm Y 2 Thủ Đức 5 4 2
• <dshth>: danh sách các hàm tập hợp.
Sản phẩm Z 3 Phú Nhuận 5 1 1
• <đk>: điều kiện chọn hoặc điều kiện kết.
Tin học hóa 10 Gò Vấp 4
• <đk nhóm>: điều kiện lựa chọn các nhóm.
Phúc lợi 30 Gò Vấp 4
ƒ Chú ý
Tái tổ chức 20 Phú Nhuận 1
• WHERE được thực hiện trước GROUP BY.
• HAVING chỉ xuất hiện khi có GROUP BY

Ví dụ Gom nhóm các bộ (4)


ƒ Cho biết mã số, tên dự án và số nhân viên tham DA.TenDA DA.MaDA ... TG.MaNV TG.MaDA ...
gia đối với những dự án có nhiều hơn 2 nhân viên Sản phẩm X 1 123456789 1
tham gia. Sản phẩm X 1 453453453 1
Sản phẩm Y 2 123456789 2
select DA.MaDA, DA.Ten, count(*) as ‘So nhan vien’
Sản phẩm Y 2 453453453 2
from DUAN as DA, THAMGIA as TG Sản phẩm Y 2 333445555 2
WHERE DA.MaDA=TG.MaDA ...
group by DA.MaDA, DA.Ten
having count(*) > 2

DA.MaDA DA.TenDA So nhan vien


2 Sản phẩm Y 3

Ngôn ngữ truy vấn SQL 8


Sắp xếp kết quả Ví dụ
ƒ ORDER BY ƒ Với mỗi nhân viên, cho biết mã nhân viên và mã dự án mà
• SELECT <dstt> nhân viên đó tham giá. Sắp xếp kết quả theo thứ tự tăng
FROM <dsb> dần của mã nhân viên và giảm dần của mã dự án.
[WHERE <đk>] • select MaNV, MaDA
from THAMGIA
ORDER BY <dstt sắp xếp> MaNV MaDA
order by MaNV, MaDA desc
• <dstt sắp xếp>: danh sách các cặp (tên thuộc tính, thứ tự 123456789 2
sắp xếp). 123456789 1
• Thứ tự: 333445555 20
- ASC - tăng dần. 333445555 10
- DESC - giảm dần. 333445555 3
- Mặc định là ASC.
333445555 2
...

So sánh với NULL Logic 3 chân trị


AND TRUE FALSE UNKNOWN
ƒ NULL ƒ Tìm các nhân viên không
TRUE TRUE FALSE UNKNOWN
• Không biết. có người giám sát
FALSE FALSE FALSE FALSE
• Không sẳn sàng. select MaNV, Ho, Ten
UNKNOWN UNKNOWN FALSE UNKNOWN
• Không thể áp dụng. from NHANVIEN
ƒ Tính toán và so sánh với where MaNQL is null
OR TRUE FALSE UNKNOWN
NULL ƒ Tìm các nhân viên có TRUE TRUE TRUE TRUE
• null + 3 → null. người giám sát FALSE TRUE FALSE UNKNOWN
• null > 3 → unknown. select MaNV, Ho, Ten
UNKNOWN TRUE UNKNOWN UNKNOWN
ƒ SQL cung cấp 2 phép toán from NHANVIEN
• IS NULL. where MaNQL is not null
NOT
• IS NOT NULL. TRUE FALSE
FALSE TRUE
UNKNOWN UNKNOWN

Ngôn ngữ truy vấn SQL 9


Truy vấn lồng So sánh tập hợp (1)
ƒ Truy vấn sử dụng các giá trị của truy vấn khác ƒ Phép toán
trong điều kiện so sánh. • IN - kiểm tra sự tồn tại của một giá trị trong một tập hợp.
• ALL - so sánh một giá trị với tất cả các giá trị của tập hợp.
SELECT <dstt> • ANY - so sánh một giá trị với một giá trị nào đó của tập hợp.
• ALL, ANY được kết hợp với các phép toán so sánh {=, <, ≤, >, ≥,
Truy vấn cha FROM <dsb> <>}.
WHERE <so sánh tập hợp> ( • EXISTS - kiểm tra sự tồn tại của kết quả của một câu truy vấn.
ƒ Cú pháp
SELECT <dstt>
• <tên thuộc tính> IN <truy vấn con>
FROM <dsb> Truy vấn con • <tên thuộc tính> <phép toán so sánh> ALL <truy vấn con>
WHERE <đk>) • <tên thuộc tính> <phép toán so sánh> ANY <truy vấn con>
• EXISTS <truy vấn con>

ƒ Chỉ xuất hiện trong mệnh đề WHERE.

Ví dụ Ví dụ
ƒ Tìm các nhân viên của ƒ Tìm các nhân viên của ƒ Cho biết tên nhân viên có ƒ Cho biết các nhân viên
phòng số 2 và 5. phòng ‘Nghiên cứu’. mức lương lớn hơn lương không tham gia các dự án
của các nhân viên phòng mà phòng số 5 quản lý.
select * select *
số 5. select MaNV
from NHANVIEN from NHANVIEN select * from THAMGIA
where MaPB in (2, 5) where MaPB = ( from NHANVIEN where MaDA not in (
select MaPB where Luong > ALL ( select MaNV
from PHONGBAN select Luong from DUAN
from NHANVIEN where Phg = 5)
Tập hợp tường minh where TenPB =
where MaPB = 5)
‘Nghiên cứu’)

Truy vấn con vô hướng

Ngôn ngữ truy vấn SQL 10


Truy vấn lồng phân cấp (1) Truy vấn lồng phân cấp (2)
NHANVIEN MaNV ... Luong Luong
ƒ Mệnh đề WHERE của truy vấn con không tham 888665555 55000 40000
chiếu đến thuộc tính của các bảng trong mệnh đề 333445555 40000 > ALL 30000
FROM của truy vấn cha. 123456789 30000 38000

ƒ Truy vấn con được thực hiện trước truy vấn cha. 666884444 38000 25000
453453453 25000
ƒ Ví dụ 987654321 43000
select * 999887777 25000
from NHANVIEN 987987987 25000

where Luong > ALL (


select Luong MaNV ... Luong
888665555 55000
from NHANVIEN
987654321 43000
where MaPB = 5)

Truy vấn lồng tương quan (1) Truy vấn lồng tương quan (2)
NHANVIEN MaNV ... Luong THANNHAN MaNV Ten ...
ƒ Mệnh đề WHERE của truy vấn con tham chiếu đến
888665555 55000 333445555 Anh
thuộc tính của các bảng trong mệnh đề FROM của
333445555 40000 333445555 The
truy vấn cha. 123456789 30000 987654321 An
ƒ Truy vấn con được thực hiện nhiều lần, mỗi lần 123456789 Minh
ứng với một bộ của truy vấn cha. 123456789 Anh
ƒ Tìm các nhân viên không có thân nhân nào
select * MaNV Ten ...
from NHANVIEN as NV 333445555 Minh
123456789 Anh
where not exists ( 333445555 Anh
123456789 The
select *
from THANNHAN as TN MaNV ... Luong
where TN.MaNV = NV.MaNV) 888665555 55000

Ngôn ngữ truy vấn SQL 11


Truy vấn lồng tương quan (3) Truy vấn lồng tương quan (4)
A B C S D E R A B C D E ƒ Biểu diễn bằng EXISTS. ƒ Tìm các nhân viên tham
α α 1 7 2 α α 1 7 2 SELECT R1.A, R1.B, R1.C
gia tất cả các dự án do
α β 12 2 5 α α 1 2 5
phòng số 5 quản lý.
FROM R as R1 select *
β α 23 α β 12 7 2 WHERE NOT EXISTS ( from NHANVIEN as NV
β β 3 β α 23 7 2 SELECT * where not exists (
β β 23 β β 3 1 10 FROM S select *
β β 12 β α 23 2 5 from DUAN as DA
WHERE NOT EXISTS (
where DA.Phong = 5 and
πA,B,C(R) β β 23 10 10 SELECT * not exists (
β β 12 1 2 FROM R as R2 select *
WHERE R2.D = S.D AND from THAMGIA as TG
R2.E = S.E AND where TG.MaNV =
R÷S A B C NV.MaNV
R2.A = R1.A AND
α α 1 and TG.MaDA =
R2.B = R1.B AND DA.MaNV))
β α 23
R2.C = R1.C))

Phép kết trong SQL Ví dụ


ƒ JOIN, INNER JOIN ƒ Cho biết tên các nhân viên ƒ Các phép kết có thể lồng
của phòng ‘Nghiên cứu’. nhau
• Dùng kết nối hai bảng trong mệnh đề FROM. select NV.Ho, NV.Dem, select DA.MaDA, PB.MaPB,
• SELECT <dstt> NV.Ten NV.Ten
FROM (<bảng 1> JOIN <bảng 2> ON <đkk>) from (NHANVIEN as NV join from ((DUAN as DA join
PHONGBAN as PB on PHONGBAN as PB
ƒ Các phép kết mở rộng: NV.MaPB = on DA.Phong =
• LEFT OUTER JOIN, LEFT JOIN. PB.MaPB) PB.Maso)
• RIGHT OUTER JOIN, RIGHT JOIN. where PB.Ten = ‘Nghiên cứu’ join NHANVIEN on
MaNQL = NV.MaNV)
• FULL OUTER JOIN, FULL JOIN. where Diadiem = ‘TpHCM’

Ngôn ngữ truy vấn SQL 12

You might also like