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