1
SQL
SQL
-
-
Structured Query Language
Structured Query Language
Giớithiệu
Truy vấndữ liệu
Cậpnhậtdữ liệu
3/6/2008 Ôn thi Cao học 2008 2
Giới
Giới
thiệu
thiệu
Ngôn ngữ khai báo
{ Cài đặtdựatrên ĐSQH
Chuẩn hoá cho các HQTCSDL quan hệ
{ Được phát triểnbởi IBM (1970s)
{ Các version Standard ANSI/ISO
SQL-86 (SQL1)
SQL-92 (SQL2)
SQL-99 (SQL3)
Nhiều phiên bản cài đặt
{ SQL Server
{ Oracle
2
3/6/2008 Ôn thi Cao học 2008 3
Giới
Giới
thiệu
Là ngôn ngữ mô tả
{ Lược đồ cho mỗi quan hệ
{ Miềngiátrị tương ứng củatừng thuộctính
{ Ràng buộctoànvẹn
{ Chỉ mụctrênmỗi quan hệ
Gồm
{ CREATE TABLE (tạobảng)
{ DROP TABLE (xóa bảng)
{ ALTER TABLE (sửabảng)
{ CREATE DOMAIN (tạomiền giá trị)
{ CREATE DATABASE
{ …
3
3/6/2008 Ôn thi Cao học 2008 5
Truy
Truy
vấn
vấn
dữ
dữ
liệu
liệu
Là ngôn ngữ rút trích dữ liệuthỏamộtsốđiềukiệnnàođó
Dựa trên các phép toán đạisố quan hệ + mộtsố mở rộng
{ Bảng là bag ≠ quan hệ là set
Cho phép 1 bảng có nhiều dòng trùng nhau
Hỗ trợ các truy vấn
{ Cơ bản: Chọn, Chiếu, Kết
{ Tậphợp, so sánh tậphợpvàtruyvấnlồng
{ Hàm kếthợp và gom nhóm
c
c
ơ
ơ
bản
bản
(
(
tt
tt
)
)
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <điềukiện>
σ
π
×
SELECT L
FROM R
WHERE C
π
L
(σ
C
(R))
SQL và ĐSQH
3/6/2008 Ôn thi Cao học 2008 8
CSDL
CSDL
TENLOT
Thanh
Manh
3/6/2008 Ôn thi Cao học 2008 10
Mệnh
Mệnh
đ
đ
ề
ề
SELECT
SELECT
SELECT MANV, HONV, TENLOT, TENNV
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
π
MANV,HONV,TENLOT,TENNV
(σ
PHG=5 ∧ PHAI=‘Nam’
(NHANVIEN))
TENNVHONV
TungNguyen
HungNguyen
TENLOT
Thanh
Manh
333445555
987987987
MANV
6
987987987
MANV
Tên bí danh
3/6/2008 Ôn thi Cao học 2008 12
Mệnh
Mệnh
đ
đ
ề
ề
SELECT (
SELECT (
tt
tt
)
)
SELECT MANV, HONV + ‘ ’ + TENLOT + ‘ ’ + TENNV AS ‘HO TEN’
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
ρ
MANV,HO TEN
(π
MANV,HONV+TENLOT+TENNV
(σ
PHG=5∧PHAI=‘Nam’
(NHANVIEN)))
HO TEN
Nguyen Thanh Tung
Nguyen Manh Hung
333445555
333445555
987987987
MANV
Mở rộng
3/6/2008 Ôn thi Cao học 2008 14
Mệnh
Mệnh
đ
đ
ề
ề
SELECT (
SELECT (
tt
tt
)
)
SELECT LUONG
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
Loạibỏ các dòng trùng nhau
-Tốnchi phí
-Người dùng muốnthấy
LUONG
30000
25000
25000
38000
LUONG
30000
Mệnh
đ
đ
ề
ề
WHERE
WHERE
SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG
Biểuthứcluậnlý
TRUE
TRUE
9
3/6/2008 Ôn thi Cao học 2008 17
Mệnh
Mệnh
đ
đ
ề
ề
WHERE (
WHERE (
tt
tt
)
)
SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG>20000 AND LUONG<30000
WHERE (
tt
tt
)
)
SELECT MANV, TENNV
FROM NHANVIEN
WHERE DCHI LIKE ‘Nguyen _ _ _ _’
LIKE
SELECT MANV, TENNV
FROM NHANVIEN
WHERE DCHI LIKE ‘Nguyen %’
Chuỗibấtkỳ
Ký tự bấtkỳ
3/6/2008 Ôn thi Cao học 2008 20
Mệnh
Mệnh
đ
đ
ề
ề
WHERE (
WHERE (
tt
tt
)
)
SELECT MANV, TENNV
FROM NHANVIEN
WHERE HONV LIKE ‘Nguyen’
WHERE (
WHERE (
tt
tt
)
)
Ngày giờ
SELECT MANV, TENNV
FROM NHANVIEN
WHERE NGSINH BETWEEN ‘1955-12-08’ AND ‘1966-07-19’
YYYY-MM-DD
MM/DD/YYYY
‘1955-12-08’
’12/08/1955’
‘December 8, 1955’
HH:MI:SS
’17:30:00’
’05:30 PM’
‘1955-12-08 17:30:00’
12
3/6/2008 Ôn thi Cao học 2008 23
Mệnh
Mệnh
đ
đ
ề
ề
WHERE (
WHERE (
tt
NULL
SELECT MANV, TENNV
FROM NHANVIEN
WHERE MA_NQL IS NULL
SELECT MANV, TENNV
FROM NHANVIEN
WHERE MA_NQL IS NOT NULL
13
3/6/2008 Ôn thi Cao học 2008 25
WHERE TRUE
Mệnh
Mệnh
đ
đ
ề
ề
FROM
FROM
SELECT MANV, MAPHG
FROM NHANVIEN, PHONGBAN
Không sử dụng mệnh đề WHERE
MAPHG
1
4
333445555
333445555
MANV
5
1987987987
987987987
PHONGBAN(TENPHG,MAPHG,TRPHG,NG_NHANCHUC)
DIADIEM_PHG(MAPHG,DIADIEM)
NHANVIEN(HONV,TENLOT,TENNV,MANV,NGSINH,DCHI,PHAI,LUONG,MA_NQL,PHG)
THANNHAN(MA_NVIEN,TENTN,PHAI,NGSINH,QUANHE)
14
3/6/2008 Ôn thi Cao học 2008 27
Ví
Ví
dụ
dụ
1
1
Vớinhững đề án ở ‘Ha Noi’, cho biếtmãđề án, mã phòng ban chủ trì
đề án, họ tên trưởng phòng cùng với ngày sinh và địachỉ củangười ấy
R1
← π
MADA, PHONG
(σ
DDIEM_DA=‘Hanoi’
(DEAN))
R2 ← R1
PHONG=MAPHG
PHONGBAN
NHANVIEN(HONV,TENLOT,TENNV,MANV,NGSINH,DCHI,PHAI,LUONG,MA_NQL,PHG)
PHONGBAN(TENPHG,MAPHG,TRPHG,NG_NHANCHUC)
DEAN(TENDA,MADA,DDIEM_DA,PHONG)
R1(MADA, PHONG)
R2(MADA,PHONG,TENPHG,MAPHG,TRPHG,NG_NHANCHUC)
KQ ← π
HONV, TENNV, NGSINH,DCHI
Tìm họ tên của nhân viên phòng số 5 có tham gia vào đề án “Sảnphẩm
X” vớisố giờ làm việc trên 10 giờ
SELECT
FROM
WHERE
HONV, TENNV
PHANCONG AS PC, DEAN AS DA, NHANVIEN AS NV
(NV.PHG=5)
(PC.THOIGIAN>10)
AND
NV.MANV=PC.MA_NVIENAND
(PC.SODA=DA.MADA)
AND
(TENDA= “SảnphẩmX” )
AND
3/6/2008 Ôn thi Cao học 2008 30
Mệnh
Mệnh
đ
đ
ề
ề
ORDER BY
ORDER BY
Dùng để hiểnthị kếtquả câutruyvấntheomộtthứ tự nào đó
Cú pháp
{ ASC: tăng (mặc định)
{ DESC: giảm
SELECT <danh sách các cột>
FROM <danh sách các bảng>
10
20987654321
30987654321
3/6/2008 Ôn thi Cao học 2008 32
Phép
Phép
toán
toán
tập
tập
hợp
hợp
trong
trong
SQL
SQL
SQL có cài đặt các phép toán
{ Hội (UNION)
{ Giao (INTERSECT)
{ Trừ (EXCEPT)
Kếtquả trả về là tậphợp
{ Loạibỏ các bộ trùng nhau
{ Để giữ lạicácbộ trùng nhau
UNION ALL
INTERSECT ALL
EXCEPT ALL
17
3/6/2008 Ôn thi Cao học 2008 33
Phép
Phép
5
Cho biết các mã đề án có
{ Nhân viên vớihọ là ‘Nguyen’ tham gia hoặc,
{ Trưởng phòng chủ trì đề án đóvớihọ là ‘Nguyen’
SELECT SODA
FROM NHANVIEN, PHANCONG
WHERE MANV=MA_NVIEN AND HONV=‘Nguyen’
UNION
SELECT MADA
FROM NHANVIEN, PHONGBAN, DEAN
WHERE MANV=TRPHG AND MAPHG=PHONG
AND HONV=‘Nguyen’
18
3/6/2008 Ôn thi Cao học 2008 35
Ví
Ví
dụ
dụ
6
6
Tìmnhânviêncóngười thân cùng tên và cùng giớitính
SELECT TENNV, PHAI, MANV FROM NHANVIEN
INTERSECT
SELECT TENTN, PHAI, MA_NVIEN FROM THANNHAN
3/6/2008 Ôn thi Cao học 2008 36
Ví
Ví
dụ
dụ
7
vấn
lồng
lồng
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <so sánh tậphợp> (
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <điềukiện>)
Câu truy vấncha
(Outer query)
Câu truy vấncon
(Subquery)
20
3/6/2008 Ôn thi Cao học 2008 39
Truy
Truy
vấn
vấn
lồng
lồng
(
(
tt
tt
)
)
Các câu lệnh SELECT có thể lồng nhau ở nhiềumức
Các câu truy vấn con trong cùng mộtmệnh đề WHERE đượckết
hợpbằng phép nối logic
{ Khi thựchiện, câutruyvấn con sẽđượcthựchiện nhiềulần, mỗilầntương
ứng vớimộtbộ củatruyvấncha
21
3/6/2008 Ôn thi Cao học 2008 41
Ví
Ví
dụ
dụ
-
-
Lồng
Lồng
phân
phân
cấp
cấp
SELECT MANV, TENNV
FROM NHANVIEN, DIADIEM_PHG
WHERE DIADIEM=‘TP HCM’ AND PHG=MAPHG
SELECT MANV, TENNV
FROM NHANVIEN
WHERE PHG IN
(
SELECT MAPHG
FROM DIADIEM_PHG
WHERE DIADIEM=‘TP HCM’ )
(1, 5)
3/6/2008 Ôn thi Cao học 2008 42
Ví
Ví
AND HONV=‘Nguyen’ )
3/6/2008 Ôn thi Cao học 2008 44
Ví
Ví
dụ
dụ
7
7
SELECT *
FROM NHANVIEN
WHERE MANV NOT IN (
SELECT MA_NVIEN
FROM THANNHAN )
Tìm những nhân viên không có thân nhân nào
SELECT *
FROM NHANVIEN
WHERE MANV <> ALL (
SELECT MA_NVIEN
FROM THANNHAN )
23
3/6/2008 Ôn thi Cao học 2008 45
Ví
Ví
dụ
dụ
8
8
SELECT *
FROM NHANVIEN
WHERE LUONG > ANY (
10
Tìm những trưởng phòng có tốithiểumột thân nhân
SELECT *
FROM NHANVIEN
WHERE MANV IN (SELECT MA_NVIEN FROM THANNHAN)
AND MANV IN (SELECT TRPHG FROM PHONGBAN)
3/6/2008 Ôn thi Cao học 2008 48
Ví
Ví
dụ
dụ
-
-
Lồng
Lồng
t
t
ươ
ươ
ng
ng
quan
quan
SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG
SELECT MANV, TENNV
FROM NHANVIEN
WHERE EXISTS (
SELECT *
FROM THANNHAN
WHERE MANV=MA_NVIEN)
Tìm những nhân viên không có thân nhân nào