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

Cơ Sở Dữ Liệu ĐH Cần Thơ Chương 4 pps

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 (439.06 KB, 52 trang )

Chương
Chương
4. NGÔN NG
4. NGÔN NG


SQL
SQL
GV: Trần Ngân Bình

4. 2
N
N


i Dung
i Dung
 Giới thiệu ngôn ngữ SQL
 Truy vấn dữ liệu bằng lệnh SELECT
 Cậpnhật dữ liệu (INSERT – Thêm, DELETE – Xóa,
UPDATE – Sửa)
4. 3
M
M


c tiêu c
c tiêu c


a SQL


a SQL
 Một cách lý tưởng, ngôn ngữ CSDL phải cho phép
người dùng:
) Tạo CSDL và cấu trúc quan hệ
) Thực hiện việc xen, sửa, xóa dữ liệu trên các quan hệ.
) Thực hiện các câu truy vấn đơn giản và phức tạp.
 Phải thực hiện các công việc này với công sức bỏ ra
là nhỏ nhất và cú pháp lệnh phải dễ học.
 Có thể sử dụng như nhau trên các HQTCSDL khác
nhau (~ tuân theo chuẩn nào đó).
4. 4
L
L


ch s
ch s


ph
ph
á
á
t tri
t tri


n c
n c



a SQL
a SQL
 Năm 1974, D. Chamberlin (IBM San Jose Lab) định
nghĩa ngôn ngữ SEQUEL (Structured English Query
Language).
 Một phiên bản sửa chữa, SEQUEL/2, đã được đưa ra
vào năm 1976 nhưng sau đó đổi tên thành SQL vì lý
do pháp lý.
 Sau đóIBM tạo ra một bản mẫu HQTCSDL gọi là
System R, dựa trên SEQUEL/2.
 Tuy nhiên gốc rễ của SQL là từ ngôn ngữ SQUARE
(Specifying Queries as Relational Expressions), là
ngôn ngữ đã có trước dự án System R.
 Vào cuối 70s, ORACLE xuất hiện và được xem là
HQTCSDL thương mại đầu tiên dựa trên SQL.
4. 5
L
L


ch s
ch s


ph
ph
á
á
t tri

t tri


n c
n c


a SQL
a SQL
 Năm 1987, ANSI và ISO công bố chuẩn đầu tiên cho
SQL.
 Năm 1989, ISO công bố thêm phần phụ lục định
nghĩa một ‘Nét cải tiến cho toàn vẹn’.
 Năm 1992, phiên bản chỉnh sửa đầu tiên của chuẩn
này có mặt, mang tên SQL2 hay SQL-92.
 Năm 1999, SQL:1999 được phát hành với các chuẩn
hỗ trợ cho quản lý dữ liệu hướng đối tượng.
 Vào cuối năm 2003, SQL:2003 ra đời.
4. 6
Ngôn Ng
Ngôn Ng


SQL
SQL
 SQL là một ngôn ngữ phi thủ tục với hai thành phần
chính:
) DDL (Data Definition Language) dùng để định nghĩa cấu trúc
của CSDL. ANSI chia DDL gồm 2 phần:
 DDL gồm các lệnh để định nghĩa cấu trúc của CSDL:

CREATE TABLE, CREATE VIEW, ALTER TABLE,…
 DCL (Data Control Language) gồm các lệnh để điều khiển
quyền truy cập trên dữ liệu: GRANT, REVOKE,…
) DML (Data Manipulation Language) để truy xuất và cập nhật
dữ liệu: INSERT, UPDATE, DELETE, SELECT, …
4. 7
Câu l
Câu l


nh SQL
nh SQL
 Hầu hết các phần trong câu lệnh SQL là không phân biệt chữ
hoa chữ thường, trừ các ký tự trong chuỗi dữ liệu.
 Tuy câu lệnh SQL có hình thức tự do nhưng để dễ đọc, ta nên:
) Viết mỗi mệnh đề của lệnh trên một dòng riêng
) Viết bắt đầu một mệnh đề thẳng hàng với các mệnh đề khác
) Nếu một mệnh đề có nhiều vế thì nên viết mỗi vế trên một dòng và
thục vào trong mệnh đề đó.
 Ví dụ:
SELECT Hten_nv, Cviec
FROM Nhan_vien
WHERE Phai = ‘nam’
AND (Ma_phong=30 OR Ma_phong=40)

Câu lệnh SQL gồm 2 thành phần: Từ khóa và từ do người dùng
định nghĩa (tên bảng, tên cột, )
4. 8
C
C

ú
ú
ph
ph
á
á
p câu l
p câu l


nh SQL
nh SQL
 Cú pháp của lệnh SQL được giới thiệu
theo dạng mở rộng của ký hiệu BNF:
)Chữ hoa đại diện cho từ khóa.
)Chữ thường đại diện cho các từ của người
dùng định nghĩa
)Dấu | chỉ sự lựa chọn.
)Dấu { chỉ phần tử bắt buộc phải có.
)Dấu [ chỉ phần tử tùy chọn (không bắt buộc).
)Dấu chỉ thành phần có thể lặp lại từ 0 đến nhiều lần.
4. 9
CSDL v
CSDL v
í
í
d
d



1. PHONG (MA_PHONG, TEN_PHONG, TRUONG_PHONG )
Mỗi phòng có một mã duy nhất, một tên phòng, trưởng phòng là mã nhân
viên của trưởng phòng.
2. NHANVIEN (MA_NV, HTEN_NV, PHAI, CVIEC, LUONG, PHU_CAP,
MA_PHONG)
Nhân viên có một mã duy nhất, một họ tên, phái, công việc, lương, phụ cấp
và thuộc một phòng nào đó.
3. TĐO_NN (MA_NV, NGOAINGU, BANG_CAP)
Một nhân viên có thể biết nhiều ngoại ngữ,mỗi ngoại ngữ có thể có các
bằng cấp khác nhau.
4. 10
Truy
Truy
v
v


n
n
đơn
đơn
gi
gi


n
n
 Truy vấnDL từ mộtbảng, có thểđịnh thứ tự xuấthiện
các cột
SELECT [ DISTINCT | ALL]

{ * | <tên cột 1> [,<tên cột 2> [, ] ] }
FROM <tên bảng>
) DISTINCT: Chỉ hiển thị những dòng phân biệt.
) ALL: hiển thị tất cả (chế độ mặc định)
) Lưu ý: Khác với phép chiếu của ĐSQH, các dòng trùng nhau
của bảng kết quả không tự động bị loại bỏ.
) Dấu hoa thị (*) thay thế tất cả các cột trong bảng.
 Thứ tự các mệnh đề không được thay đổi.
 SELECT và FROM là hai mệnh đề duy nhất bắt buộc
phải có.
4. 11
Truy
Truy
v
v


n
n
đơn
đơn
gi
gi


n
n


v

v
í
í
d
d


 Hiểnthị toàn bộ nội dung củabảng
NHAN_VIEN:
SELECT * FROM Nhan_vien
 Hiểnthị danh sách gồmhọ tên nhân viên và
phái:
SELECT HTen_nv, Phai
FROM Nhan_vien
 Hiểnthị danh sách các mứclương có thể có của
nhân viên:
SELECT DISTINCT Luong
FROM Nhan_vien
4. 12
S
S


p
p
x
x
ế
ế
p

p
k
k
ế
ế
t qu
t qu


 Sắpxếpkếtquả theo một hay nhiềucột:
) Sử dụng mệnh đề ORDER BY ở cuốilệnh SELECT:
ORDER BY <Tên Cột | STT Cột> [ASC| DESC]
[,<Tên Cột| STT Cột> [ASC| DESC],…]
 ASC là chế độ sắp xếp mặc định
 Ví dụ: Sắpxếpkếtquả theo mã phòng tăng dần, và
lương giảmdần.
SELECT *
FROM Nhan_vien
ORDER BY Ma_phong, Luong DESC
4. 13
Ch
Ch


n
n
c
c
á
á

c
c
dòng
dòng
trong
trong
b
b


ng (1)
ng (1)
 Sử dụng mệnh đề WHERE sau MĐ FROM để chọn các dòng
thỏa điều kiện
WHERE <Điều kiện chọn 1> [ AND | OR <ĐK chọn 2> [ ] ]
 Dạng ĐK 1: So sánh giá trị thuộc tính với 1 giá trị cụ thể:
<Cột 1> so sánh <giá trị>
) Ví dụ: Hiển thị tất cả các thông tin của nhân viên Lê Quỳnh Như
SELECT * FROM Nhan_vien
WHERE Hten_nv = ‘Lê Quỳnh Như’
) Ví dụ: Hiển thị tên và tên công việc của các nhân viên nam đang
làm việc trong các phòng 30, 40
SELECT Hten_nv, CVIEC
FROM Nhan_vien
WHERE Phai = ‘Nam’ AND
(Ma_phong=30 OR Ma_phong=40)
4. 14
Ch
Ch



n c
n c
á
á
c dòng trong b
c dòng trong b


ng (2)
ng (2)
 Dạng ĐK 2: So sánh giá trị của các thuộc tính với nhau:
<Cột 1> so sánh <Cột 2>
) Ví dụ: Tìm những nhân viên có lương bằng hai lần phụ cấp:
SELECT Hten_nv, Luong, Phu_cap
FROM Nhan_vien
WHERE Luong = Phu_cap * 2
 Dạng ĐK 3: So sánh giá trị thuộc tính với hằng có kiểu
tương thích:
<Cột> so sánh <Hằng>
) Ví dụ: Hiển thị họ tên các NV nam có công việc là thư ký
SELECT Hten_nv
FROM Nhan_vien
WHERE Phai = 'Nam' AND UPPER(cviec) = ‘THU KY’
4. 15
Ch
Ch


n c

n c
á
á
c dòng trong b
c dòng trong b


ng (3)
ng (3)
 Dạng ĐK 4: So sánh cột với một tập gồm nhiều giá trị:
<Cột> [NOT] IN (<Danh sách các giá trị>)
) Ví dụ:Hiển thị họ tên các NV làm việc trong các phòng 10, 30
và 50.
SELECT Hten_nv
FROM Nhan_vien
WHERE Ma_phong IN ( 10, 30, 50 )
 Dạng ĐK 5: Tìm kiếm theo phạm vi:
<Cột> [NOT] BETWEEN <Giá trị đầu> AND <Giá trị cuối>
) Ví dụ: Hiển thị họ tên các NV có mức lương từ 3500 đến
4500
SELECT Hten_nv, Luong
FROM Nhan_vien
WHERE Luong BETWEEN 3500 AND 4500
4. 16
C
C
á
á
c
c

d
d


ng
ng
đi
đi


u
u
ki
ki


n
n
ch
ch


n
n
(4)
(4)
 Dạng ĐK 6: Tìm kiếm theo mẫu dạng chuỗi:
<Cột> [NOT] LIKE <Chuỗi>
_ : đại diện cho một ký tự bất kỳ
% : đại diện cho một chuỗi ký tự bất kỳ

) Ví dụ: Hiển họ thị tên của các NV có tên lót là ‘Văn’
SELECT Hten_nv, Ma_phong FROM Nhan_vien
WHERE Hten_nv LIKE ‘% Van %’
) Ví dụ: Hiển thị các NV có tên vần ‘ao’ như Bao, Hao, Thao,
SELECT * FROM Nhan_vien
WHERE Hten_nv LIKE ‘% %_ao’
 Dạng ĐK 7: Tìm kiếm theo trị trống NULL
<Cột> IS [NOT] NULL
) Ví dụ: Hiển thị các NV Không được hưởng phụ cấp
SELECT * FROM Nhan_vien Where Phu_cap IS NULL
4. 17
C
C
á
á
c
c
h
h
à
à
m
m
k
k
ế
ế
t
t
t

t


p
p
 Các hàm kết tập (Aggregate Functions) còn đượcgọi
là hàm cột (Field Functions):
) AVG (<biểuthứcsố có bao hàm cộtkiểusố>)
) SUM (<biểuthứcsố có bao hàm cộtkiểusố>)
) MIN (<BT số, chuỗi hay ngày có bao hàm cộtkiểutương
ứng>)
) MAX (<BT số, chuỗi hay ngày có bao hàm cộtkiểutương
ứng>)
) COUNT (<BT bấtkỳ> | *)
4. 18
C
C
á
á
c
c
h
h
à
à
m
m
k
k
ế

ế
t
t
t
t


p
p


c
c
á
á
ch d
ch d
ù
ù
ng
ng
 Hàm kết tập được dùng trong mệnh đề SELECT như
sau:
SELECT tên-hàm (<Biểu Thức>) [AS <Tên cột
mới>]
[,tên-hàm (<Biểu thức>) [, ]]
FROM tên bảng
 Lưuý: Trongmệnh đề select củadạng này, các tên
cộtphải được đặt trong hàm kếttập.
 Từ khóa AS cho phép đặtlạitên cộtchocáccộtkết

quả
) Ví dụ: Có bao nhiêu NV trong hồ sơ nhân viên
SELECT COUNT(*) AS Tong_So_NV
FROM Nhan_vien
4. 19
C
C
á
á
c
c
h
h
à
à
m
m
k
k
ế
ế
t
t
t
t


p
p



V
V
í
í
d
d


 Cho biếtmứclương cao nhất, thấpnhất và trung bình
SELECT MAX( Luong), MIN( Luong), AVG( Luong)
FROM Nhan_vien
 Tính tổng lương phải trả cho phòng 40
SELECT SUM (Luong) FROM Nhan_vien
WHERE Ma_phong=40
 Cho biết tổng số thư ký nữ và lương trung bình của họ
SELECT COUNT(*), AVG (Luong) FROM Nhan_vien
WHERE Phai = 'Nu' AND Cviec = ‘Thu Ky’
 Cho biết phụ cấp thấp nhất của các công việc quản lý
SELECT MIN (Phu_cap) As PCAP_THAPNHT
FROM Nhan_vien WHERE Cviec LIKE ‘Quan Ly %‘
4. 20
T
T
í
í
nh to
nh to
á
á

n v
n v


i SQL
i SQL
 Các toán tử này được dùng với dữ liệu loại số và bao gồm toán
tử cộng (+), trừ (-), nhân (*), chia (/).
 Các toán tử này chỉ có thể được dùng trong các mệnh đề:
SELECT, HAVING và WHERE.
 Ví dụ: Hiển thị họ tên, lương, phụ cấp và thu nhập hàng năm của
tất cả nhân viên, sắp xếp theo thu nhập trong năm giảm dần.
SELECT Hten_nv, Luong, Phu_cap,
(Luong + Phu_cap)*12 As Thu_nhap
FROM Nhan_vien
ORDER BY 4 DESC
 Ví dụ: Hiển thị tất cả nhân viên có phụ cấp nhiều hơn 15% mức
lương.
SELECT Hten_nv, Luong, Phu_cap FROM Nhan_vien
WHERE Phu_cap > 0.15 *Luong
4. 21
Truy v
Truy v


n con (1)
n con (1)
 Trong trường hợp điều kiện chọn ở mệnh đề WHERE
cần truy cập thông tin ở các bảng khác với bảng đang
truy vấn để kiểm tra điều kiện

 Ta có thể sử dụng một câu select khác lồng trong
điều kiện ở mệnh đề WHERE. Select này được gọi là
SELECT CON hay truy vấncon
4. 22
Truy v
Truy v


n con (1)
n con (1)
 Cáctruyvấncon sẽ nằm trong mệnh đề WHERE của
truy vấn chính.
SELECT <Tên các cột>
FROM <Tên bảng>
WHERE <điềukiệnchứa select con>
( SELECT <Tên các cột>
FROM <Tên bảng> [WHERE
<Điềukiện>] )
[AND | OR <điềukiệnchứa select con>
( SELECT <Tên các cột>
FROM <Tên bảng> [WHERE
<Điềukiện>] )
[ ] ]
Truy vấn
con 1
Truy vấn
con 2
Truy vấn
chính
(truy vấn

cha)
4. 23
C
C
á
á
c d
c d


ng đi
ng đi


u ki
u ki


n ch
n ch


a Select con (1)
a Select con (1)
 Dạng 1: <Tên cột> <so sánh> (<select con>): ĐK đúng khi giá
trị của cột so sánh đúng với giá trị trả về từ select con
) Ví dụ: Hiển thị họ tên nhân viên có lương cao nhất
SELECT Hten_nv FROM Nhan_vien
WHERE Luong =
( SELECT MAX (Luong) FROM Nhan_vien )

 Dạng 2: <Tên cột> <so sánh> ALL (<select con>): ĐK đúng khi
giá trị củacột so sánh đúng với tấtcả các giá trị trả về từ
select con.
) Ví dụ: Hiển thị họ tên nhân viên có lương cao hơn tất cả các
nhân viên của phòng 30
SELECT Hten_nv FROM Nhan_vien
WHERE Luong > ALL
( SELECT Luong FROM Nhan_vien
WHERE Ma_phong =30 )
4. 24
C
C
á
á
c d
c d


ng đi
ng đi


u ki
u ki


n ch
n ch



a Select con (2)
a Select con (2)
 Dạng 3: <Tên cột> <so sánh> ANY|SOME (<select con>): ĐK
đúng khi giá trị của cột so sánh đúng với bất kỳ một giá
trị nào trả về
từ select con.
) Ví dụ: Hiển thị họ tên trưởng phòng của tất cả các phòng
SELECT HTEN_NV FROM NHAN_VIEN
WHERE MA_NV = ANY
( SELECT TRUONG_PHONG FROM PHONG )
 Dạng 4: <Tên cột> [NOT] IN (<select con>): ĐK đúng khi giá trị
của cột nằm trong tập hợp các giá trị trả về của select con.
) Ví dụ: Hiển thị họ tên trưởng phòng của tất cả các phòng
SELECT HTEN_NV FROM NHAN_VIEN
WHERE MA_NV IN
( SELECT TRUONG_PHONG FROM PHONG )
4. 25
C
C
á
á
c d
c d


ng đi
ng đi


u ki

u ki


n ch
n ch


a Select con (3)
a Select con (3)
 Dạng 5: [NOT] EXISTS (<select con>): Đk đúng khi kết quả
trả về của select con khác rỗng.
) Ví dụ: Hiển thị họ tên những nhân viên có công việc và lương
bằng với 1 nhân viên khác.
SELECT HTEN_NV FROM NHAN_VIEN AS A
WHERE EXISTS
( SELECT * FROM NHAN_VIEN AS B
WHERE A.Cviec = B.Cviec AND A.Luong = B.Luong
AND A.Ma_NV <> B. Ma_NV)

×