Bài giảng Cơ sở dữ liệu - Chương 5: Ngôn ngữ truy vấn SQL
Bài giảng Cơ sở dữ liệu - Chương 5: Ngôn ngữ truy vấn SQL
Nội dung trình bày
Giới thiệu
Định nghĩa dữ liệu
Cập nhật dữ liệu
Truy vấn dữ liệu
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cơ sở dữ liệu - Chương 5: Ngôn ngữ truy vấn SQL", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Cơ sở dữ liệu - Chương 5: Ngôn ngữ truy vấn SQL
Ngôn ngữ truy vấn SQL
Chương 5
Nội dung trình bày
Giới thiệu
Định nghĩa dữ liệu
Cập nhật dữ liệu
Truy vấn dữ liệu
Giới thiệu
SQL (Structured Query Language)
Ngôn ngữ cấp cao.
1970, phát triển bởi IBM.
Được chuẩn hóa bởi ANSI và ISO
SQL-86.
SQL-92.
SQL-99.
Gồm
Ngôn ngữ định nghĩa dữ liệu.
Ngôn ngữ thao tác dữ liệu.
Ngôn ngữ định nghĩa khung nhìn.
Ngôn ngữ phân quyền và bảo mật.
Định nghĩa dữ liệu
Ngôn ngữ
Mô tả lược đồ cho các quan hệ.
Mô tả miền giá trị cho các thuộc tính.
Mô tả ràng buộc toàn vẹn.
Chỉ mục trên mỗi quan hệ.
Gồm các lệnh
CREATE / DROP DATABASE
CREATE / DROP / ALTER TABLE
CREATE / DROP DOMAIN
Kiểu dữ liệu (1)
Số
Số nguyên
INTEGER (INT)
SMALL INTEGER (SMALLINT)
Số thực
FLOAT[n]
REAL
DOUBLE PRECISION
Số thập phân
DECIMAL(p,n)
Kiểu dữ liệu (2)
Chuỗi ký tự
Chuỗi có độ dài cố định
CHARACTER(n) (CHAR(n))
Chuỗi có độ dài thay đổi
CHARACTER VARYING(n) (VARCHAR(n))
Chuỗi ký tự unicode
NATIONAL CHARACTER(n)
NATIONAL CHARACTER VARYING (n)
Giá trị mặc định n = 1.
Chuỗi Bit
BIT(n)
BIT VARYING(n)
Ngày, giờ
DATE
TIME
TIMESTAMP
Tạo và hủy CSDL
CREATE DATABASE
create database CsdlCongty
DROP DATABASE [RESTRICT | CASCADE]
drop database CsdlCongty
Tạo bảng (1)
CREATE TABLE (
[],
[],
...
[]
)
RBTV
NOT NULL
NULL
UNIQUE
DEFAULT
PRIMARY KEY
FOREIGN KEY / REFERENCES
CHECK
Tạo bảng (2)
Ví dụ
create table NHANVIEN (
Ho varchar(15) not null,
Dem varchar(20),
Ten varchar(15) not null,
MaNV char(9) not null,
Ngsinh date,
Dchi varchar(30),
GTinh char,
Luong decimal(10,2),
MaGSat char(9),
MaPhong int not null
)
Tạo bảng (3)
Đặt tên cho RBTV
CONSTRAINT
Ví dụ
create table PHONGBAN (
Ten varchar(15) unique,
MaPB int not null,
TrPhong varchar(9) not null,
NgNhanChuc date,
constraint PB_PK primary key (MaPB),
constraint PB_TrPh foreign key (TrPhong) references NHANVIEN (MaNV) on delete set null on update cascade
)
Xóa bảng
DROP TABLE [RESTRICT | CASCADE]
DROP TABLE
Ví dụ
drop table PHONGBAN
Sửa bảng (1)
ALTER TABLE ADD COLUMN []
Ví dụ
alter table NHANVIEN add column DThoai char(10)
ALTER TABLE DROP COLUMN
Ví dụ
alter table NHANVIEN drop column DThoai
ALTER TABLE ALTER COLUMN
Ví dụ
alter table NHANVIEN alter column GTinh int
Sửa bảng (2)
ALTER TABLE ADD CONSTRAINT
Ví dụ
alter table NHANVIEN add constraint NV_Luong check (Luong > 0)
ALTER TABLE DROP CONSTRAINT
Ví dụ
alter table NHANVIEN drop constraint NV_Luong
Tạo và xóa miền giá trị
CREATE DOMAIN AS
Ví dụ
create domain Diachi as varchar(100)
DROP DOMAIN
Cập nhật dữ liệu (1)
Chèn dữ liệu
Chèn từng dòng
INSERT INTO [()] VALUES ()
Ví dụ
insert into DUAN (TenDA, MaDA, Diadiem, Phong) values ('San pham X',1,'Tan Binh',5)
insert into DUAN values ('San pham X',1,'Tan Binh',5)
Chèn nhiều dòng
INSERT INTO [()]
Cập nhật dữ liệu (2)
Xóa dữ liệu
DELETE FROM [WHERE ]
Ví dụ
delete from NHANVIEN where MaPhong = 5
delete from NHANVIEN
Cập nhật dữ liệu (3)
PHONGBAN
01/01/1995
987987987
4
Điều hành
19/06/1981
888665555
5
Nghiên cứu
NgNhanChuc
TrPhong
MaPB
TenPB
Phú Nhuận
5
Thủ Đức
5
DIADIEM_PHG
Gò Vấp
4
Tân Bình
5
Diadiem
MaPB
DUAN
5
Thủ Đức
2
Sản phẩm Y
5
Tân Bình
1
Sản phẩm X
Phong
Diadiem
MaDA
TenDA
null
null
Cập nhật dữ liệu (4)
Sửa dữ liệu
UPDATE
SET = ,
= ,
...
[WHERE ]
Ví dụ
update DUAN
set Diadiem = ‘Hanoi’, Phong = 4
where Maso=10
update NHANVIEN
set Luong = 1.1 * Luong
Truy vấn dữ liệu
Cú pháp
SELECT
FROM
[WHERE ]
[GROUP BY ]
[HAVING ]
[ORDER BY ]
Kết quả của lệnh truy vấn là một bảng.
Bảng trong SQL có thể chứa các bộ trùng nhau.
Trong đó
: danh sách thuộc tính của quan hệ kết quả.
: danh sách bảng liên quan đến câu truy vấn.
: điều kiện để chọn hoặc ghép các bộ.
: danh sách thuộc tính để nhóm các bộ.
: điều kiện chọn các nhóm.
: danh sách các thuộc tính và thứ tự sắp xếp tương ứng.
Phép toán quan hệ
(R)
select
from R
(R)
select *
from R
where
R S
select *
from R, S
R S
select *
from R, S
where
( (R))
select
from R
where
Ví dụ
Tìm các nhân viên làm việc trong phòng số 4.
MaPB = 4 (NHANVIEN)
select *
from NHANVIEN
where MaPB = 4
Cho biết họ, tên, giới tính và mức lương của các nhân viên.
Ho, Ten, GTinh, Luong (NHANVIEN)
select Ho, Ten, GTinh, Luong
from NHANVIEN
Cho bi ết tên các trưởng phòng
Ho, Ten (PHONGBAN TrPhg=MaNV NHANVIEN)
select Ho, Ten
from NHANVIEN, PHONGBAN
where TrPhg = MaNV
Phép toán tập hợp
SQL hổ trợ các phép toán
UNION (Hội)
EXCEPT (Hiệu).
INTERSECT (Giao).
Đặc điểm
Các dòng giống nhau bị loại trong bảng kết quả.
Các bảng tham gia phép toán phải có tính khả hợp
Giữ lại các dòng giống nhau
UNION ALL
EXCEPT ALL
INTERSECT ALL
(SELECT FROM
WHERE )
UNION [ALL]
(SELECT FROM
WHERE )
(SELECT FROM
WHERE )
EXCEPT [ALL]
(SELECT FROM
WHERE )
(SELECT FROM
WHERE )
INTERSECT [ALL]
(SELECT FROM
WHERE )
Đặt tên
Đặt tên trong mệnh đề SELECT:
select count(*) as ‘Tong so nhan vien’
from NHANVIEN
Đặt tên trong mệnh đề FROM:
Đặt tên cho bảng
select NV.Ho, NV.Ten. PB.Ten
from NHANVIEN, PHONGBAN
where MaPB = MaPB
Đặt tên cho bảng và thuộc tính
select *
from PHONGBAN AS PB(Ten, Maso, MaTrPhg, Ngay)
select NV.Ho, NV.Ten. PB.Ten
from NHANVIEN as NV, PHONGBAN as PB
where NV.MaPB = PB.MaPB
Phép toán số học
+, –, *, / có thể áp dụng cho các giá trị số trong mệnh đề SELECT
select 1.1 * Luong as ‘Luong moi’
from NHANVIEN
+, - có thể áp dụng cho các giá trị kiểu ngày giờ
select NgNhanChuc + 150 as ‘Cong Ngay’
from PHONGBAN
NHANVIEN
...
Luong
...
40000
30000
38000
25000
Luong moi
44000
33000
41800
27500
Phép toán so sánh và luận lý
Dùng trong mệnh đề WHERE hoặc HAVING để xây dựng các điều kiện chọn và điều kiện kết.
=, , ≥,
BETWEEN AND
AND, OR, NOT
Tìm các nhân viên phòng số 5 có lương giữa 30.000 và 40.000
select *
from NHANVIEN
where (Luong >= 30000) and (Luong <= 40000) and Phg = 5
select *
from NHANVIEN
where (Luong between 30000 and 40000) and Phg = 5
Phép toán so sánh chuỗi
LIKE [ESCAPE ]
Mẫu đối sánh
Chuỗi ký tự để so sánh.
% - thay cho một đoạn ký tự tùy ý.
_ - thay cho một ký tự tùy ý.
Ký tự thoát
Ký tự để loại bỏ chức năng đặc biệt của % và _.
Có thể dùng ký tự bất kỳ không xuất hiện trong mẫu đối sánh.
Tìm nhân viên họ Nguyen
select MaNV, Ho, Ten from NHANVIEN
where Ho LIKE ‘Nguyen%’
Tìm nhân viên họ Nguyen_
select MaNV, Ho, Ten from NHANVIEN
where Ho LIKE ‘Nguyen\_%
escape ‘\’
Khử các dòng giống nhau
select Luong
from NHANVIEN
SQL không tự động loại các bộ trùng nhau
Tốn thời gian so sánh và sắp xếp.
Sử dụng cho các truy vấn thống kê
select distinct Luong
from NHANVIEN
25000
43000
25000
38000
30000
40000
25000
Luong
43000
25000
38000
30000
40000
Luong
Các hàm tập hợp
SQL cung cấp 5 hàm tập hợp:
SUM() - tính tổng các giá trị của thuộc tính
MAX() - tìm giá trị lớn nhất của thuộc tính
MIN() - tìm giá trị nhỏ nhất của thuộc tính
AVG() - tính giá trị trung bình của thuộc tính
COUNT(*) - đếm số dòng của bảng
COUNT() - đếm các giá trị khác null của thuộc tính
Ví dụ
select sum(Luong) AS TongLuong,
max(Luong) AS LuongCaonhat,
min(Luong) AS LuongThapnhat,
avg(Luong) AS LuongTB
from NHANVIEN
Chỉ được xuất hiện trong mệnh đề SELECT hoặc HAVING
Gom nhóm các bộ
GROUP BY - HAVING
SELECT [, ]
FROM
[WHERE ]
GROUP BY
[HAVING ]
Trong đó
: danh sách thuộc tính gom nhóm
: danh sách các hàm tập hợp.
: điều kiện chọn hoặc điều kiện kết.
: điều kiện lựa chọn các nhóm.
Chú ý
WHERE được thực hiện trước GROUP BY.
HAVING chỉ xuất hiện khi có GROUP BY
Ví dụ
Với mỗi phòng, cho biết số dự án phòng đó điều phối.
select Phong, count(MaDA) as ‘So du an’
from DUAN
group by Phong
5
Phú Nhuận
3
Sản phẩm Z
5
Thủ Đức
2
Sản phẩm Y
4
Gò Vấp
10
Tin học hóa
4
Gò Vấp
30
Phúc lợi
DUAN
1
Phú Nhuận
20
Tái tổ chức
5
Tân Bình
1
Sản phẩm X
Phong
Diadiem
MaDA
TenDA
Phong
So du an
5
3
4
2
1
1
Ví dụ
Cho biết mã số, tên dự án và số nhân viên tham gia đối với những dự án có nhiều hơn 2 nhân viên tham gia.
select DA.MaDA, DA.Ten, count(*) as ‘So nhan vien’
from DUAN as DA, THAMGIA as TG
WHERE DA.MaDA=TG.MaDA
group by DA.MaDA, DA.Ten
having count(*) > 2
Gom nhóm các bộ (4)
2
333445555
2
Sản phẩm Y
2
453453453
2
Sản phẩm Y
2
123456789
2
Sản phẩm Y
1
453453453
1
Sản phẩm X
...
1
123456789
1
Sản phẩm X
...
TG.MaDA
TG.MaNV
...
DA.MaDA
DA.TenDA
2
DA.MaDA
3
Sản phẩm Y
So nhan vien
DA.TenDA
Sắp xếp kết quả
ORDER BY
SELECT
FROM
[WHERE ]
ORDER BY
: danh sách các cặp (tên thuộc tính, thứ tự sắp xếp).
Thứ tự:
ASC - tăng dần.
DESC - giảm dần.
Mặc định là ASC.
Ví dụ
Với mỗi nhân viên, cho biết mã nhân viên và mã dự án mà nhân viên đó tham giá. Sắp xếp kết quả theo thứ tự tăng dần của mã nhân viên và giảm dần của mã dự án.
select MaNV, MaDA
from THAMGIA
order by MaNV, MaDA desc
MaNV
MaDA
123456789
2
123456789
1
333445555
20
333445555
10
333445555
3
333445555
2
...
So sánh với NULL
NULL
Không biết.
Không sẳn sàng.
Không thể áp dụng.
Tính toán và so sánh với NULL
null + 3 null.
null > 3 unknown .
SQL cung cấp 2 phép toán
IS NULL.
IS NOT NULL.
Tìm các nhân viên không có người giám sát
select MaNV, Ho, Ten
from NHANVIEN
where MaNQL is null
Tìm các nhân viên có người giám sát
select MaNV, Ho, Ten
from NHANVIEN
where MaNQL is not null
Logic 3 chân trị
NOT
TRUE
FALSE
FALSE
TRUE
UNKNOWN
UNKNOWN
AND
TRUE
FALSE
UNKNOWN
TRUE
TRUE
FALSE
UNKNOWN
FALSE
FALSE
FALSE
FALSE
UNKNOWN
UNKNOWN
FALSE
UNKNOWN
OR
TRUE
FALSE
UNKNOWN
TRUE
TRUE
TRUE
TRUE
FALSE
TRUE
FALSE
UNKNOWN
UNKNOWN
TRUE
UNKNOWN
UNKNOWN
Truy vấn lồng
Truy vấn sử dụng các giá trị của truy vấn khác trong điều kiện so sánh.
Chỉ xuất hiện trong mệnh đề WHERE.
SELECT
FROM
WHERE (
SELECT
FROM
WHERE )
Truy vấn cha
Truy vấn con
So sánh tập hợp (1)
Phép toán
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.
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 {=, , , }.
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
IN
ALL
ANY
EXISTS
Ví dụ
Tìm các nhân viên của phòng số 2 và 5.
select *
from NHANVIEN
where MaPB in (2, 5)
Tìm các nhân viên của phòng ‘Nghiên cứu’.
select *
from NHANVIEN
where MaPB = (
select MaPB
from PHONGBAN
where TenPB =
‘Nghiên cứu’)
Tập hợp tường minh
Truy vấn con vô hướng
Ví dụ
Cho biết tên nhân viên có mức lương lớn hơn lương của các nhân viên phòng số 5.
select *
from NHANVIEN
where Luong > ALL (
select Luong
from NHANVIEN
where MaPB = 5)
Cho biết các nhân viên không tham gia các dự án mà phòng số 5 quản lý.
select MaNV
from NHANVIEN
where MaNV not in (
select TG.MaNV
from THAMGIA as TG, DUAN as DA
where TG.MaDA = DA.MaDA and DA.Phg = 5)
Truy vấn lồng phân cấp (1)
Mệnh đề WHERE của truy vấn con không tham chiếu đến thuộc tính của các bảng trong mệnh đề FROM của truy vấn cha.
Truy vấn con được thực hiện trước truy vấn cha.
Ví dụ
select *
from NHANVIEN
where Luong > ALL (
select Luong
from NHANVIEN
where MaPB = 5)
Truy vấn lồng phân cấp (2)
Luong
40000
30000
38000
25000
43000
987654321
25000
987987987
25000
999887777
25000
453453453
38000
666884444
30000
123456789
40000
333445555
55000
888665555
Luong
...
MaNV
NHANVIEN
43000
987654321
55000
888665555
Luong
...
MaNV
> ALL
Truy vấn lồng tương quan (1)
Mệnh đề WHERE của truy vấn con tham chiếu đến thuộc tính của các bảng trong mệnh đề FROM của truy vấn cha.
Truy vấn con được thực hiện nhiều lần, mỗi lần ứng với một bộ của truy vấn cha.
Tìm các nhân viên không có thân nhân nào
select *
from NHANVIEN as NV
where not exists (
select *
from THANNHAN as TN
where TN.MaNV = NV.MaNV)
Truy vấn lồng tương quan (2)
30000
123456789
40000
333445555
55000
888665555
Luong
...
MaNV
NHANVIEN
THANNHAN
MaNV
Ten
...
333445555
Anh
333445555
The
987654321
An
123456789
Minh
123456789
Anh
...
55000
888665555
Luong
MaNV
MaNV
Ten
...
MaNV
Ten
...
333445555
Anh
333445555
The
MaNV
Ten
...
123456789
Minh
123456789
Anh
Truy vấn lồng tương quan (3)
10
1
3
5
2
23
10
10
23
2
7
23
1
7
2
7
D
2
12
2
12
5
1
2
1
E
C
B
A
R
3
23
23
12
12
1
C
B
A
2
7
D
5
2
E
S
A,B,C (R)
23
1
C
B
A
R S
Truy vấn lồng tương quan (4)
Biểu diễn bằng EXISTS.
SELECT R1.A, R1.B, R1.C
FROM R as R1
WHERE NOT EXISTS (
SELECT *
FROM S
WHERE NOT EXISTS (
SELECT *
FROM R as R2
WHERE R2.D = S.D AND
R2.E = S.E AND
R2.A = R1.A AND
R2.B = R1.B AND
R2.C = R1.C))
Tìm các nhân viên tham gia tất cả các dự án do phòng số 5 quản lý.
select *
from NHANVIEN as NV
where not exists (
select *
from DUAN as DA
where DA.Phong = 5 and
not exists (
select *
from THAMGIA as TG
where TG.MaNV =
NV.MaNV
and TG.MaDA =
DA.MaDA))
Phép kết trong SQL
JOIN, INNER JOIN
Dùng kết nối hai bảng trong mệnh đề FROM.
SELECT
FROM ( JOIN ON )
Các phép kết mở rộng:
LEFT OUTER JOIN, LEFT JOIN.
RIGHT OUTER JOIN, RIGHT JOIN.
FULL OUTER JOIN, FULL JOIN.
Ví dụ
Cho biết tên các nhân viên của phòng ‘Nghiên cứu’.
select NV.Ho, NV.Dem,
NV.Ten
from (NHANVIEN as NV join
PHONGBAN as PB on
NV.MaPB =
PB.MaPB)
where PB.Ten = ‘Nghiên cứu’
Các phép kết có thể lồng nhau
select DA.MaDA, PB.MaPB,
NV.Ten
from ((DUAN as DA join
PHONGBAN as PB
on DA.Phong =
PB.Maso)
join NHANVIEN on
MaNQL = NV.MaNV)
where Diadiem = ‘TpHCM’
File đính kèm:
bai_giang_co_so_du_lieu_chuong_5_ngon_ngu_truy_van_sql.ppt

