Bài giảng Cơ sở dữ liệu - Chương 3 giới thiệu về ngôn ngữ truy vấn SQL. Chương này trình bày các nội dung chính như sau: Giới thiệu SQL, môi trường SQL, dùng DDL để định nghĩa CSDL, dùng DML để thao tác trên CSDL, các phép kết dữ liệu trên nhiều bảng, Subquery – truy vấn con. Mời các bạn cùng tham khảo.
Trang 1Môn CƠ SỞ DỮ LIỆU
Chương 3: Ngôn ngữ
truy vấn SQL
Trang 3 Structured Query Language – Ngôn ngữ truy vấn có cấu trúc
Ngôn ngữ chuẩn cho các RDBMS (relational database management systems - hệ quản trị CSDL quan hệ)
Chuẩn SQL-92:
◆ Định nghĩa cấu trúc/ngữ nghĩa của việc định
nghĩa/thao tác trên dữ liệu
◆ Định nghĩa cấu trúc dữ liệu
◆ Hai chuẩn: level 1 (minimal) và level 2
(complete)
◆ Khả năng mở rộng
1 SQL là gì?
Trang 4 Data Definition Language
thao tác truy vấn dữ liệu
(DCL): Các lệnh điều khiển CSDL,
gồm việc quản lý quyền hạn của user
2 Môi trường SQL
Trang 5 Data Definition Language (DDL)
Lệnh tạo bảng: CREATE TABLE
Lệnh sửa bảng: ALTER TABLE
Lệnh xóa bảng: DROP TABLE
3 Dùng DDL để định nghĩa CSDL
Trang 6Cú pháp lệnh CREATE TABLE Các bước tạo bảng:
1 Kiểu dữ liệu cho các
Trang 8 Thêm dữ liệu (bản ghi, hàng) vào bảng
CUSTOMER_T VALUES (001, ‘CONTEMPORARY
Casuals’, 1355 S Himes Blvd.’, ‘Gainesville’, ‘FL’, 32601);
Thêm dữ liệu vào các cột được chỉ định rõ trong bảng, các cột còn lại nhận giá trị mặc định hoặc NULL: INSERT INTO
PRODUCT_T (PRODUCT_ID,
PRODUCT_DESCRIPTION,PRODUCT_FINISH,
STANDARD_PRICE, PRODUCT_ON_HAND) VALUES (1, ‘End
Table’, ‘Cherry’, 175, 8);
SELECT * FROM CUSTOMER_T WHERE STATE = ‘CA’;
4 DML - Lệnh INSERT
Trang 94 DML - Lệnh DELETE - Lệnh
UPDATE
Lệnh Delete: Xoá dữ liệu (bản ghi, hàng) trong bảng
Xoá các hàng theo điều kiện: DELETE FROM CUSTOMER_T WHERE STATE =
‘HI’;
Xoá tất cả các hàng trong bảng: DELETE FROM CUSTOMER_T;
Lệnh Update: Sửa dữ liệu (bản ghi, hàng) trong bảng: UPDATE
PRODUCT_T SET UNIT_PRICE = 775 WHERE
PRODUCT_ID = 7;
Trang 10 Truy vấn (xem) dữ liệu trong các bảng, view
Các mệnh đề của lệnh SELECT:
SELECT: Danh sách các cột kết quả của lệnh truy vấn
FROM: Danh sách các bảng hoặc view để lấy dữ liệu
WHERE: Điều kiện lựa chọn các hàng trong bảng
GROUP BY: Nhóm các hàng dữ liệu theo loại
HAVING: Điều kiện cho các nhóm để lựa chọn nhóm kết quả
ORDER BY: Sắp xếp dữ liệu thu được
4 DML - Lệnh SELECT
Trang 11Thứ tự xử lý các mệnh đề
trong lệnh SELECT
Trang 134 DML - Lệnh SELECT dùng ALIAS, hàm
Alias là tên thay thế cho bảng hoặc cột, khi đó cột kết quả lấy tên alias: SELECT
CUST.CUSTOMER AS NAME, CUST.CUSTOMER_ADDRESS
FROM CUSTOMER_V CUST
WHERE NAME = ‘Nguyen Van A’;
Dùng hàm tập hợp COUNT để tìm tổng số các hoá đơn có trong bảng hoá đơn
SELECT COUNT(*) FROM ORDER_LINE_V
WHERE ORDER_ID = 1004
Trang 14 Các toán tử AND , OR và NOT dùng trong mệnh đề WHERE
SELECT PRODUCT_DESCRIPTION,
PRODUCT_FINISH, STANDARD_PRICE
FROM PRODUCT_V
LIKE dùng để so sánh chuỗi Dấu % trong chuỗi
‘%Desk’ chỉ mọi chuỗi kết thúc bằng “Desk”
4.(tt)Lệnh SELECT dùng toán tử luận lý
Trang 15 Sắp xếp kết quả theo thứ tự STATE tăng dần, cùng state thì sắp theo CUSTOMER_NAME tăng dần Dùng từ khóa ASC, DESC
SELECT CUSTOMER_NAME, CITY, STATE
FROM CUSTOMER_V
ORDER BY STATE, CUSTOMER_NAME;
IN lựa chọn các hàng có giá trị STATE là FL, TX,
CA, hoặc HI Tốt hơn OR
4 (tt) Lệnh SELECT dùng ORDER BY
Trang 16Muốn dùng cột đơn trị với hàm tập hợp thì phải đưa cột này vào mệnh đề GROUP BY
Trang 17 Chỉ dùng với GROUP BY, làm điều kiện lựa chọn các nhóm hàng
SELECT STATE, COUNT(STATE)
Trang 18 Cho biết mọi thông tin cần thiết để xuất hoá đơn có số 1006
SELECT CUSTOMER_T.CUSTOMER_ID, CUSTOMER_NAME, CUSTOMER_ADDRESS, CITY, SATE, POSTAL_CODE, ORDER_T.ORDER_ID, ORDER_DATE, QUANTITY, PRODUCT_NAME, UNIT_PRICE, (QUANTITY * UNIT_PRICE)
FROM CUSTOMER_T, ORDER_T, ORDER_LINE_T, PRODUCT_T
WHERE CUSTOMER_T.CUSTOMER_ID = ORDER_LINE.CUSTOMER_ID AND
Trang 19 Hai loại subquery:
◆ Non correlated – chỉ thực thi một lần, không phụ thuộc vào dữ liệu từ câu truy vấn ngoài
◆ Correlated – thực thi đối với mỗi hàng trả về từ câu truy vấn ngoài, có thể dùng với toán tử EXISTS
6 Subquery – Truy vấn con
Trang 20 Cho biết các khách hàng nào có hoá đơn
SELECT CUSTOMER_NAME FROM CUSTOMER_T
WHERE CUSTOMER_ID IN
(SELECT DISTINCT CUSTOMER_ID FROM ORDER_T);
Subquery nằm trong dấu ngoặc đơn, kết quả từ subquery được dùng trong mệnh đề WHERE
6 Subquery – Ví dụ
IN kiểm tra giá trị CUSTOMER_ID của một hàng có nằm trong danh sách kết quả của subquery
Trang 21Quá trình
xử lý một
correlated
được thực thi chỉ một lần
Trang 22 Cho biết các hoá đơn có sản phẩm được hoàn tất trong natural ash
SELECT DISTINCT ORDER_ID FROM ORDER_LINE_T
WHERE EXISTS
(SELECT * FROM PRODUCT_T
WHERE PRODUCT_ID = ORDER_LINE_T.PRODUCT_ID
AND PRODUCT_FINISH = ‘Natural ash’);
Subquery kiểm tra các giá trị có
từ câu truy vấn ngoài
EXISTS cho giá trị TRUE nếu kết quả của subquery khác rỗng, ngoài ra là FALSE
6 (tt) Thí dụ correlated subquery
Trang 23Subquery thực thi đối với mỗi hàng
dữ liệu từ câu truy vấn ngoài
Trang 24 Cho biết các sản phẩm có giá cao hơn giá trung bình
SELECT PRODUCT_DESCRIPTION, STANDARD_PRICE, AVGPRICE
FROM
(SELECT AVG(STANDARD_PRICE) AVGPRICE FROM PRODUCT_T),
PRODUCT_T
WHERE STANDARD_PRICE > AVG_PRICE;
Mệnh đề WHERE không thể chứa các hàm tập hợp,
Cột subquery là một hàm tập hợp có tên alias, tên này được dùng trong câu truy vấn ngoài
Subquery tạo nên