Chƣơng IV:
Transact-SQL và truy vấn dữ liệu
Nội dung chƣơng IV
• Câu lệnh thao tác dữ liệu
–
–
–
–
Truy vấn dữ liệu cơ bản
Truy vấn lồng
Hàm kết hợp và gom nhóm
Một số dạng truy vấn khác
• Khung nhìn
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
2
Cơ sở dữ liệu ví dụ
• Trong suốt phần sau của chương này, ta sử dụng
csdl sau làm ví dụ minh họa:
– NhanVien(manv, honv, tenlot, tennv, ngaysinh, diachi,
phai, luong, manql, phong)
– PhongBan(maphong,tenphong,trphong, ngnhanchuc)
– DDPhong(maphong, diadiem)
– DeAn(tenda, mada, ddiemda, phong)
– PhanCong(manvien, soda, thoigian)
– ThanNhan(manvien, tentn, phai, ngaysinh, quanhe)
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
3
Truy vấn dữ liệu
• Là ngôn ngữ rút trích dữ liệu
– Thường đi kèm với một số điều kiện nào đó
• Dựa trên
Phép toán ĐSQH
Một số bổ sung
– Cho phép kết quả trả về của bảng có nhiều dòng trùng
nhau
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
4
Truy vấn cơ bản
• Gồm 3 mệnh đề
SELECT [DISTINCT] <danh sách các cột>
FROM <danh sách các bảng>
[WHERE] <điều kiện>
Từ khóa DISTINCT để loại
bỏ các dòng trùng nhau
trong bảng kết quả
– <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 liên quan đến câu truy vấn
– <điều kiện>
•
•
•
Biểu thức boolean xác định dòng nào sẽ được rút trích
Nối các biểu thức: AND, OR, và NOT
Phép toán: , , , , , , LIKE và BETWEEN
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
5
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>
SELECT L
L (C (R))
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
FROM R
WHERE C
6
Truy vấn cơ bản (tt)
• Ví dụ: Cho biết ds sinh viên lớp có mã lớp là „Ti01‟
SELECT *
FROM SinhVien
WHERE malop = ‘Ti01’
Dấu * để chỉ tất cả các cột
– Tương đương với biểu thức đsqh sau:
malop = ‘Ti01’ (SinhVien)
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
7
Truy vấn cơ bản (tt)
• Ví dụ: Cho biết ds sinh viên nam của lớp có mã
„Ti01‟
SELECT masv, hoten, ngaysinh, phai, malop
FROM SinhVien
WHERE malop = ‘Ti01’ and phai = ‘Nam’
– Tương đương với biểu thức đsqh sau:
masv,
hoten, ngaysinh, phai, malop
‘Ti01’and phai=‘Nam’ (SinhVien))
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
(malop
=
8
Truy vấn cơ bản (tt)
• Tên bí danh:
– Có thể đặt lại tên cho ds các thuộc tính trong bảng kết
quả (gọi là tên bí danh) bằng cách sử dụng cú pháp
sau:
Select <tên cột> AS <tên mới cho cột>
– Ví dụ
SELECT masv AS ma, hoten AS ‘Ho
ngaysinh, phai, malop
FROM SinhVien
WHERE malop = ‘Ti01’ and phai = ‘Nam’
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
ten’,
9
Truy vấn cơ bản (tt)
• Ví dụ: Cho biết mã số, họ tên, ngày sinh, tên lớp
của danh sách sinh viên lớp „công nghệ thông tin
01‟
SELECT
maso, hoten, ngaysinh, tenlop
FROM
SinhVien, LopHoc
WHERE
tenlop = ‘Cong nghe thong tin
01’ AND SinhVien.malop = LopHoc.malop
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
10
Truy vấn cơ bản (tt)
• Tên bí danh cho bảng
– Ví dụ: Cho biết mã số, họ tên, ngày sinh, tên lớp của
danh sách sinh viên lớp „công nghệ thông tin 01‟
Select
From
Where
maso, hoten, ngaysinh, tenlop
SinhVien sv, LopHoc lh
tenlop = =‘Cong nghe thong
tin 01’
and sv.malop = lh.malop
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
11
Truy vấn cơ bản (tt)
- Toán tử between, not between, like, not like
• BETWEEN
– Sử dụng để kiểm tra giá trị dữ liệu nằm trong (ngoài)
một khoảng nào đó.
SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG > 20000 AND LUONG < 30000
• Có thể viết:
SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG BETWEEN 20000 AND 30000
• Sử dụng NOT BETWEEN tƣơng tự
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
12
Truy vấn cơ bản (tt)
- Toán tử between, not between, like, not like
• LIKE
– Từ khóa LIKE (NOT LIKE) được sử dụng trong câu
lệnh select nhằm mô tả khuôn dạng dữ liệu cần tìm
kiếm.
– Thường được kết hợp với các ký tự đại diện sau:
• %: chuỗi ký tự bất kỳ (có thể là không có hoặc nhiều ký tự)
• _: ký tự đơn bất kỳ
• []: ký tự đơn bất kỳ trong giới hạn được chỉ định (ví dụ [a-f])
hay một tập (ví du: [abcdef])
• [^]: ký tự đơn bất kỳ không nằm trong giới hạn được chỉ định
(ví dụ [^a-f]) hay một tập (ví dụ [^abcdef]).
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
13
Truy vấn cơ bản (tt)
- Toán tử between, not between, like, not like
• LIKE (tt)
– Ví dụ:
SELECT masv, hoten, ngaysinh
FROM SinhVien
WHERE hoten LIKE ‘Nguyen _ _ _ _’
– Hoặc
SELECT masv, hoten, ngaysinh
FROM SinhVien
WHERE hoten LIKE ‘Nguyen %’
• Sử dụng NOT LIKE tƣơng tự
– Lƣu ý:
• Like “ab\%cd%” cho ra những chuỗi bắt đầu với “ab%cd”
• Like “ab\\cd%” cho ra những chuỗi bắt đầu với “ab\cd”
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
14
Truy vấn cơ bản (tt)
- Ví dụ
• Với những đề án ở „Ha Noi‟, cho biết mã đề án, mã
phòng ban chủ trì đề án, họ tên trưởng phòng cùng
với ngày sinh và địa chỉ của người ấy
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
15
Truy vấn cơ bản (tt)
- Ví dụ
• Cho biết họ tên của nhân viên phòng số 5 có tham
gia vào đề án “Sản phẩm X” với số giờ làm việc trên
10 giờ
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
16
Truy vấn cơ bản
- Mệnh đề ORDER BY
• Dùng để hiển thị kết quả câu truy vấn theo một thứ
tự nào đó
• Cú pháp:
SELECT <ds các cột>
FROM <ds các bảng>
WHERE <điều kiện>
ORDER BY <danh sách các cột><kiểu sắp>
– Trong đó <kiểu sắp> có thể là:
• ASC: tăng (mặc định)
• DESC: giảm
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
17
Truy vấn cơ bản
- Mệnh đề ORDER BY (tt)
• Ví dụ:
SELECT MANVIEN, SODA
FROM PHANCONG
ORDER BY MANVIEN DESC, SODA
MANVIEN
SODA
999887777
10
999887777
30
987987987
10
987987987
30
987654321
10
987654321
20
987654321
30
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
18
Nội dung chƣơng IV
• Câu lệnh thao tác dữ liệu
–
–
–
–
Truy vấn dữ liệu cơ bản
Truy vấn lồng
Hàm kết hợp và gom nhóm
Một số dạng truy vấn khác
• Khung nhìn
Ths.Ths.
Lƣơng
ThịThị
Ngọc
Khoa
CNTT
– TĐT
TUD – ĐH TĐT
Lƣơng
NgọcKhánh
Khánh ––Khoa
CNTT
– ĐH
19
Truy vấn lồng
• Các câu lệnh SELECT có thể lồng nhau ở nhiều
mức
• Các câu truy vấn con trong cùng một mệnh đề
WHERE được kết hợp bằng phép nối logic
• Câu truy vấn con thường trả về một tập các giá trị
• Cú pháp:
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <so sánh tập hợp> (
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <điều kiện>)
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
20
Truy vấn lồng (tt)
• Mệnh đề WHERE của câu truy vấn cha
– <biểu thức> <so sánh tập hợp> <truy vấn con>
– So sánh tập hợp thường đi cùng với một số toán tử
•
•
•
IN, NOT IN
ALL
ANY hoặc SOME
– Kiểm tra sự tồn tại
•
•
EXISTS
NOT EXISTS
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
21
Truy vấn lồng (tt)
• Có 2 loại truy vấn lồng
– Lồng phân cấp
•
•
Mệnh đề WHERE của truy vấn con không tham chiếu đến
thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn
cha
Khi thực hiện, câu truy vấn con sẽ được thực hiện trước, 1 lần
– Lồng tương quan
•
•
Mệnh đề WHERE của truy vấn con tham chiếu ít nhất một
thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn
cha
Khi thực hiện, câu truy vấn con sẽ được thực hiện nhiều lần,
mỗi lần tương ứng với một bộ của truy vấn cha
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
22
Truy vấn lồng (tt)
- Ví dụ lồng phân cấp
• Ví dụ:
SELECT MANV, TENNV
FROM NHANVIEN, DDPhong
WHERE DIADIEM = ‘TP HCM’ AND phong = maphong
• Tương đương với câu truy vấn lồng sau:
SELECT MANV, TENNV
FROM NHANVIEN
WHERE PHONG IN (SELECT MAPHONG
FROM DDPHONG
WHERE DIADIEM = ‘TP HCM’
)
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
23
Truy vấn lồng (tt)
- Ví dụ lồng phân cấp
• Ví dụ: Tìm những nhân viên không có thân nhân
nào
Ths. Lƣơng Thị Ngọc Khánh – Khoa CNTT – ĐH TĐT
24
Truy vấn lồng (tt)
- Ví dụ lồng tƣơng quan
• Ví dụ:
SELECT MANV, TENNV
FROM NHANVIEN
WHERE EXISTS (
SELECT *
FROM PHONGBAN
WHERE TENPHONG=‘Nghien cuu’ AND PHONG=MAPHONG)
Câu truy vấn trên cho kết quả gì? Tương đương với
câu truy vấn đơn giản nào?
SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE TENPHONG=‘Nghien cuu’ AND PHONG=MAPHONG
Ths.Ths.
Lƣơng
ThịThị
Ngọc
Khoa
CNTT
– TĐT
TUD – ĐH TĐT
Lƣơng
NgọcKhánh
Khánh ––Khoa
CNTT
– ĐH
25