Tải bản đầy đủ (.pdf) (23 trang)

Bài giảng Cơ sở dữ liệu: Chương 6 - GV. Đỗ Thị Kim Thành

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (752.65 KB, 23 trang )

01/03/2011

TRUNG TÂM DÀO TẠO CÁC VẤN ĐỀ KINH TẾ HIỆN ĐẠI
TRƯỜNG ĐẠI HỌC CHU VĂN AN

DATABASE
CƠ SỞ DỮ LIỆU
GV: Đỗ Thị Kim Thành
Email:
Web:

Chương VI

NGÔN NGỮ TRUY VẤN SQL

GV: ĐỖ THỊ KIM THÀNH

2

1


01/03/2011

GIỚI THIỆU

 Ngơn ngữ khai báo


Cài đặt dựa trên ĐSQH


 Chuẩn hóa cho các hệ quản trị CSDL quan hệ



Được phát triển bởi IBM (1970s)
Các phiên bản chuẩn ANSI/ISO

SQL – 86 (SQL1)

SQL – 92 (SQL2)

SQL – 99 (SQL3)

SQL – 2000, 2005, 2008

 Nhiều phiên bản cài đặt



SQL Server
Oracle
3

GV: ĐỠ THỊ KIM THÀNH

GIỚI THIỆU

 SQL hỗ trợ



Ngôn ngữ định nghĩa dữ liệu (DDL)






Ngơn ngữ thao tác dữ liệu (DML)





Mức quan niệm: CREATE SCHEMA, TABLE,…
Mức ngoài: CREATE VIEW, GRANT,…
Mức trong: CREATE INDEX, CLUSTER,…
Truy vấn: SELECT
Cập nhật: INSERT, DELETE, UPDATE

Ngơn ngữ khai báo




GV: ĐỠ THỊ KIM THÀNH

Ràng buộc tồn vẹn
Phân quyền và bảo mật
Điều khiển giao tác
4


2


01/03/2011

TRUY VẤN DỮ LIỆU

 Truy vấn dữ liệu là ngôn ngữ rút trích dữ liệu thỏa một





số điều kiện nào đó
Dựa trên các phép tốn đại số quan hệ + một số mở rộng
Hỗ trợ các truy vấn:
• Cơ bản: chọn, chiếu, kết
• Tập hợp, so sánh tập hợp và truy vấn lồng
• Hàm kết hợp và gom nhóm
• Một số kiểu truy vấn khác
Ngôn ngữ truy vấn dữ liệu SQL là ngơn ngữ chuẩn, có
cấu trúc dùng để truy vấn và thao tác trên CSDL quan
hệ.

GV: ĐỖ THỊ KIM THÀNH

5

CẤU TRÚC




Câu truy vấn tổng quát:
SELECT [ DISTINCT ] danh_sách_cột | hàm
FROM danh sách các quan hệ (hay bảng, table)
[WHERE điều_kiện]
[GROUP BY danh_sách_cột_gom_nhóm]
[HAVING điều_kiện_trên_nhóm]
[ORDER BY cột1 ASC | DESC, cột2 ASC | DESC,… ]

GV: ĐỖ THỊ KIM THÀNH

6

3


01/03/2011

CÁC TỐN TỬ VÀ PHÉP TỐN

 Tốn tử so sánh:









=,>,<,>=,<=,<>
BETWEEN
IS NULL, IS NOT NULL
LIKE (%,_)
IN, NOT IN
EXISTS, NOT EXISTS
SOME, ALL, ANY

 Toán tử logic: AND, OR
 Các phép toán: +, - ,* , /

7

GV: ĐỖ THỊ KIM THÀNH

CÁC HÀM CƠ BẢN




5 hàm cơ bản:


COUNT( )



SUM( )




MAX( )



MIN( )



AVG( )

Các hàm xử lý ngày tháng năm
• Ngày: DAY( )
• Tháng: MONTH( )

• Năm: YEAR( )
GV: ĐỠ THỊ KIM THÀNH

8

4


01/03/2011

PHÂN LOẠI CÂU SELECT

 SELECT đơn giản
 SELECT có mệnh đề ORDER BY

 SELECT lồng (câu SELECT lồng câu SELECT khác)
 SELECT gom nhóm (GROUP BY)
 SELECT gom nhóm (GROUP BY) có điều kiện HAVING

GV: ĐỠ THỊ KIM THÀNH

9

TRUY VẤN CƠ BẢN

 Cú pháp:
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 (quan hệ) liên quan đến câu truy vấn
 <điều kiện>




Biểu thức logic xác định dịng nào sẽ được rút trích
Nối các biểu thức: dùng toán tử logic
Các phép toán và toán tử so sánh

GV: ĐỖ THỊ KIM THÀNH

10

5



01/03/2011

TRUY VẤN CƠ BẢN (tt)
 SQL và ĐSQH

π

SELECT <danh sách các cột>



FROM <danh sách các bảng>
WHERE <điều kiện>

σ
L

SELECT
FROM

R

WHERE
GV: ĐỖ THỊ KIM THÀNH

πL (σC(R))

C

11

CSDL MẪU
Cho lược đồ CSDL “quản lý đề án công ty” như sau

NHANVIEN (MANV, HONV, TENLOT, TENNV, NS, DC,
PHAI, LUONG, MA_NQL, PHG)
PHONGBAN (MAPHG, TENPHG, TRPHG, NG_NHANCHUC)
PHANCONG (MA_NVIEN, SODA, THOIGIAN)
THANNHAN (MA_NVIEN, TENTN, PHAI, NS, QUANHE)
DEAN (MADA, TENDA, DDIEM_DA, PHONG)
DIADIEM_PHG (MAPHG, DIADIEM)

GV: ĐỖ THỊ KIM THÀNH

12

6


01/03/2011

VÍ DỤ
SELECT *

Lấy tất cả các cột của
quan hệ kết quả

FROM NHANVIEN
WHERE PHG=5


MANV

HONV

TENLOT

TENNV

NS

DC

PHAI

LUONG

MA_NQL

PHG

123

Nguyễn

Thanh

Tùng

8/12/1985


NVC, Q5

Nam

40000

745

5

189

Nguyễn

Mạnh

Hùng

15/9/1962

VT

Nam

38000

123

5


248



Thị

Hoa

4/9/1978

TN

Nữ

36000

123

5

σPHG=5 (NHANVIEN)
13

GV: ĐỖ THỊ KIM THÀNH

MỆNH ĐỀ SELECT
SELECT MANV, HOTEN, TENLOT, TENNV

FROM NHANVIEN

WHERE PHG=5 AND PHAI=„Nam‟

π

MANV

HONV

TENLOT

TENNV

123

Nguyễn

Thanh

Tùng

189

Nguyễn

Mạnh

Hùng

MANV,HONV,TENLOT,TENNV


GV: ĐỖ THỊ KIM THÀNH

(σPHG=5^PHAI=„Nam‟ (NHANVIEN))
14

7


01/03/2011

MỆNH ĐỀ SELECT (TT)
Tên bí danh
SELECT MANV, HONV AS HO, TENLOT AS „TEN LOT‟, TENNV AS TEN
FROM NHANVIEN
WHERE PHG=5 AND PHAI=„Nam‟

MANV

HO

TEN LOT

TEN

123

Nguyễn

Thanh


Tùng

189

Nguyễn

Mạnh

Hùng

ρMANV, HO, TEN LOT, TEN (πMANV, HONV, TENLOT, TENNV
(σPHG=5 ^ PHAI=„Nam‟ (NHANVIEN)))
15

GV: ĐỖ THỊ KIM THÀNH

MỆNH ĐỀ SELECT (TT)
Mở rộng
SELECT MANV, HONV+ „‟+ TENLOT + „‟ +TENNV AS HOTEN
FROM NHANVIEN
WHERE PHG=5 AND PHAI=„Nam‟

MANV

HOTEN

123

Nguyễn Thanh Tùng


189

Nguyễn Mạnh Hùng

ρMANV,HOTEN (πMANV,HONV+TENLOT+TENNV
(σPHG=5^PHAI=„Nam‟ (NHANVIEN)))
GV: ĐỖ THỊ KIM THÀNH

16

8


01/03/2011

MỆNH ĐỀ SELECT (TT)
Loại bỏ các dòng trùng nhau
SELECT DISTINCT
LUONG LUONG
FROM NHANVIEN
WHERE PHG=5 AND PHAI=„Nam‟
LUONG
LUONG

30000
30000

-Tốn chi phí

25000

25000
38000
30000
38000

17

GV: ĐỠ THỊ KIM THÀNH

VÍ DỤ
Cho biết MANV và TENNV làm việc ở phịng „Nghien cứu‟
NHANVIEN (MANV, HONV, TENLOT, TENNV, NS, DC, PHAI, LUONG, MA_NQL, PHG)
PHONGBAN (MAPHG, TENPHG, TRPHG, NG_NHANCHUC)

R1  NHANVIEN
KQ  π

MANV,TENNV

PHG=MAPHG

PHONGBAN

(σTENPHG=„Nghien cuu‟ (R1))

SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN

WHERE TENPHG=„Nghien cuu‟ AND PHG=MAPHG
GV: ĐỖ THỊ KIM THÀNH


18

9


01/03/2011

Mệnh đề WHERE

SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE TENPHG=„Nghien cuu‟ AND PHG=MAPHG

TRUE

Biểu thức luận lý

TRUE

TRUE
19

GV: ĐỖ THỊ KIM THÀNH

Mệnh đề WHERE (TT)
BETWEEN
Hãy cho biết MANV và TENNV có lương trong khoảng tử
20000 đến 30000
SELECT MANV, TENNV

FROM NHANVIEN
WHERE LUONG > 20000 AND LUONG < 30000
SELECT MANV, TENNV

FROM NHANVIEN
WHERE LUONG BETWEEN 20000 AND 30000

GV: ĐỖ THỊ KIM THÀNH

20

10


01/03/2011

Mệnh đề WHERE (TT)
NOT BETWEEN
Hãy cho biết MANV và TENNV có lương khơng nằm trong
khoảng tử 20000 đến 30000

SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG NOTBETWEEN 20000 AND 30000

21

GV: ĐỖ THỊ KIM THÀNH

Mệnh đề WHERE (TT)

LIKE
Hãy cho biết MANV và TENNV có địa chỉ trong đó có từ
Nguyễn
SELECT MANV, TENNV
FROM NHANVIEN
WHERE DC LIKE „Nguyễn_ _ _ _‟
SELECT MANV, TENNV

Ký tự bất kỳ

FROM NHANVIEN
WHERE DC LIKE „Nguyễn %‟

GV: ĐỖ THỊ KIM THÀNH

Chuỗi bất kỳ

22

11


01/03/2011

Mệnh đề WHERE (TT)
NOTLIKE
Hãy cho biết MANV và TENNV có họ (HONV) Nguyễn
SELECT MANV, TENNV
FROM NHANVIEN
WHERE HONV LIKE „Nguyễn‟


Hãy cho biết MANV và TENNV không phải họ Nguyễn
SELECT MANV, TENNV
FROM NHANVIEN
WHERE HOVN NOT LIKE „Nguyễn‟
23

GV: ĐỖ THỊ KIM THÀNH

Mệnh đề WHERE (TT)
Ngày giờ
Hãy cho biết MANV và TENNV có ngày sinh nằm trong
khoảng tử 1955-12-08 đến 1966-07-19
SELECT MANV, TENNV
FROM NHANVIEN
WHERE NS BETWEEN „1955-12-08‟ AND „1966-07-19‟
„1955-12-08‟

YYYY-MM-DD

„17:30:00‟

„12/08/1955‟

MM/DD/YYYY

„05:30 PM‟

„December 8, 1955‟


„1955-12-08 17:30:00‟

GV: ĐỖ THỊ KIM THÀNH

24

12


01/03/2011

Mệnh đề WHERE (TT)
NULL

 Sử dụng trong truờng hợp




Khơng biết (value unknown)
Không thể áp dụng (value inapplicable)
Không tồn tại (value withheld)

 Những biểu thức tính tốn có liên quan đến giá trị NULL sẽ
cho ra kết quả là NULL




x có giá trị là NULL

x + 3 cho ra kết quả là NULL
x + 3 là 1 biểu thức không hợp lệ trong SQL

 Những biểu thức so sánh có liên quan đến giá trị NULL sẽ
cho ra kết quả là UNKNOWN



x = 3 cho ra kết quả là UNKNOWN
x = 3 là 1 so sánh không hợp lệ trong SQL
25

GV: ĐỖ THỊ KIM THÀNH

Mệnh đề WHERE (TT)
NULL
Hãy cho biết MANV và TENNV khơng có người quản lý
SELECT MANV, TENNV
FROM NHANVIEN
WHERE MA_NQL IS NULL

Hãy cho biết MANV và TENNV có người quản lý
SELECT MANV, TENNV

FROM NHANVIEN
WHERE MA_NQL IS NOT NULL
GV: ĐỖ THỊ KIM THÀNH

26


13


01/03/2011

Mệnh đề FROM
Tên bí danh
PHONGBAN(TENPHG, MAPHG,TRPHG, NG_NHANCHUC)
DIADIEM_PHG(MAPHG, DIADIEM)
Hãy cho biết địa điểm, tên phòng của từng phòngban
SELECT TENPHG, DIADIEM
FROM PHONGBAN, DIADIEM_PHG
WHERE MAPHG = MAPHG

SELECT TENPHG, DIADIEM
FROM PHONGBAN AS PB, DIADIEM_PHG AS DD
WHERE PB.MAPHG = DD.MAPHG

GV: ĐỖ THỊ KIM THÀNH

27

BETWEEN, ORDER BY, IS NULL

Câu hỏi 13: Sử dụng =,>,>=,…
Danh sách các nhân viên sinh trong khoảng từ năm
1978 đến 1983?

SELECT
FROM

WHERE

GV: ĐỖ THỊ KIM THÀNH

MANV, HONV, TENLOT, TENNV
NHANVIEN
YEAR(NS)>=1978
AND
YEAR(NS)<=1983

28

14


01/03/2011

BETWEEN, ORDER BY, IS NULL

Câu hỏi 14: Sử dụng BETWEEN, ORDER BY.
Danh sách các nhân viên sinh trong khoảng từ năm
1978 đến 1983? Sắp xếp theo mức lương giảm dần.

SELECT
FROM
WHERE
ORDER BY

*
NHANVIEN

YEAR(NS) BETWEEN 1978 AND 1983
LUONG DESC

29

GV: ĐỖ THỊ KIM THÀNH

SO SÁNH IN & NOT IN
Câu hỏi 15: Sử dụng IN (so sánh với một tập hợp
giá trị cụ thể).
Cho biết họ tên nhân viên thuộc phịng „NC‟ hoặc
phịng „DH‟?

SELECT
FROM
WHERE

GV: ĐỠ THỊ KIM THÀNH

DISTINCT HOTEN
NHANVIEN
MAPHG IN („NC‟,‟DH‟)

30

15


01/03/2011


SO SÁNH IN & NOT IN
Câu hỏi 16: Sử dụng IN (so sánh với một tập hợp
giá trị chọn từ câu SELECT khác).
Cho biết họ tên nhân viên thuộc phòng „NC‟ hoặc
phịng „DH‟?
SELECT
FROM
WHERE

GV: ĐỠ THỊ KIM THÀNH

HONV, TENLOT, TENNV
NHANVIEN
MAPH IN
(SELECT
MAPHG
FROM
PHONGBAN
WHERE
MAPHG=„NC‟ OR MAPHG=„DH‟)

31

SO SÁNH IN & NOT IN
Câu hỏi 17: : Sử dụng NOT IN.
Cho biết mã số, họ tên, ngày tháng năm sinh của những
nhân viên không tham gia đề án nào?
Gợi ý cho mệnh đề NOT IN: thực hiện câu truy vấn “tìm nhân
viên có tham gia đề án (dựa vào bảng PhanCong)”, sau đó
lấy phần bù

SELECT
FROM
WHERE

GV: ĐỠ THỊ KIM THÀNH

MANV, HOTEN, NS
NHANVIEN
MANV NOT IN
(SELECT MANV
FROM PHANCONG)

32

16


01/03/2011

SO SÁNH IN & NOT IN
Câu hỏi 18: Cho biết tên phịng ban khơng chủ trì các
đề án triển khai năm 2005?
Gợi ý: thực hiện câu truy vấn “tìm phịng ban chủ trì
các đề án triển khai năm 2005”, sau đó lấy phần bù.
SELECT
FROM
WHERE

GV: ĐỠ THỊ KIM THÀNH


TENPH
PHONGBAN
MAPHG NOT IN
(SELECT
DISTINCT PHONG
FROM
DEAN
WHERE
NAMTHUCHIEN=2005)

33

HÀM COUNT,SUM,MAX,MIN,AVG
1. Sử dụng các hàm COUNT, SUM, MIN, MAX, AVG
trên 1 nhóm lớn (trên tồn bộ quan hệ):

Câu hỏi 19: Tính số nhân viên của cơng ty
SELECT
FROM

GV: ĐỠ THỊ KIM THÀNH

COUNT(MANV) AS SONV
NHANVIEN

34

17



01/03/2011

HÀM COUNT,SUM,MAX,MIN,AVG
1. Sử dụng các hàm COUNT, SUM, MIN, MAX, AVG
trên 1 nhóm lớn (trên tồn bộ quan hệ):

Câu hỏi 20: Tính số lượng nhân viên quản lý trực tiếp
nhân viên khác
SELECT
FROM

GV: ĐỖ THỊ KIM THÀNH

COUNT (DISTINCT MA_NQL)
NHANVIEN

35

HÀM COUNT,SUM,MAX,MIN,AVG
1. Sử dụng các hàm COUNT, SUM, MIN, MAX, AVG
trên 1 nhóm lớn (trên tồn bộ quan hệ):

Câu hỏi 21: Tìm mức lương lớn nhất, mức lương trung
bình, tổng lương của cơng ty
SELECT
FROM

GV: ĐỖ THỊ KIM THÀNH

MAX(LUONG), AVG(LUONG), SUM(LUONG)

NHANVIEN

36

18


01/03/2011

HÀM COUNT,SUM,MAX,MIN,AVG
1. Sử dụng các hàm COUNT, SUM, MIN, MAX, AVG
trên 1 nhóm lớn (trên tồn bộ quan hệ):

Câu hỏi 22: Cho biết nhân viên có mức lương lớn nhất

SELECT
FROM
WHERE

GV: ĐỖ THỊ KIM THÀNH

HOTEN
NHANVIEN
LUONG = (SELECT MAX (LUONG)
FROM NHANVIEN )

37

MỆNH ĐỀ GROUP BY


Câu hỏi 23: Cho biết nhân viên có mức lương trên mức
lương trung bình của cơng ty.

SELECT
FROM
WHERE

GV: ĐỠ THỊ KIM THÀNH

HOTEN
NHANVIEN
LUONG > (SELECT
FROM

AVG(LUONG)
NHANVIEN )

38

19


01/03/2011

MỆNH ĐỀ GROUP BY
2. Sử dụng các hàm COUNT, SUM, MIN, MAX, AVG
trên từng nhóm nhỏ: mệnh đề GROUP BY





Chia các dịng thành các nhóm nhỏ dựa trên tập
thuộc tính chia nhóm.
Thực hiện các phép tốn trên nhóm như:







COUNT : thực hiện phép đếm
SUM : tính tổng
MIN : lấy giá trị nhỏ nhất
MAX : lấy giá trị lớn nhất
AVG : lấy giá trị trung bình
39

GV: ĐỠ THỊ KIM THÀNH

MỆNH ĐỀ GROUP BY

nhóm

Quan hệ NV
Q
a
a
b
b

c
c
c
c
c
d
d
d

Chia các dịng thành các
nhóm dựa trên tập thuộc
tính chia nhóm

S
10
2
9
5
10
8
6
4
10
16
18
50

Q

Count(S)


a

2

b
c
d

2
5

Các thuộc tính GROUP BY: Q
GV: ĐỠ THỊ KIM THÀNH

Tương tự cho các
hàm SUM, MIN,
MAX, AVG

3

Câu SQL:
Select Q, count(S)
From NV
Group by Q

40

20



01/03/2011

MỆNH ĐỀ GROUP BY
2. Sử dụng các hàm COUNT, SUM, MIN, MAX, AVG
trên từng nhóm nhỏ: mệnh đề GROUP BY
Câu hỏi 23: Cho biết số lượng nhân viên theo từng
phái?
Do cột phái có 2 giá trị “nam” và “nữ”, trường hợp này ta
chia bảng NHANVIEN thành 2 nhóm nhỏ. Thuộc tính chia
nhóm là thuộc tính “Phai”.
SELECT

PHAI, COUNT(MANV) AS SONV

FROM
GROUP BY

NHANVIEN
PHAI
41

GV: ĐỖ THỊ KIM THÀNH

MỆNH ĐỀ GROUP BY
2. Sử dụng các hàm COUNT, SUM, MIN, MAX, AVG
trên từng nhóm nhỏ: mệnh đề GROUP BY
Câu hỏi 24: Cho biết số lượng nhân viên theo từng
phịng?
Do cột MAPHG có 3 giá trị “NC” và “DH” và “QL”, trường

hợp này ta chia bảng nhân viên thành 3 nhóm nhỏ. Thuộc
tính chia nhóm là thuộc tính “MAPHG”.
SELECT

MAPHG, COUNT(MANV)

FROM

NHANVIEN

GROUP BY

MAPHG

GV: ĐỠ THỊ KIM THÀNH

42

21


01/03/2011

MỆNH ĐỀ HAVING



Lọc kết quả theo điều kiện, sau khi đã gom
nhóm




Điều kiện của HAVING là điều kiện về các
hàm tính tốn trên nhóm (Count, Sum, Min,
Max, AVG) và các thuộc tính trong danh
sách GROUP BY.

43

GV: ĐỠ THỊ KIM THÀNH

MỆNH ĐỀ GROUP BY

Câu hỏi 25: Cho biết những nhân viên tham gia từ 2
đề án trở lên?

SELECT
FROM
GROUP BY
HAVING

GV: ĐỖ THỊ KIM THÀNH

MANV, COUNT(MADA) AS SODATG
PHANCONG
MANV
COUNT(MADA) >=2

44


22


01/03/2011

MỆNH ĐỀ GROUP BY

Câu hỏi 26: Cho biết số nhân viên có mã phịng ban
có trên 4 nhân viên?

SELECT
FROM
GROUP BY
HAVING

GV: ĐỖ THỊ KIM THÀNH

MAPHG, COUNT(MANV)
NHANVIEN
MAPHG
COUNT(MANV) > 4

45

23



×