Cơ sở dữ liệu - Chương 4 - ThS. Nguyễn Vương Thịnh
Chia sẻ bởi Nguyễn Vương Thịnh |
Ngày 19/03/2024 |
8
Chia sẻ tài liệu: Cơ sở dữ liệu - Chương 4 - ThS. Nguyễn Vương Thịnh thuộc Công nghệ thông tin
Nội dung tài liệu:
TRƯỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM
KHOA CÔNG NGHỆ THÔNG TIN
BÀI GIẢNG HỌC PHẦN
CƠ SỞ DỮ LIỆU VÀ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Giảng viên: ThS. Nguyễn Vương Thịnh
bản ghi môn: Hệ thống thông tin
Hải Phòng, 2016
Chương 4
NGÔN NGỮ TRUY VẤN CÓ CẤU TRÚC
(SQL – Structured Query Language)
2
Thông tin về giảng viên
3
Thông tin về học phần
PHƯƠNG PHÁP HỌC TẬP, NGHIÊN CỨU
Nghe giảng, thảo luận, trao đổi với giảng viên trên lớp.
Tự nghiên cứu tài liệu và làm bài tập ở nhà.
PHƯƠNG PHÁP ĐÁNH GIÁ
SV phải tham dự ít nhất 75% thời gian.
Có 02 bài kiểm tra viết giữa học phần (X2 = (L1 + L2)/2), 01 bài kiểm tra thực hành (X3). Điểm quá trình X = (X2 + X3)/2.
Thi kết thúc học phần bằng hình thức trắc nghiệm khách quan trên máy tính (Z = 0.5X + 0.5Y).
4
Tài liệu tham khảo
Elmasri, Navathe, Somayajulu, Gupta, Fundamentals of Database Systems (the 4th Edition), Pearson Education Inc, 2004.
Nguyễn Tuệ, Giáo trình Nhập môn Hệ Cơ sở dữ liệu, Nhà xuất bản Giáo dục Việt Nam, 2007.
Nguyễn Kim Anh, Nguyên lý của các hệ Cơ sở dữ liệu, Nhà xuất bản Đại học Quốc gia Hà Nội, 2004.
5
Tài liệu tham khảo
NGÔN NGỮ TRUY VẤN CÓ CẤU TRÚC
4.1. TỔNG QUAN VỀ NGÔN NGỮ SQL
4.2. NGÔN NGỮ ĐỊNH NGHĨA DỮ LIỆU (DDL)
4.3. NGÔN NGỮ THAO TÁC DỮ LIỆU (DML)
4.4. CÁC DẠNG THỨC CỦA CÂU LỆNH SELECT
4.5. CÂU LỆNH SELECT VÀ ĐẠI SỐ QUAN HỆ
6
4.1. TỔNG QUAN VỀ NGÔN NGỮ SQL
(Structured Query Language)
4.1.1. LỊCH SỬ PHÁT TRIỂN
Được phát triển bởi IBM vào những năm 70 với tên gọi ban đầu là Squel dựa trên mô hình dữ liệu quan hệ của F.Codd.
Viện Tiêu chuẩn quốc gia Hoa Kỳ (ANSI) và Tổ chức tiêu chuẩn quốc tế (ISO) đã công bố các phiên bản chuẩn của SQL: SQL_86, SQL_89, SQL_92, SQL:1999, SQL:2003, SQL:2006, SQL:2008, SQL:2011
Các phần mềm hệ quản trị cơ sở dữ liệu khác nhau sẽ hỗ trợ ngôn ngữ SQL ở các mức độ khác nhau (có thể bổ sung thêm hoặc không hỗ trợ một số câu lệnh hay cú pháp)
4.1.2. CÁC THÀNH PHẦN CỦA NGÔN NGỮ SQL
NGÔN NGỮ ĐỊNH NGHĨA DỮ LIỆU
(DDL – Data Definition Language)
NGÔN NGỮ THAO TÁC DỮ LIỆU
(DML – Data Definition Language)
(Định nghĩa (xác lập) hoặc thay đổi cấu trúc tập tin của CSDL, các bảng dữ liệu, các liên kết,...)
(Cập nhật dữ liệu vào các bảng, truy vấn (đọc) dữ liệu từ các bảng,...)
9
4.1.3. MỘT SỐ QUY ƯỚC VỀ THUẬT NGỮ
Khi làm việc với SQL và các hệ quản trị cơ sở dữ liệu thông thường:
Dữ liệu được tổ chức dưới dạng cơ sở dữ liệu (database). Đó là một tập hợp gồm các bảng dữ liệu có liên quan.
Mỗi bảng dữ liệu (data table) là tập hợp các hàng (bản ghi) và cột. Đó chính là một quan hệ (relation) trong mô hình quan hệ.
Lưu ý: Một tập hợp các bản ghi là kết quả trả về của một câu lệnh truy vấn SELECT cũng được xem là một quan hệ.
Mỗi cột (column) của bảng là một thuộc tính (attribute) của quan hệ, mỗi bản ghi (record) của bảng là một bộ (tuple) của quan hệ.
Cấu trúc của bảng dữ liệu (danh sách các cột) được xác định (định nghĩa) bởi lược đồ quan hệ tương ứng.
10
4.1.4. CÁC KIỂU DỮ LIỆU TRONG SQL
4.2. NGÔN NGỮ ĐỊNH NGHĨA DỮ LIỆU
(DDL – Data Definition Language)
4.2.1. CÁC LỆNH ĐỐI VỚI CƠ SỞ DỮ LIỆU
A. Tạo cơ sở dữ liệu
CREATE DATABASE
Ví dụ 4.1:
CREATE DATABASE dbQuanLyBanHang
B. Xóa cơ sở dữ liệu
DROP DATABASE
Ví dụ 4.2:
DROP DATABASE dbQuanLyBanHang
Lưu ý: Các hệ quản trị CSDL khác nhau có thể đưa thêm vào một số tham số tùy biến khác.
13
4.2.2. CÁC LỆNH ĐỐI VỚI BẢNG DỮ LIỆU
A. Tạo bảng dữ liệu
CREATE TABLE
(
[NOT NULL],
[ [NOT NULL],]
[ [NOT NULL],]
...
[CONSTRAINT PRIMARY KEY (),]
[CONSTRAINT FOREIGN KEY ()
REFERENCES(),] ...
)
B. Xóa bỏ bảng dữ liệu
DROP TABLE
C. Sửa đổi cấu trúc bảng dữ liệu
Thêm cột dữ liệu mới
ALTER TABLE
ADD [NOT NULL]
Xóa cột dữ liệu
ALTER TABLE
DROP COLUMN
Sửa kiểu dữ liệu của cột
ALTER TABLE
ALTER COLUMN [NOT NULL]
Thêm một ràng buộc đối với bảng
ALTER TABLE
ADD CONSTRAINT
Xóa một ràng buộc đối với bảng
ALTER TABLE
DROP CONSTRAINT
14
15
Ví dụ 4.3: Tạo các bảng dữ liệu sau đây:
PhongBan(MaPB, TenPB, DiaDiem)
NhanVien(MaNV, TenNV, ChuyenMon, Phong)
CREATE TABLE PhongBan
(
MaPB char(3) NOT NULL,
TenPB nvarchar(30) NOT NULL,
DiaDiem nvarchar(100),
CONSTRAINT PK_PhongBan PRIMARY KEY(MaPB)
)
CREATE TABLE NhanVien
(
MaNV char(5) NOT NULL,
TenNV nvarchar(30) NOT NULL,
ChuyenMon nvarchar(100),
Phong char(3) NOT NULL,
CONSTRAINT PK_NhanVien PRIMARY KEY(MaNV),
CONSTRAINT FK_NhanVien FOREIGN KEY (Phong) REFERENCES PhongBan(MaPB)
)
16
Ví dụ 4.4:
Thêm cột NgaySinh vào bảng NhanVien
ALTER TABLE NhanVien
ADD NgaySinh Date NOT NULL
Đổi kiểu dữ liệu của cột ChuyenMon trong bảng NhanVien từ kiểu nvarchar có độ dài 100 sang kiểu nvarchar có độ dài 150
ALTER TABLE NhanVien
ALTER COLUMN ChuyenMon nvarchar(150)
Xóa cột DiaDiem trong bảng PhongBan
ALTER TABLE PhongBan
DROP COLUMN DiaDiem
Xóa ràng buộc khóa ngoại FK_NhanVien trong bảng NhanVien
ALTER TABLE NhanVien
DROP CONSTRAINT FK_NhanVien
4.3. NGÔN NGỮ THAO TÁC DỮ LIỆU
(DML – Data Manipulation Language)
4.3.1. THÊM BẢN GHI VÀO BẢNG – CÂU LỆNH INSERT
INSERT INTO[()] VALUES()
Ví dụ 4.5:
INSERT INTO PhongBan VALUES(`PTV`, N`Phòng Tài vụ`, N`P203 - C3`)
Ví dụ 4.6:
INSERT INTO PhongBan(TenPB, MaPB) VALUES(N`Phòng Tài vụ`, `PTV`)
4.3.2. CẬP NHẬT DỮ LIỆU TRONG BẢNG – CÂU LỆNH UPDATE
UPDATE
SET = , = , ...
[WHERE <điều kiện>]
Ví dụ 4.7:
UPDATE PhongBan
SET TenPB = N`Phòng Kế hoạch – Tài chính`, DiaDiem = N`P302 - Nhà A6`
WHERE MaPB = `PTV`
18
4.3.3. XÓA DỮ LIỆU TRONG BẢNG – CÂU LỆNH DELETE
DELETE FROM [WHERE <điều kiện>]
Ví dụ 4.8:
DELETE FROM NhanVien WHERE ChuyenMon = N`Kỹ sư tin học`
4.3.4. TRUY VẤN DỮ LIỆU TRONG BẢNG – CÂU LỆNH SELECT
SELECT [DISTINCT] [TOP N] *|
FROM
[WHERE <điều kiện>]
[GROUP BY [HAVING <điều kiện>]]
[ORDER BY [ASC|DESC]]
Mệnh đề FROM
Chỉ ra các bảng dữ liệu – nơi nguồn dữ liệu được lấy về. Các bảng có thể được kết nối (join) với nhau theo 1 cách thức nào đấy.
19
Mệnh đề WHERE <điều kiện>
Giới hạn các bản ghi được trả về trong tập kết quả. Chỉ các bản ghi thỏa mãn <điều kiện> được chỉ ra sau WHERE mới được trả về.
Mệnh đề GROUP BY
Chia tập bản ghi lấy về thành các nhóm sao cho:
Các bản ghi mà có giá trị giống nhau trên các cột trong (chỉ ra sau GROUP BY) sẽ được xếp vào cùng nhóm.
Các hàm thống kê (COUNT, SUM, MAX, MIN, AVG) có thể được áp dụng để tính toán trên từng nhóm.
Mỗi bản ghi trong tập kết quả chứa giá trị đại diện cho một nhóm.
Mệnh đề HAVING <điều kiện>
Đi kèm với GROUP BY để lọc ra các nhóm thỏa mãn <điều kiện> cho trước.
20
Mệnh đề ORDER BY [ASC|DESC]
Sắp xếp các bản ghi kết quả theo trật tự tăng dần (ASC) hay giảm dần (DESC) của giá trị trên các cột được chỉ ra trong.
Mệnh đề SELECT *|
Giới hạn các cột được phép hiển thị trong tập kết quả. Dùng ký hiệu dấu * sau SELECT nếu muốn hiển thị tất cả các cột của tập kết quả.
Từ khóa DISTINCT được sử dụng kèm khi muốn loại bỏ những bản ghi trùng lắp trong tập kết quả.
Từ khóa TOP được sử dụng khi chỉ muốn lấy về N bản ghi đầu tiên trong tập kết quả.
Có thể dung từ khóa AS để tạo tên khác (bí danh - alias) cho cột với cú pháp AS .
21
4.4. CÁC DẠNG THỨC CỦA CÂU LÊNH
TRUY VẤN SELECT
4.4.1. LỌC CÁC BẢN GHI TRẢ VỀ VỚI MỆNH ĐỀ WHERE
SELECT *| FROM WHERE <điều kiện> ...
Lưu ý: <điều kiện> là biểu thức logic gồm các phép toán so sánh (<,>,>=,<=, <>, BETWEEN, LIKE) kết hợp với các phép toán logic (AND, OR, NOT)
Ví dụ 4.9: HocSinh(MaHS, TenHS, NamSinh, Lop, DiemThi)
Liệt kê các học sinh của lớp 10A5 có điểm trên 8 hoặc dưới 5
SELECT MaHS, TenHS, Diem FROM HocSinh
WHERE ((Diem >= 8) OR (Diem < 5)) AND (Lop = `10A5`)
Liệt kê toàn bản ghi thông tin về các học sinh của lớp 10A5 và 10A7 có điểm trong khoảng từ 7 đến 9
SELECT * FROM HocSinh
WHERE (Diem BETWEEN 7 AND 9) AND (Lop = `10A5` OR Lop = `10A7`)
22
Toán tử so sánh mờ LIKE:
Giúp so sánh xem chuỗi ký tự có khớp với một mẫu (pattern) cho trước hay không.
Mẫu so sánh thường chứa các ký tự đại diện (wildcard):
Ký tự "%": Đại diện cho một đoạn chuỗi ký tự bất kỳ.
Ký tự "_": Đại diện cho một ký tự bất kỳ.
Ví dụ 4.10: HocSinh(MaHS, TenHS, NamSinh, Lop, DiemThi)
Liệt kê tất cả các học sinh có họ "Nguyễn"
SELECT * FROM HocSinh WHERE TenHS LIKE N`Nguyễn%`
Liệt kê tất cả các học sinh có phần họ và đệm là "Nguyễn Văn" còn phần tên gồm 3 ký tự kết thúc bằng "n"
SELECT * FROM HocSinh WHERE TenHS LIKE N`Nguyễn Văn _ _n`
23
4.4.2. TRUY VẤN GỘP NHÓM VỚI MỆNH ĐỀ GROUP BY VÀ HAVING
SELECT *| FROM [WHERE <điều kiện>]
GROUP BY [HAVING <điều kiện>]
Chia dữ liệu lấy về thành các nhóm (group) sao cho các bản ghi trong cùng nhóm thì sẽ có giá trị trên các cột dùng để gộp nhóm là giống nhau.
Mỗi bản ghi của kết quả sẽ mang các giá trị đại diện cho một nhóm. Đó có thể là một số các giá trị của cột gộp nhóm hoặc là kết quả khi áp dụng một hàm thống kê trên nhóm đó (các hàm thống kê thường được sử dụng kèm trong mệnh đề SELECT để thực hiện tính toán trên từng nhóm).
Mệnh đề HAVING giúp lọc ra các nhóm (group) thỏa mãn <điều kiện>
Lưu ý: Chỉ những cột có mặt trong mệnh đề GROUP BY hoặc các hàm thống kê (tức là những giá trị đại diện cho cả nhóm) mới được phép xuất hiện trong mệnh đề SELECT và HAVING.
24
CÁC HÀM THỐNG KÊ THƯỜNG DÙNG:
COUNT(*): Đếm số bản ghi có trong 1 nhóm.
COUNT(Ai): Đếm số giá trị tương ứng với cột Ai của các bản ghi trong nhóm.
SUM(Ai): Tính tổng các giá trị tương ứng với cột Ai của các bản ghi trong nhóm.
MAX(Ai): Tìm giá trị lớn nhất trong số các giá trị tương ứng với cột Ai của các bản ghi trong nhóm.
MIN(Ai): Tìm giá trị nhỏ nhất trong số các giá trị tương ứng với cột Ai của các bản ghi trong nhóm.
AVG(Ai): Tính giá trị trung bình của các giá trị tương ứng với cột Ai của các bản ghi trong nhóm.
25
Ví dụ 4.11: Cho bảng dữ liệu:
Inventory(ID, Value, Type)
Thống kê số lượng và tổng giá trị các đồ vật thuộc về mỗi loại
SELECT Type, COUNT(*), SUM(Value)
FROM Inventory GROUP BY Type
26
27
Ví dụ 4.12: HocSinh(MaHS, TenHS, NamSinh, Lop, DiemThi)
Liệt kê số lượng học sinh có trong từng lớp mà có điểm thi từ 5 điểm trở lên
SELECT Lop, COUNT(*) AS SoLuong FROM HocSinh
WHERE DiemThi >= 5.0 GROUP BY Lop
Liệt kê các lớp có số lượng học sinh trong bảng lớn hơn 30
SELECT Lop, COUNT(*) AS SoLuong FROM HocSinh
GROUP BY Lop HAVING COUNT(*) > 30
Thống kê điểm số cao nhất và thấp nhất mà học sinh trong mỗi lớp đạt được
SELECT Lop, MAX(DiemThi) AS CaoNhat, MIN(DiemThi) AS ThapNhat
FROM HocSinh GROUP BY Lop
Thống kê điểm thi bình quân của học sinh mỗi lớp
SELECT Lop, AVG(DiemThi) AS DiemBinhQuan FROM HocSinh
GROUP BY Lop
28
Ví dụ 4.13: MatHang(MaMH, TenMH, LoaiHang, SoLuong, DonGia)
Thống kê ứng với mỗi loại hàng có bao nhiêu mặt hàng
SELECT LoaiHang, COUNT(*) AS SL_MatHang FROM MatHang
GROUP BY LoaiHang
Thống kê các mặt hàng số lượng lớn hơn 10
SELECT MaMH, TenMH, SoLuong FROM MatHang
WHERE SoLuong >10
Thống kê các loại hàng có số lượng mặt hàng lớn hơn 3
SELECT LoaiHang, COUNT(*) AS SL_MatHang FROM MatHang
GROUP BY LoaiHang HAVING COUNT(*) > 3
Thống kê tổng số sản phẩm ứng với mỗi loại hàng (tính tổng số lượng sản phẩm của các mặt hàng thuộc về loại đó)
SELECT LoaiHang, SUM(SoLuong) AS TongSoSP FROM MatHang
GROUP BY LoaiHang
29
Thống kê giá trị (bằng tiền) ứng với mỗi mặt hàng (lưu ý: chỉ thống kê các mặt hàng có số lượng trên 10 chiếc). Biết Giá trị = Số lượng * Đơn giá
SELECT MaMH, TenMH, SoLuong * DonGia AS GiaTri
FROM MatHang WHERE SoLuong > 10
Thống kê giá trị bằng tiền ứng với mỗi loại hàng (tổng tiền các mặt hàng thuộc về loại hàng đó)
SELECT LoaiHang, SUM(SoLuong * DonGia) AS GiaTri
FROM MatHang GROUP BY LoaiHang
30
4.4.3. SẮP XẾP CÁC BẢN GHI KẾT QUẢ VỚI MỆNH ĐỀ ORDER BY
SELECT *| FROM [WHERE <điều kiện>]
[GROUP BY [HAVING <điều kiện>]]
ORDER BY [ASC|DESC]
Ví dụ 4.14: HocSinh(MaHS, TenHS, NamSinh, Lop, DiemThi)
Liệt kê các học sinh theo thứ tự giảm dần của điểm thi
SELECT MaHS, Ten HS, DiemThi FROM HocSinh
ORDER BY DiemThi DESC
Liệt kê các học sinh theo thứ tự lớp tăng dần (10A1, 10A2, 10A3..., 11A1, 11A2, 11A3...)
SELECT * FROM HocSinh ORDER BY DiemThi
Liệt kê các học sinh theo thứ tự lớp tăng dần (10A1, 10A2,...), nếu các học sinh cùng lớp thì xếp giảm dần theo điểm
SELECT * FROM HocSinh ORDER BY Lop ASC, DiemThi DESC
31
4.4.4. TRUY VẤN DỮ LIỆU TỪ NHIỀU BẢNG
SELECT *| FROM
[WHERE ... ] [GROUP BY ... ] [ORDER BY ...]
Các bảng dữ liệu sau FROM thường được kết nối với nhau nhờ các mệnh đề join
A. Mệnh đề INNER JOIN
INNER JOIN ON <điều kiện 1-2>
Trả về 01 tập các bản ghi. Mỗi bản ghi là kết quả của việc kết nối một bản ghi của với một bản ghi của nếu chúng thỏa mãn <điều kiện 1-2>
Có thể mở rộng ra cho kết nối nhiều bảng hơn
INNER JOIN ON <điều kiện 1-2>
INNER JOIN ON <điều kiện 1-2-3>...
INNER JOIN ON <điều kiện 1-2-..-n>
32
SELECT * FROM Lop INNER JOIN HocSinh ON Lop.MaLop = HocSinh.MaLop
Lop
HocSinh
Ví dụ 4.15
33
B. Các mệnh đề OUTER JOIN
LEFT OUTER JOIN
LEFT OUTER JOIN ON <điều kiện 1-2>
Trả về 01 tập các bản ghi gồm:
Các bản ghi là kết quả của việc kết nối các bản ghi của với các bản ghi của nếu chúng thỏa mãn <điều kiện 1-2> (chính là kết quả của INNER JOIN).
Các bản ghi còn lại của (mà không thể kết nối được với bản ghi nào của ) sau khi đã bổ sung thêm các giá trị NULL vào vị trí tương ứng với các cột của .
34
SELECT * FROM Lop LEFT OUTER JOIN HocSinh ON Lop.MaLop = HocSinh.MaLop
Lop
HocSinh
Ví dụ 4.16
35
B. Các mệnh đề OUTER JOIN
RIGHT OUTER JOIN
RIGHT OUTER JOIN ON <điều kiện 1-2>
Trả về 01 tập các bản ghi gồm:
Các bản ghi là kết quả của việc kết nối các bản ghi của với các bản ghi của nếu chúng thỏa mãn <điều kiện 1-2> (chính là kết quả của INNER JOIN).
Các bản ghi còn lại của (mà không thể kết nối được với bản ghi nào của ) sau khi đã bổ sung thêm các giá trị NULL vào vị trí tương ứng với các cột của .
36
SELECT * FROM Lop RIGHT OUTER JOIN HocSinh ON Lop.MaLop = HocSinh.MaLop
Lop
HocSinh
Ví dụ 4.16
HocSinh
37
B. Các mệnh đề OUTER JOIN
FULL OUTER JOIN
FULL OUTER JOIN ON <điều kiện 1-2>
Trả về 01 tập các bản ghi gồm:
Các bản ghi là kết quả của việc kết nối các bản ghi của với các bản ghi của nếu chúng thỏa mãn <điều kiện 1-2> (chính là kết quả của INNER JOIN).
Các bản ghi còn lại của (mà không thể kết nối được với bản ghi nào của ) sau khi đã bổ sung thêm các giá trị NULL vào vị trí tương ứng với các cột của .
Các bản ghi còn lại của (mà không thể kết nối được với bản ghi nào của ) sau khi đã bổ sung thêm các giá trị NULL vào vị trí tương ứng với các cột của .
38
SELECT * FROM Lop FULL OUTER JOIN HocSinh ON Lop.MaLop = HocSinh.MaLop
Lop
HocSinh
Ví dụ 4.16
HocSinh
39
C. Mệnh đề CROSS JOIN
CROSS JOIN
Trả về 01 tập các bản ghi là kết quả của việc kết nối lần lượt mỗi bản ghi của với từng bản ghi của (tương tự như phép tích Đề Các).
Có thể mở rộng ra cho kết nối nhiều bảng hơn hoặc phối hợp với các dạng JOIN khác.
CROSS JOIN ... CROSS JOIN
40
SELECT * FROM Lop CROSS JOIN HocSinh
Ví dụ 4.17
41
4.5. CÂU LỆNH SELECT VÀ ĐẠI SỐ QUAN HỆ
4.5.1. CÁCH THỨC THỰC THI CÂU LỆNH TRUY VẤN SELECT
Mệnh đề FROM được thực thi đầu tiên. Dữ liệu được đọc ra từ các bảng và các bản ghi được kết nối (join) với nhau (nếu cần) để tạo ra một tập bản ghi trung gian.
Mệnh đề WHERE (nếu có) được thực hiện ngay sau đó để loại bỏ các bản ghi không thỏa mãn điều kiện trong tập bản ghi trung gian.
42
Mệnh đề GROUP BY (nếu có) được thực hiện tiếp theo để chia các bản ghi thành các nhóm sao cho các bản ghi trong cùng nhóm thì có giá trị trên các thuộc tính gộp nhóm là giống nhau. Tập bản ghi kết quả của câu lệnh truy vấn lúc này sẽ gồm các bản ghi mà mỗi bản ghi chứa giá trị đại diện cho 1 nhóm.
Mệnh đề HAVING (nếu có) được thực hiện ngay sau đó để loại bỏ bớt đi những nhóm không thỏa mãn điều kiện.
Mệnh đề ORDER BY (nếu có) được thực hiện kế tiếp để sắp xếp tập bản ghi kết quả theo trật tự tăng dần hay giảm dần của giá trị trong các cột được chỉ định.
Mệnh đề SELECT được thực thi sau cùng. Chỉ những cột được chỉ ra sau SELECT mới xuất hiện trong tập kết quả.
43
44
Lưu ý: Cú pháp câu lệnh truy vấn SELECT được xây dựng trên nền tảng mở rộng của đại số quan hệ, do đó có những thành phần của câu lệnh truy vấn không thể biểu diễn được trong đại số quan hệ.
Mọi biểu thức của đại số quan hệ đều có thể biểu diễn tương đương bằng một câu lệnh truy vấn SELECT.
Tuy nhiên, chỉ những câu lệnh truy vấn SELECT với các thành phần cơ bản mới biểu diễn được dưới dạng một biểu thức đại số quan hệ.
45
Ví dụ 4.18
Liệt kê danh sách các học sinh đang học ở phòng P302 có điểm thi trên 8. Thông tin hiển thị bao gồm MaHS, TenHS, Lop, DiemThi:
46
Liệt kê danh sách các học sinh thuộc lớp 10A3 có điểm thi trên 8. Thông tin hiển thị bao gồm MaHS, TenHS:
SELECT MaHS, TenHS FROM HocSinh WHERE Lop = `10A3` AND DiemThi > 8
SELECT MaHS, TenHS, Lop, DiemThi
FROM LopHoc INNER JOIN HocSinh ON TenLop = Lop
WHERE PhongHoc = `P302` AND DiemThi > 8
47
Liệt kê danh sách các học sinh được chủ nhiệm bởi “Thầy Hùng”. Thông tin hiển thị bao gồm MaHS, TenHS:
Thống kê số học sinh mỗi lớp. Thông tin hiển thị bao gồm Lớp và số lượng học sinh:
SELECT MaHS, TenHS
FROM LopHoc INNER JOIN HocSinh ON TenLop = Lop
WHERE GVCN = N`Thầy Hùng`
SELECT Lop, COUNT(*) FROM HocSinh GROUP BY Lop
Q & A
48
KHOA CÔNG NGHỆ THÔNG TIN
BÀI GIẢNG HỌC PHẦN
CƠ SỞ DỮ LIỆU VÀ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Giảng viên: ThS. Nguyễn Vương Thịnh
bản ghi môn: Hệ thống thông tin
Hải Phòng, 2016
Chương 4
NGÔN NGỮ TRUY VẤN CÓ CẤU TRÚC
(SQL – Structured Query Language)
2
Thông tin về giảng viên
3
Thông tin về học phần
PHƯƠNG PHÁP HỌC TẬP, NGHIÊN CỨU
Nghe giảng, thảo luận, trao đổi với giảng viên trên lớp.
Tự nghiên cứu tài liệu và làm bài tập ở nhà.
PHƯƠNG PHÁP ĐÁNH GIÁ
SV phải tham dự ít nhất 75% thời gian.
Có 02 bài kiểm tra viết giữa học phần (X2 = (L1 + L2)/2), 01 bài kiểm tra thực hành (X3). Điểm quá trình X = (X2 + X3)/2.
Thi kết thúc học phần bằng hình thức trắc nghiệm khách quan trên máy tính (Z = 0.5X + 0.5Y).
4
Tài liệu tham khảo
Elmasri, Navathe, Somayajulu, Gupta, Fundamentals of Database Systems (the 4th Edition), Pearson Education Inc, 2004.
Nguyễn Tuệ, Giáo trình Nhập môn Hệ Cơ sở dữ liệu, Nhà xuất bản Giáo dục Việt Nam, 2007.
Nguyễn Kim Anh, Nguyên lý của các hệ Cơ sở dữ liệu, Nhà xuất bản Đại học Quốc gia Hà Nội, 2004.
5
Tài liệu tham khảo
NGÔN NGỮ TRUY VẤN CÓ CẤU TRÚC
4.1. TỔNG QUAN VỀ NGÔN NGỮ SQL
4.2. NGÔN NGỮ ĐỊNH NGHĨA DỮ LIỆU (DDL)
4.3. NGÔN NGỮ THAO TÁC DỮ LIỆU (DML)
4.4. CÁC DẠNG THỨC CỦA CÂU LỆNH SELECT
4.5. CÂU LỆNH SELECT VÀ ĐẠI SỐ QUAN HỆ
6
4.1. TỔNG QUAN VỀ NGÔN NGỮ SQL
(Structured Query Language)
4.1.1. LỊCH SỬ PHÁT TRIỂN
Được phát triển bởi IBM vào những năm 70 với tên gọi ban đầu là Squel dựa trên mô hình dữ liệu quan hệ của F.Codd.
Viện Tiêu chuẩn quốc gia Hoa Kỳ (ANSI) và Tổ chức tiêu chuẩn quốc tế (ISO) đã công bố các phiên bản chuẩn của SQL: SQL_86, SQL_89, SQL_92, SQL:1999, SQL:2003, SQL:2006, SQL:2008, SQL:2011
Các phần mềm hệ quản trị cơ sở dữ liệu khác nhau sẽ hỗ trợ ngôn ngữ SQL ở các mức độ khác nhau (có thể bổ sung thêm hoặc không hỗ trợ một số câu lệnh hay cú pháp)
4.1.2. CÁC THÀNH PHẦN CỦA NGÔN NGỮ SQL
NGÔN NGỮ ĐỊNH NGHĨA DỮ LIỆU
(DDL – Data Definition Language)
NGÔN NGỮ THAO TÁC DỮ LIỆU
(DML – Data Definition Language)
(Định nghĩa (xác lập) hoặc thay đổi cấu trúc tập tin của CSDL, các bảng dữ liệu, các liên kết,...)
(Cập nhật dữ liệu vào các bảng, truy vấn (đọc) dữ liệu từ các bảng,...)
9
4.1.3. MỘT SỐ QUY ƯỚC VỀ THUẬT NGỮ
Khi làm việc với SQL và các hệ quản trị cơ sở dữ liệu thông thường:
Dữ liệu được tổ chức dưới dạng cơ sở dữ liệu (database). Đó là một tập hợp gồm các bảng dữ liệu có liên quan.
Mỗi bảng dữ liệu (data table) là tập hợp các hàng (bản ghi) và cột. Đó chính là một quan hệ (relation) trong mô hình quan hệ.
Lưu ý: Một tập hợp các bản ghi là kết quả trả về của một câu lệnh truy vấn SELECT cũng được xem là một quan hệ.
Mỗi cột (column) của bảng là một thuộc tính (attribute) của quan hệ, mỗi bản ghi (record) của bảng là một bộ (tuple) của quan hệ.
Cấu trúc của bảng dữ liệu (danh sách các cột) được xác định (định nghĩa) bởi lược đồ quan hệ tương ứng.
10
4.1.4. CÁC KIỂU DỮ LIỆU TRONG SQL
4.2. NGÔN NGỮ ĐỊNH NGHĨA DỮ LIỆU
(DDL – Data Definition Language)
4.2.1. CÁC LỆNH ĐỐI VỚI CƠ SỞ DỮ LIỆU
A. Tạo cơ sở dữ liệu
CREATE DATABASE
Ví dụ 4.1:
CREATE DATABASE dbQuanLyBanHang
B. Xóa cơ sở dữ liệu
DROP DATABASE
Ví dụ 4.2:
DROP DATABASE dbQuanLyBanHang
Lưu ý: Các hệ quản trị CSDL khác nhau có thể đưa thêm vào một số tham số tùy biến khác.
13
4.2.2. CÁC LỆNH ĐỐI VỚI BẢNG DỮ LIỆU
A. Tạo bảng dữ liệu
CREATE TABLE
(
[
[
...
[CONSTRAINT
[CONSTRAINT
REFERENCES
)
B. Xóa bỏ bảng dữ liệu
DROP TABLE
C. Sửa đổi cấu trúc bảng dữ liệu
Thêm cột dữ liệu mới
ALTER TABLE
ADD
Xóa cột dữ liệu
ALTER TABLE
DROP COLUMN
Sửa kiểu dữ liệu của cột
ALTER TABLE
ALTER COLUMN
Thêm một ràng buộc đối với bảng
ALTER TABLE
ADD CONSTRAINT
Xóa một ràng buộc đối với bảng
ALTER TABLE
DROP CONSTRAINT
14
15
Ví dụ 4.3: Tạo các bảng dữ liệu sau đây:
PhongBan(MaPB, TenPB, DiaDiem)
NhanVien(MaNV, TenNV, ChuyenMon, Phong)
CREATE TABLE PhongBan
(
MaPB char(3) NOT NULL,
TenPB nvarchar(30) NOT NULL,
DiaDiem nvarchar(100),
CONSTRAINT PK_PhongBan PRIMARY KEY(MaPB)
)
CREATE TABLE NhanVien
(
MaNV char(5) NOT NULL,
TenNV nvarchar(30) NOT NULL,
ChuyenMon nvarchar(100),
Phong char(3) NOT NULL,
CONSTRAINT PK_NhanVien PRIMARY KEY(MaNV),
CONSTRAINT FK_NhanVien FOREIGN KEY (Phong) REFERENCES PhongBan(MaPB)
)
16
Ví dụ 4.4:
Thêm cột NgaySinh vào bảng NhanVien
ALTER TABLE NhanVien
ADD NgaySinh Date NOT NULL
Đổi kiểu dữ liệu của cột ChuyenMon trong bảng NhanVien từ kiểu nvarchar có độ dài 100 sang kiểu nvarchar có độ dài 150
ALTER TABLE NhanVien
ALTER COLUMN ChuyenMon nvarchar(150)
Xóa cột DiaDiem trong bảng PhongBan
ALTER TABLE PhongBan
DROP COLUMN DiaDiem
Xóa ràng buộc khóa ngoại FK_NhanVien trong bảng NhanVien
ALTER TABLE NhanVien
DROP CONSTRAINT FK_NhanVien
4.3. NGÔN NGỮ THAO TÁC DỮ LIỆU
(DML – Data Manipulation Language)
4.3.1. THÊM BẢN GHI VÀO BẢNG – CÂU LỆNH INSERT
INSERT INTO
Ví dụ 4.5:
INSERT INTO PhongBan VALUES(`PTV`, N`Phòng Tài vụ`, N`P203 - C3`)
Ví dụ 4.6:
INSERT INTO PhongBan(TenPB, MaPB) VALUES(N`Phòng Tài vụ`, `PTV`)
4.3.2. CẬP NHẬT DỮ LIỆU TRONG BẢNG – CÂU LỆNH UPDATE
UPDATE
SET
[WHERE <điều kiện>]
Ví dụ 4.7:
UPDATE PhongBan
SET TenPB = N`Phòng Kế hoạch – Tài chính`, DiaDiem = N`P302 - Nhà A6`
WHERE MaPB = `PTV`
18
4.3.3. XÓA DỮ LIỆU TRONG BẢNG – CÂU LỆNH DELETE
DELETE FROM
Ví dụ 4.8:
DELETE FROM NhanVien WHERE ChuyenMon = N`Kỹ sư tin học`
4.3.4. TRUY VẤN DỮ LIỆU TRONG BẢNG – CÂU LỆNH SELECT
SELECT [DISTINCT] [TOP N] *|
FROM
[WHERE <điều kiện>]
[GROUP BY
[ORDER BY
Mệnh đề FROM
Chỉ ra các bảng dữ liệu – nơi nguồn dữ liệu được lấy về. Các bảng có thể được kết nối (join) với nhau theo 1 cách thức nào đấy.
19
Mệnh đề WHERE <điều kiện>
Giới hạn các bản ghi được trả về trong tập kết quả. Chỉ các bản ghi thỏa mãn <điều kiện> được chỉ ra sau WHERE mới được trả về.
Mệnh đề GROUP BY
Chia tập bản ghi lấy về thành các nhóm sao cho:
Các bản ghi mà có giá trị giống nhau trên các cột trong
Các hàm thống kê (COUNT, SUM, MAX, MIN, AVG) có thể được áp dụng để tính toán trên từng nhóm.
Mỗi bản ghi trong tập kết quả chứa giá trị đại diện cho một nhóm.
Mệnh đề HAVING <điều kiện>
Đi kèm với GROUP BY để lọc ra các nhóm thỏa mãn <điều kiện> cho trước.
20
Mệnh đề ORDER BY
Sắp xếp các bản ghi kết quả theo trật tự tăng dần (ASC) hay giảm dần (DESC) của giá trị trên các cột được chỉ ra trong
Mệnh đề SELECT *|
Giới hạn các cột được phép hiển thị trong tập kết quả. Dùng ký hiệu dấu * sau SELECT nếu muốn hiển thị tất cả các cột của tập kết quả.
Từ khóa DISTINCT được sử dụng kèm khi muốn loại bỏ những bản ghi trùng lắp trong tập kết quả.
Từ khóa TOP được sử dụng khi chỉ muốn lấy về N bản ghi đầu tiên trong tập kết quả.
Có thể dung từ khóa AS để tạo tên khác (bí danh - alias) cho cột với cú pháp
21
4.4. CÁC DẠNG THỨC CỦA CÂU LÊNH
TRUY VẤN SELECT
4.4.1. LỌC CÁC BẢN GHI TRẢ VỀ VỚI MỆNH ĐỀ WHERE
SELECT *|
Lưu ý: <điều kiện> là biểu thức logic gồm các phép toán so sánh (<,>,>=,<=, <>, BETWEEN, LIKE) kết hợp với các phép toán logic (AND, OR, NOT)
Ví dụ 4.9: HocSinh(MaHS, TenHS, NamSinh, Lop, DiemThi)
Liệt kê các học sinh của lớp 10A5 có điểm trên 8 hoặc dưới 5
SELECT MaHS, TenHS, Diem FROM HocSinh
WHERE ((Diem >= 8) OR (Diem < 5)) AND (Lop = `10A5`)
Liệt kê toàn bản ghi thông tin về các học sinh của lớp 10A5 và 10A7 có điểm trong khoảng từ 7 đến 9
SELECT * FROM HocSinh
WHERE (Diem BETWEEN 7 AND 9) AND (Lop = `10A5` OR Lop = `10A7`)
22
Toán tử so sánh mờ LIKE:
Giúp so sánh xem chuỗi ký tự có khớp với một mẫu (pattern) cho trước hay không.
Mẫu so sánh thường chứa các ký tự đại diện (wildcard):
Ký tự "%": Đại diện cho một đoạn chuỗi ký tự bất kỳ.
Ký tự "_": Đại diện cho một ký tự bất kỳ.
Ví dụ 4.10: HocSinh(MaHS, TenHS, NamSinh, Lop, DiemThi)
Liệt kê tất cả các học sinh có họ "Nguyễn"
SELECT * FROM HocSinh WHERE TenHS LIKE N`Nguyễn%`
Liệt kê tất cả các học sinh có phần họ và đệm là "Nguyễn Văn" còn phần tên gồm 3 ký tự kết thúc bằng "n"
SELECT * FROM HocSinh WHERE TenHS LIKE N`Nguyễn Văn _ _n`
23
4.4.2. TRUY VẤN GỘP NHÓM VỚI MỆNH ĐỀ GROUP BY VÀ HAVING
SELECT *|
GROUP BY
Chia dữ liệu lấy về thành các nhóm (group) sao cho các bản ghi trong cùng nhóm thì sẽ có giá trị trên các cột dùng để gộp nhóm là giống nhau.
Mỗi bản ghi của kết quả sẽ mang các giá trị đại diện cho một nhóm. Đó có thể là một số các giá trị của cột gộp nhóm hoặc là kết quả khi áp dụng một hàm thống kê trên nhóm đó (các hàm thống kê thường được sử dụng kèm trong mệnh đề SELECT để thực hiện tính toán trên từng nhóm).
Mệnh đề HAVING giúp lọc ra các nhóm (group) thỏa mãn <điều kiện>
Lưu ý: Chỉ những cột có mặt trong mệnh đề GROUP BY hoặc các hàm thống kê (tức là những giá trị đại diện cho cả nhóm) mới được phép xuất hiện trong mệnh đề SELECT và HAVING.
24
CÁC HÀM THỐNG KÊ THƯỜNG DÙNG:
COUNT(*): Đếm số bản ghi có trong 1 nhóm.
COUNT(Ai): Đếm số giá trị tương ứng với cột Ai của các bản ghi trong nhóm.
SUM(Ai): Tính tổng các giá trị tương ứng với cột Ai của các bản ghi trong nhóm.
MAX(Ai): Tìm giá trị lớn nhất trong số các giá trị tương ứng với cột Ai của các bản ghi trong nhóm.
MIN(Ai): Tìm giá trị nhỏ nhất trong số các giá trị tương ứng với cột Ai của các bản ghi trong nhóm.
AVG(Ai): Tính giá trị trung bình của các giá trị tương ứng với cột Ai của các bản ghi trong nhóm.
25
Ví dụ 4.11: Cho bảng dữ liệu:
Inventory(ID, Value, Type)
Thống kê số lượng và tổng giá trị các đồ vật thuộc về mỗi loại
SELECT Type, COUNT(*), SUM(Value)
FROM Inventory GROUP BY Type
26
27
Ví dụ 4.12: HocSinh(MaHS, TenHS, NamSinh, Lop, DiemThi)
Liệt kê số lượng học sinh có trong từng lớp mà có điểm thi từ 5 điểm trở lên
SELECT Lop, COUNT(*) AS SoLuong FROM HocSinh
WHERE DiemThi >= 5.0 GROUP BY Lop
Liệt kê các lớp có số lượng học sinh trong bảng lớn hơn 30
SELECT Lop, COUNT(*) AS SoLuong FROM HocSinh
GROUP BY Lop HAVING COUNT(*) > 30
Thống kê điểm số cao nhất và thấp nhất mà học sinh trong mỗi lớp đạt được
SELECT Lop, MAX(DiemThi) AS CaoNhat, MIN(DiemThi) AS ThapNhat
FROM HocSinh GROUP BY Lop
Thống kê điểm thi bình quân của học sinh mỗi lớp
SELECT Lop, AVG(DiemThi) AS DiemBinhQuan FROM HocSinh
GROUP BY Lop
28
Ví dụ 4.13: MatHang(MaMH, TenMH, LoaiHang, SoLuong, DonGia)
Thống kê ứng với mỗi loại hàng có bao nhiêu mặt hàng
SELECT LoaiHang, COUNT(*) AS SL_MatHang FROM MatHang
GROUP BY LoaiHang
Thống kê các mặt hàng số lượng lớn hơn 10
SELECT MaMH, TenMH, SoLuong FROM MatHang
WHERE SoLuong >10
Thống kê các loại hàng có số lượng mặt hàng lớn hơn 3
SELECT LoaiHang, COUNT(*) AS SL_MatHang FROM MatHang
GROUP BY LoaiHang HAVING COUNT(*) > 3
Thống kê tổng số sản phẩm ứng với mỗi loại hàng (tính tổng số lượng sản phẩm của các mặt hàng thuộc về loại đó)
SELECT LoaiHang, SUM(SoLuong) AS TongSoSP FROM MatHang
GROUP BY LoaiHang
29
Thống kê giá trị (bằng tiền) ứng với mỗi mặt hàng (lưu ý: chỉ thống kê các mặt hàng có số lượng trên 10 chiếc). Biết Giá trị = Số lượng * Đơn giá
SELECT MaMH, TenMH, SoLuong * DonGia AS GiaTri
FROM MatHang WHERE SoLuong > 10
Thống kê giá trị bằng tiền ứng với mỗi loại hàng (tổng tiền các mặt hàng thuộc về loại hàng đó)
SELECT LoaiHang, SUM(SoLuong * DonGia) AS GiaTri
FROM MatHang GROUP BY LoaiHang
30
4.4.3. SẮP XẾP CÁC BẢN GHI KẾT QUẢ VỚI MỆNH ĐỀ ORDER BY
SELECT *|
[GROUP BY
ORDER BY
Ví dụ 4.14: HocSinh(MaHS, TenHS, NamSinh, Lop, DiemThi)
Liệt kê các học sinh theo thứ tự giảm dần của điểm thi
SELECT MaHS, Ten HS, DiemThi FROM HocSinh
ORDER BY DiemThi DESC
Liệt kê các học sinh theo thứ tự lớp tăng dần (10A1, 10A2, 10A3..., 11A1, 11A2, 11A3...)
SELECT * FROM HocSinh ORDER BY DiemThi
Liệt kê các học sinh theo thứ tự lớp tăng dần (10A1, 10A2,...), nếu các học sinh cùng lớp thì xếp giảm dần theo điểm
SELECT * FROM HocSinh ORDER BY Lop ASC, DiemThi DESC
31
4.4.4. TRUY VẤN DỮ LIỆU TỪ NHIỀU BẢNG
SELECT *|
[WHERE ... ] [GROUP BY ... ] [ORDER BY ...]
Các bảng dữ liệu sau FROM thường được kết nối với nhau nhờ các mệnh đề join
A. Mệnh đề INNER JOIN
INNER JOIN ON <điều kiện 1-2>
Trả về 01 tập các bản ghi. Mỗi bản ghi là kết quả của việc kết nối một bản ghi của với một bản ghi của nếu chúng thỏa mãn <điều kiện 1-2>
Có thể mở rộng ra cho kết nối nhiều bảng hơn
INNER JOIN ON <điều kiện 1-2>
INNER JOIN ON <điều kiện 1-2-3>...
INNER JOIN ON <điều kiện 1-2-..-n>
32
SELECT * FROM Lop INNER JOIN HocSinh ON Lop.MaLop = HocSinh.MaLop
Lop
HocSinh
Ví dụ 4.15
33
B. Các mệnh đề OUTER JOIN
LEFT OUTER JOIN
LEFT OUTER JOIN ON <điều kiện 1-2>
Trả về 01 tập các bản ghi gồm:
Các bản ghi là kết quả của việc kết nối các bản ghi của với các bản ghi của nếu chúng thỏa mãn <điều kiện 1-2> (chính là kết quả của INNER JOIN).
Các bản ghi còn lại của (mà không thể kết nối được với bản ghi nào của ) sau khi đã bổ sung thêm các giá trị NULL vào vị trí tương ứng với các cột của .
34
SELECT * FROM Lop LEFT OUTER JOIN HocSinh ON Lop.MaLop = HocSinh.MaLop
Lop
HocSinh
Ví dụ 4.16
35
B. Các mệnh đề OUTER JOIN
RIGHT OUTER JOIN
RIGHT OUTER JOIN ON <điều kiện 1-2>
Trả về 01 tập các bản ghi gồm:
Các bản ghi là kết quả của việc kết nối các bản ghi của với các bản ghi của nếu chúng thỏa mãn <điều kiện 1-2> (chính là kết quả của INNER JOIN).
Các bản ghi còn lại của (mà không thể kết nối được với bản ghi nào của ) sau khi đã bổ sung thêm các giá trị NULL vào vị trí tương ứng với các cột của .
36
SELECT * FROM Lop RIGHT OUTER JOIN HocSinh ON Lop.MaLop = HocSinh.MaLop
Lop
HocSinh
Ví dụ 4.16
HocSinh
37
B. Các mệnh đề OUTER JOIN
FULL OUTER JOIN
FULL OUTER JOIN ON <điều kiện 1-2>
Trả về 01 tập các bản ghi gồm:
Các bản ghi là kết quả của việc kết nối các bản ghi của với các bản ghi của nếu chúng thỏa mãn <điều kiện 1-2> (chính là kết quả của INNER JOIN).
Các bản ghi còn lại của (mà không thể kết nối được với bản ghi nào của ) sau khi đã bổ sung thêm các giá trị NULL vào vị trí tương ứng với các cột của .
Các bản ghi còn lại của (mà không thể kết nối được với bản ghi nào của ) sau khi đã bổ sung thêm các giá trị NULL vào vị trí tương ứng với các cột của .
38
SELECT * FROM Lop FULL OUTER JOIN HocSinh ON Lop.MaLop = HocSinh.MaLop
Lop
HocSinh
Ví dụ 4.16
HocSinh
39
C. Mệnh đề CROSS JOIN
CROSS JOIN
Trả về 01 tập các bản ghi là kết quả của việc kết nối lần lượt mỗi bản ghi của với từng bản ghi của (tương tự như phép tích Đề Các).
Có thể mở rộng ra cho kết nối nhiều bảng hơn hoặc phối hợp với các dạng JOIN khác.
CROSS JOIN ... CROSS JOIN
40
SELECT * FROM Lop CROSS JOIN HocSinh
Ví dụ 4.17
41
4.5. CÂU LỆNH SELECT VÀ ĐẠI SỐ QUAN HỆ
4.5.1. CÁCH THỨC THỰC THI CÂU LỆNH TRUY VẤN SELECT
Mệnh đề FROM được thực thi đầu tiên. Dữ liệu được đọc ra từ các bảng và các bản ghi được kết nối (join) với nhau (nếu cần) để tạo ra một tập bản ghi trung gian.
Mệnh đề WHERE (nếu có) được thực hiện ngay sau đó để loại bỏ các bản ghi không thỏa mãn điều kiện trong tập bản ghi trung gian.
42
Mệnh đề GROUP BY (nếu có) được thực hiện tiếp theo để chia các bản ghi thành các nhóm sao cho các bản ghi trong cùng nhóm thì có giá trị trên các thuộc tính gộp nhóm là giống nhau. Tập bản ghi kết quả của câu lệnh truy vấn lúc này sẽ gồm các bản ghi mà mỗi bản ghi chứa giá trị đại diện cho 1 nhóm.
Mệnh đề HAVING (nếu có) được thực hiện ngay sau đó để loại bỏ bớt đi những nhóm không thỏa mãn điều kiện.
Mệnh đề ORDER BY (nếu có) được thực hiện kế tiếp để sắp xếp tập bản ghi kết quả theo trật tự tăng dần hay giảm dần của giá trị trong các cột được chỉ định.
Mệnh đề SELECT được thực thi sau cùng. Chỉ những cột được chỉ ra sau SELECT mới xuất hiện trong tập kết quả.
43
44
Lưu ý: Cú pháp câu lệnh truy vấn SELECT được xây dựng trên nền tảng mở rộng của đại số quan hệ, do đó có những thành phần của câu lệnh truy vấn không thể biểu diễn được trong đại số quan hệ.
Mọi biểu thức của đại số quan hệ đều có thể biểu diễn tương đương bằng một câu lệnh truy vấn SELECT.
Tuy nhiên, chỉ những câu lệnh truy vấn SELECT với các thành phần cơ bản mới biểu diễn được dưới dạng một biểu thức đại số quan hệ.
45
Ví dụ 4.18
Liệt kê danh sách các học sinh đang học ở phòng P302 có điểm thi trên 8. Thông tin hiển thị bao gồm MaHS, TenHS, Lop, DiemThi:
46
Liệt kê danh sách các học sinh thuộc lớp 10A3 có điểm thi trên 8. Thông tin hiển thị bao gồm MaHS, TenHS:
SELECT MaHS, TenHS FROM HocSinh WHERE Lop = `10A3` AND DiemThi > 8
SELECT MaHS, TenHS, Lop, DiemThi
FROM LopHoc INNER JOIN HocSinh ON TenLop = Lop
WHERE PhongHoc = `P302` AND DiemThi > 8
47
Liệt kê danh sách các học sinh được chủ nhiệm bởi “Thầy Hùng”. Thông tin hiển thị bao gồm MaHS, TenHS:
Thống kê số học sinh mỗi lớp. Thông tin hiển thị bao gồm Lớp và số lượng học sinh:
SELECT MaHS, TenHS
FROM LopHoc INNER JOIN HocSinh ON TenLop = Lop
WHERE GVCN = N`Thầy Hùng`
SELECT Lop, COUNT(*) FROM HocSinh GROUP BY Lop
Q & A
48
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Nguyễn Vương Thịnh
Dung lượng: |
Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)