Ví dụ: Hiển thị danh sách gồm MaSV, HoTen, Malop, của những sinh viên lớp ‘CT11’ SELECT MaSV, Ho, Ten, MaLop FROM DMLOP WHERE MaLop=‘CT11’ của những sinh viên lớp ‘CT11’, CT12’ SELECT
Trang 1Chương 3 NGÔN NGỮ THAO TÁC DỮ LIỆU
KHOA CÔNG NGHỆ THÔNG TIN
Trang 2[GROUP BY ds cột phân nhóm] [HAVING điều_kiện nhóm]
[ORDER BY cột_sắp_xếp][DESC | ASC]
Hiển thị danh sách cột từ các bảng dữ liệu gồm các dong tin thỏa mãn điều kiện
Trang 32 Danh sách cột trong câu lệnh
2 Hiển thị tất cả các cột trong một bảng
SELECT * FROM DMLOP
3 Hiển thị một số cột trong nhiều bảng quan hệ
SELECT MaLop, TenLop, DMLOP.MaKhoa,TenKhoaFROM DMLOP, DMKHOA
WHERE DMLOP.MaKhoa = DMKHOA.MaKhoa
Khi thực hiện lệnh sẽ kiểm tra điều kiện từng dòng, nếu thỏa mãn thì hiển thị kết quả
Tham chiếu đến cột KHÓA của bảng DMLOP
Trang 44 Thay đổi tiêu đề cột
SELECT MaLop AS 'Mã lớp', TenLop AS 'Tên lớp’, Khoahoc AS 'Khóa học’.FROM DMLOP
Trang 6Ví dụ: Hiển thị danh sách gồm Họ Tên, Ngày sinh dạng ‘dd/mm/yyyy’
Sử dụng hàm Convert
CONVERT(kiểu_dữ_liệu, biểu_thức [,kiểu_chuyển_đổi])Hàm có chức năng chuyển đổi giá trị của biểu thức sang kiểu dữ liệu được chỉ định
Tham số <kiểu_chuyển_đổi> là một giá trị số nhằm qui định định dạng dữ liệu hiển
thị và được qui định như sau:
Kiểu ngày Định dạng dữ liệu hiển thị
Trang 7Ví dụ: Cho biết tổng số sinh viên hiện có trong bảng SINHVIEN
Sử dụng Hàm Sum, Count, AVG
Select Count(MaSV) From SINHVIEN
Trang 86 Giới hạn số lượng dòng trong kết quả truy vấn
TOP n: truy vấn n mẫu tin đầu tiên
TOP N%: Truy vấn n% mẫu tin đầu tiên
DISTINT: Loại bỏ những giá trị trùng nhau trong danh sách
Ví dụ:
SELECT TOP 5 Ho,Ten,Ngaysinh
FROM SINHVIEN
Ví du: Hiển thị các Khoa có lớp học
SELECT DISTINCT MaKhoa FROM DMLOP
Trang 92 Điều kiện trong câu lệnh SELECT
WHERE <Điều kiện>: Điều kiện nằm sau từ khóa WHERE, là một biểu thức
Logic gồm các phép toán sau:
1 Các toán tử kết hợp điều kiện:AND, OR
2 Các toán tử so sánh: >,<,>=,<=,<>,!<,!>, =
3 Kiểm tra giới hạn của dữ liệu: BETWEEN/NOT BETWEEN
4 Toán tử thuộc tập hợp, không thuộc tập hợp:
IN (dãy giá trị | truy vấn Select|…), NOT IN ()
1 Kiểm tra khuôn dạng dữ liệu:
LIKE /NOT LIKE <nhóm ký tự đại diện>
Với ký tự đại diện:
%: đại diện cho một nhóm ký tự
_: đại diện cho một ký tự
[dãy ký tự]: ký tự đơn nằm trong dãy ký tự chỉ định như [0-9], [ABC]
[^dãy ký tự]: ký tự đơn KHÔNG nằm trong dãy ký tự chỉ định
Trang 10 Ví dụ: Hiển thị danh sách gồm MaSV, HoTen, Malop, của những sinh viên
lớp ‘CT11’
SELECT MaSV, Ho, Ten, MaLop
FROM DMLOP
WHERE MaLop=‘CT11’
của những sinh viên lớp ‘CT11’, CT12’
SELECT MaSV, Ho, Ten, MaLop
Vẫn câu hỏi đó nhưng hiển thị thêm cột TenLop
Ví dụ: Hiển thị danh sách sinh viên có họ là Lê
SELECT Ho,Ten FROM SINHVIEN
WHERE Ho LIKE 'Lê%‘
Trang 11Bài tập:
Danh sách sinh viên gồm: MaSV, Ho, Ten, GioiTinh (Nam,Nữ), Ngày sinh
(dd/mm/yyyy)
Cho biết những sinh viên có họ bắt đầu bằng N,L,T
Hiển thị danh sách sinh viên nữ lớp CT11 và CT12.
Hiển thị danh sách sinh viên không ở lớp CT11.
Hiển thị danh sách 5 sinh viên có tuổi cao nhất.
Hiển thị số lượng sinh viên học lớp CT11.
Hiển thị danh sách sinh viên nữ có sinh trước năm 1995
Hiển thị danh sách sinh viên có DiemMH <5
Vẫn câu hỏi trên nhưng hiển thị thêm cột Khoahoc
Trang 123 Thống kê dữ liệu với GROUP BY
Dùng để tính tổng theo một nhóm như: đếm số sinh viên mỗi lớp, Tính
ĐTB của mỗi sinh viên, …
Một số hàm gộp
1 SUM([ALL | DISTINCT] biểu_thức): Tính tổng các giá trị
2 AVG([ALL | DISTINCT] biểu_thức): Tính trung bình của các giá trị
3 COUNT([ALL | DISTINCT] biểu_thức): Đếm số các giá trị trong biểu
thức
4 COUNT(*): Đếm số các dòng được chọn
5 MAX(biểu_thức): Tính giá trị lớn nhất
6 MIN(biểu_thức): Tính giá trị nhỏ nhất
Trang 13 Ví dụ: Đếm số lượng sinh viên của mỗi lớp
Sử dụng một bảng SINHVIEN
Vùng phân nhóm là Malop, Vùng tính tổng là MASV
Select MaLop, Count(MaSV) AS Siso
From SINHVIEN
Group by MaLop
Hiển thị thêm vùng TenLop ở bảng DMLOP
SELECT DMLOP.MaLop,TenLop,COUNT(MaSV) AS SisoFROM DMLOP, SINHVIEN
WHERE DMLOP.MaLop=SINHVIEN.MaLop
GROUP BY DMLOP.MaLop,TenLop
Trang 14 Thêm từ khóa HAVING <Điều kiện nhóm>
Ví dụ: Đưa ra danh sách những lớp có tổng số sinh viên >10
SELECT DMLOP.MaLop,TenLop,COUNT(MaSV) AS SisoFROM DMLOP, SINHVIEN
WHERE DMLOP.MaLop=SINHVIEN.MaLop
GROUP BY DMLOP.MaLop,TenLop
HAVING COUNT(Masv)>10
Trang 15 Ví dụ: Tính Điểm Trung bình chung học kỳ theo từng sinh viên Xuất dữ liệu ra bảng
mới có tên DIEMTBC
Trang 16 Ví dụ: Cho biết những sinh viên có ít nhất 2 môn học có DiemMH <5
Trước hết: Lọc ra những sinh viên có DiemMH các môn <5
Đếm số môn học của từng sinh viên với điều kiện số môn học >=2
Group By MaSV Having Count(MaMonhoc) >=2
Thêm vùng: Ho, Ten, Lop.
Trang 17 Bài tập
1 Tính Điểm trung bình chung của các học kỳ cho từng sinh viên
2 Cho biết những sinh viên có tổng số đơn vị học trình của các môn thiếu
điểm trên 25 (sinh viên ở lại lớp)
3 Cho biết những sinh viên có Điểm TK các môn học <3 (ở lại lớp)
4 Đếm số sinh viên Nam, Nữ của lớp CT11
5 Đếm số sinh viên Nam, Nữ của từng lớp
6 Cho biết giáo viên dạy ít nhất 2 môn học Bổ sung thêm bảng
GIAOVIEN(MaGV, HoTen, Dienthoai, MonGDay)
7 Cho biết giáo viên dạy ít nhất 2 môn học ‘001’ và ‘002’ (Lọc ra những
giáo viên dạy ít nhất một môn ‘001 và ‘002’, Đếm số số môn dạy của từng giáo viên với đk tổng số môn dạy =2)
8 Cho biết MaSV học tất cả các môn học (Đếm số môn học của từng sinh
viên, có tổng số lượng bằng tổng số lượng của các môn học)
9 Cho biết Tên sinh viên có ít nhất 2 môn học có DiemMH <5
Trang 184 CÁC CẤU TRÚC PHỨC TẠP
(Gồm nhiều lệnh Select)
4.1 Sử dụng cấu trúc lồng nhau: (truy vấn con)
Khi cần thực hiện phép kiểm tra giá trị của một biểu thức có thuộc hay không thuộc trong tập hợp các giá trị của truy vấn con hay không, ta có thể sử dụng toán tử IN (NOT IN) như sau:
SELECT …
WHERE <biểu_thức> [NOT] IN (Câu lệnh Select_con)
Select MalopFrom SINHVIENWhere Ten=N’Hoa’)
Trang 19Ví dụ 2: Cho biết Tên Môn học không có sinh viên thiếu điểm MH
Trang 204.2 Lượng từ Exists, All, Any
Trong trường hợp tập hợp các giá trị trong truy vấn con nhiều hơn một thì ta phải thêm lượng từ trước (Truy vấn con đó)
Ví dụ: Cho biết danh sách các môn học có số đơn vị học trình lớn hơn hoặc
bằng số đơn vị học trình của môn học có mã là 001
(SELECT SoDvht FROM DMMONHOC WHERE MaMonhoc='001')
Trang 21Lượng từ ALL
<Biểu thức cột> <Phép toán> All (Câu lệnh Select)
(Select DiemMH From DIEMTHI)
Ví dụ: Cho biết Tên sinh viên có DiemMH lớn nhất
Select Ho, Ten
Where DiemMH >=ALL
Ví dụ: Cho biết Mã sinh viên có DiemMH lớn nhất
Nghĩa là lớn hơn hoặc bằng tất cả các giá trị điểm của tập DiemMH
Trang 23Lượng Từ EXISTS
[NOT] EXISTS (truy_vấn_con) Lượng từ EXISTS trả về giá trị True nếu kết quả của truy vấn con có ít nhất một dòng (khác rỗng), ngược lại trở về giá trị False
Tương tự NOT EXISTS
Ví dụ: Cho biết thông tin môn học có sinh viên học
Select * From DMMONHOC
Where Exists (Select * From DIEMTHI
Where DMONHOC.MaMon=DIEMTHI.MaMon)
Ví dụ: Cho biết họ tên của những sinh viên hiện chưa có điểm
thi của bất kỳ một môn học nào?
SELECT Ho, Ten
FROM SINHVIEN
WHERE NOT EXISTS(SELECT Masv FROM DIEMTHI
WHERE DIEMTHI.Masv=SINHVIEN.Masv)
Trang 24Các dòng giống nhau trong tập kết quả sẽ bị loại bỏ
Các tập hợp tham gia trong phép toán phải khả hợp nghĩa là phải cùng tập các cột
Giữ lại những dòng giống nhau thêm từ khóa ALL
Union All, Except All, Intersect All
Trang 255.1 Phép hợp (Union)
Hợp của 2 hay nhiều truy vấn Select là một tập tất cả các bộ giá trị của các truy vấn đó
Vidu: Cho biết mã sinh viên đã học ít nhất một môn có mã là “001”, “002”
Select Masv From DIEMTHI
Where Mamon=‘001’
Union
(Select Masv From DIEMTHI
Where Mamon=‘002’)
Trang 265.2 Phép hiệu (Except)
Hiệu của 2 truy vấn A và B là một tập tất cả các bộ giá trị thuộc truy vấn
A nhưng không thuộc truy vấn B
Ví dụ: Cho biết Mã sinh viên chưa học môn nào
Là những sinh viên có trong bảng SINHVIEN mà không ở bảng
Trang 275.3 Phép giao (Intersect)
Giao của 2 hay nhiều truy vấn Select là một tập gồm các bộ giá trị thuộc các truy vấn đó
Ví dụ: Cho biết Mã sinh viên học cả hai môn có mã ‘001’ và ‘002’
Select Masv from DIEMTHI Where MAMONHOC='001'
Intersect
(Select Masv from DIEMTHI where MAMONHOC='002')
Trang 28Bài tập
1 Cho biết Mã môn học mà chưa được học
2 Cho biết Tên môn học mà chưa được học
3 Cho biết Mã giáo viên dạy cả hai môn có mã ‘001’ và ‘002’
4 Cho biết Tên giáo viên dạy cả hai môn có mã ‘001’ và ‘002’
5 Cho biết Mã giáo viên dạy môn học có số đơn vị học trình >=5
6 Cho biết Masv học ít nhất một học do giáo viên mã ‘001’
Trang 296 BỔ SUNG, CẬP NHẬT, XÓA DỮ LIỆU
Trang 30 Ví dụ: Bổ sung một dòng vào bảng DMKHOA với bộ giá trị sau (‘KT’,
Trang 32 Ví dụ: Thêm cột Xếp loại trong bảng DIEMTBC, Cập nhật dữ liệu cho cột đó theo yêu cầu sau:
Nếu DiemTBC >=8 thì xếp loại Giỏi, ngược lại
Nếu DiemTBC >=7 thì xếp loại Khá, ngược lại
Nếu DiemTBC >=5 thì xếp loại Trung bình
Ngược lại là yếu
Alter Table DIEMTBC
ADD Xeploai nvarchar(10) NULL
Update DIEMTBC
Set Xeploai = Case
When DTBC>=8 then N'Giỏi'
When DTBC>=7 then N'Khá'
When DTBC>=5 then N'Trung bình'
Else N'Yếu'
END
Trang 34Ví dụ: Xoá khỏi bảng SINHVIEN những sinh viên có nơi sinh tại HuếDELETE FROM sinhvien
WHERE noisinh LIKE ‘%Huế%’
Ví dụ: Xóa khỏi bảng DMLOP những lớp không có sinh viên nào
DELETE FROM DMLOP
WHERE Malop NOT IN
(SELECT DISTINCT Malop FROM sinhvien)
Trang 357 CÁC LOẠI PHÉP NỐI
INNER JOIN: Là phép kết nối gồm những dòng có giá trị so khớp nhau
trên cả hai bảng
FULL JOIN: Phép kết nối gồm tất cả các dòng của hai bảng.
RIGHT JION: Phép kết nối gồm các dòng có giá trị so khớp nhau trên cả
hai bảng và các dòng thuộc bảng bên PHẢI của liên kết
LEFT JION: Phép kết nối gồm các dòng có giá trị so khớp nhau trên cả hai
bảng và các dòng thuộc bảng bên TRÁI của liên kết
Cú pháp lệnh:
SELECT <Danh sách cột>
FROM <Bảng 1> {INNER| FULL| RIGHT| FULL} JOIN
<Bảng 2> ON <Điều kiện kết nối 1>
… (Tham khảo trên cửa sổ View)
Trang 37II KHUNG NHÌN (WIEW)
Một khung nhìn (view) có thể được xem như là một bảng “ảo” trong cơ sở
dữ liệu có nội dung được định nghĩa thông qua một truy vấn (câu lệnh
Trang 39Ví dụ:
1 Hiển thị danh sách sinh viên gồm MaSV, Ho,Ten, Ngaysinh, Gioitinh
TenLop
Trang 40Ví dụ: Hiển thị danh sách sinh viên gồm MaSV, Ho,Ten, Ngaysinh, Gioitinh
TenLop của sinh viên nữ học lớp ‘CT11’,’CT12’
Trang 41 Ví dụ: Đếm số lượng sinh viên mỗi lớp
Trang 42 Ví du: Đếm số sinh viên nữ mỗi lớp
Trang 43 Ví dụ: Cho biết Lớp nào chưa có sinh viên
Trang 44Câu hỏi kiểm tra 15 phút:
1.Từ khóa Group by sẽ trả lời cho các dạng câu hỏi nào, cho ví dụ
2.Hiển thị danh sách sinh viên gồm Masv, Họ Tên, giới tính (nam,nữ), Ngày sinh (dd/mm/yyyy), Malop của những sinh viên có tên bắt đầu bằng chữ L,N,H
Trang 45Tóm tắt chương 3:
Dùng câu trúc truy vấn Select để trả lời các dạng
câu hỏi sau:
1.Từ khóa Where trả lời câu hỏi có điều kiện lọc
2.Câu hỏi lấy dữ liệu từ 2 bảng thì thêm điều kiện kết nối (SINHVIEN.Malop=DMLOP.Malop, DIEMTHI.MaMH=DMMON.MaMH, …) khi đó để tham chiếu đến cột liên kết thì phải thêm đường dẫn tới bảng của nó (SINHVIEN.Malop, DIEMTHI.Malop)
3.Từ khóa Group by sẽ trả lời cho các dạng câu hỏi như: tính tổng theo từng nhóm, điều kiện thỏa mãn ít nhất 2,3, … giá trị hay tất cả (thiếu điểm ít nhất 2 môn học, 3 môn học, …, tất cả môn học) Tuy nhiên ta có thể dùng phép toán tập hợp Intersect (phức tạp)
4.Phép toán tập hợp Except trả lời những dạng câu hỏi có từ “chưa ” (Những lớp CHƯA có sv nào, sinh viên CHƯA học môn nào)
5.Dùng lượng từ Exists để kiểm tra kết quả truy vấn có giá trị trị hay không (thường dùng trong lập trình)
6.Phép toán NOT IN () trong cấu trúc lồng nhau để trả lời các dạng câu hỏi phủ định (KHÔNG thiếu môn học nào, KHÔNG …)
7.Lượng từ ALL thường trả lời cho các câu hỏi dạng lớn NHẤT, nhỏ NHẤT (>= ALL(…) hoặc <=ALL(…))
Chú ý: trong các cấu trúc phức tạp thông thường ta phải quy về tìm MÃ trước (masv, malop, MaMH, …) sau đó sử dụng cấu trúc lồng nhu để tìm các tông tin khác (Tên sv thiếu 2, Tên sv bắt đầu bằng ‘N’, …)
Trang 46Hãy cho biết các từ khóa, lượng từ, phép toán sử
dụng trong các câu hỏi sau:
1 Đếm số sinh viên nữ lớp CT11
2 Đếm số sinh viên nam, nữ lớp CT11
3 Cho biết những sinh viên có họ không bắt đầu bằng N,L,T
4 Hiển thị danh sách sinh viên không ở lớp CT11.
5 Hiển thị danh sách 5 sinh viên có tuổi cao nhất.
6 Cho biết những lớp có tổng số sv >7
7 Cho biết những sinh viên có ít nhất 2 môn học có DiemMH
<5
8 Cho biết những sinh viên có tổng số đơn vị học trình của
các môn thiếu điểm trên 25 (sinh viên ở lại lớp)
9 Cho biết những sinh viên có Điểm TK các môn học <3 (ở
lại lớp).
10 Cho biết tên sinh viên KHÔNG thiếu môn học nào
11 Cho biết tên sinh viên học TẤT CẢ các môn học
12 Cho biết tên sinh viên học ít nhất hai môn có mã ‘001’ và
‘002’
13 Cho biết tên sinh viên có điểm môn ‘001’ cao nhất.
14 Cho biết Tên môn học mà chưa có sinh viên nào học