You are on page 1of 72

2022.

BÁO CÁO
CUỐI KỲ
CƠ SỞ DỮ LIỆU

Giảng viên hướng dẫn: ThS. Nguyễn Danh Tú


Sinh viên thực hiện: Nguyễn Thế Phong
MSSV: 20216868
Lớp: Toán Tin 02 K66

Phong.NT216868@sis.hust.edu.vn
Database

Mục lục

1 Lời nói đầu 3

2 Thiết lập môi trường làm việc MySQL 4


2.1 Thiết lập hệ quản trị cơ sở dữ liệu trên máy tính cá nhân . . . . . . . . . . 4
2.2 Thiết lập môi trường làm việc với cơ sở dữ liệu từ máy chủ đơn vị . . . . . 5
2.3 Tạo được cơ sở dữ liệu mẫu để làm việc . . . . . . . . . . . . . . . . . . . . 5

3 Viết câu lệnh đại số quan hệ 7

4 Thực hành truy vấn SQL 8


4.1 SELECT, ORDER BY, WHERE, SELECT DISTINCT . . . . . . . . . . . 8
4.2 AND, OR, IN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.3 BETWEEN, LIKE, LIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.4 IS NULL, Table Column Aliases . . . . . . . . . . . . . . . . . . . . . . . 11
4.5 JOINS, INNER JOIN, LEFT JOIN, RIGHT JOIN, SELF JOIN, CROSS
JOIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.6 GROUP BY, HAVING, ROLL UP . . . . . . . . . . . . . . . . . . . . . . 15
4.7 Subquery, Devired Tables, Exists . . . . . . . . . . . . . . . . . . . . . . . 16
4.8 UNION, MINUS, INTERSECT . . . . . . . . . . . . . . . . . . . . . . . . 18

5 Tìm hiểu cấu trúc một cơ sở dữ liệu 20


5.1 Xây dựng lược đồ Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.2 Truy vấn các bảng hệ thống trong CSDL . . . . . . . . . . . . . . . . . . . 21
5.2.1 Tên các bảng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.2.2 Tên các cột và tính chất của cột trong một bảng . . . . . . . . . . . 21

6 MySQL Data Definition 22


6.1 Thiết lập bảng dữ liệu (PK, UK, DataType, Null, Constraint) . . . . . . . 22
6.2 Thiết lập quan hệ dữ liệu (Relationship) . . . . . . . . . . . . . . . . . . . 22
6.3 Thiết lập khung nhìn (Views) . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.4 Thiết lập thủ tục và hàm (procedure và function) . . . . . . . . . . . . . . 24

7 MySQL Data Manipulation 25


7.1 Thực hiện các câu lệnh cập nhật (insert, update, delete dữ liệu) . . . . . . 25
7.2 Cập nhật dữ liệu từ 1 bảng Excel qua sinh tự động SQL Script . . . . . . . 27
7.3 Cập nhật dữ liệu từ một bảng khác . . . . . . . . . . . . . . . . . . . . . . 28
7.4 Cập nhật dữ liệu qua một procedure . . . . . . . . . . . . . . . . . . . . . 28
7.5 Tự động sinh ra các procedure cập nhật dữ liệu . . . . . . . . . . . . . . . 29

8 Sử dụng hàm trong truy vấn và đánh chỉ mục dữ liệu 29


8.1 Aggregate Functions, Math Functions, Comparison Functions . . . . . . . . 29
8.2 Control Flow Functions and Expressions . . . . . . . . . . . . . . . . . . . 34
8.3 Window Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
8.4 Date Functions, String Functions . . . . . . . . . . . . . . . . . . . . . . . 37
8.5 Đánh chỉ mục dữ liệu một bảng . . . . . . . . . . . . . . . . . . . . . . . . 39
1
Nguyễn Thế Phong - 20216868
Database

8.6 So sánh trước và sau khi đánh chỉ mục . . . . . . . . . . . . . . . . . . . . 39

9 Thực hành thiết kế CSDL và các câu lệnh SQL 41


9.1 Thực hành thiết kế CSDL lưu trữ đơn hàng . . . . . . . . . . . . . . . . . 41
9.1.1 Xây dựng lược đồ R-E (chụp ảnh viết tay) . . . . . . . . . . . . . . 41
9.1.2 Xây dựng lược đồ E-R(chụp ảnh viết tay) . . . . . . . . . . . . . . 41
9.1.3 Thiết kế trên hệ quản trị CSDL . . . . . . . . . . . . . . . . . . . . 41
9.1.4 In diagram cơ sở dữ liệu (chụp từ phần mềm) . . . . . . . . . . . . 42
9.2 Thực hành câu lệnh SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
9.2.1 Viết câu lệnh thêm dữ liệu vào bảng . . . . . . . . . . . . . . . . . 43
9.2.2 Viết câu lệnh truy vấn . . . . . . . . . . . . . . . . . . . . . . . . . 43
9.2.3 Thay đổi cấu trúc CSDL . . . . . . . . . . . . . . . . . . . . . . . . 50

10 Chuẩn hóa 52

11 Truy vấn dữ liệu trên cơ sở dữ liệu OLTP 59

12 Xây dựng dashboard và PTDL từ CSDL OLTP 68

13 Kết luận 70

14 Tài liệu tham khảo 71

2
Nguyễn Thế Phong - 20216868
Database

1 Lời nói đầu

Bộ môn Cơ sở dữ liệu là một trong những môn học cơ sở ngành của ngành Toán Tin.
Nói đến cơ sở dữ liệu là ta phải nhắc ngay đến dữ liệu, việc quản trị và xử lý dữ liệu. Dữ
liệu ngày nay cực kì lớn, chúng thường xuyên được cập nhật và làm mới hàng ngày, vì
vậy chúng ta cần phải quản lý và sử dụng được khối lượng dữ liệu lớn đó một cách thông
minh, an toàn, dữ liệu đồng bộ, lọc và tìm kiếm thông tin hiệu quả. Chúng ta cần phải
tạo những liên kết, quan hệ giữa các dữ liệu rời rạc để khi nào cần có thể dễ dàng tìm
kiếm và sử dụng chúng. Khi học môn cơ sở dữ liệu, chúng ta sẽ được trang bị những kiến
thức cần thiết để có thể thiết lập được một tập các dữ liệu có tổ chức, lưu trữ trên hệ
thống máy tính và cách sử dụng chúng sao cho hiệu quả nhanh chóng. Và cơ sở dữ liệu
thì được chia làm 2 dạng là cơ sở dữ liệu quan hệ và phi quan hệ, cả 2 dạng cơ sở dữ liệu
này đều có những ưu và nhược điểm riêng nên khi sử dụng chúng ta nên cân nhắc xem
mục đích sử dụng của mình là gì để lựa chọn sử dụng sao cho phù hợp nhất.
Bất kì môn học nào thì cũng đều cần phải có sự kết hợp giữa lý thuyết và thực hành.
Việc học lý thuyết giúp chúng ta nắm được những kiến thức cơ bản và hiểu rõ bản chất
của kiến thức; thực hành giúp chúng ta vận dụng kiến thức học được vào những bài tập
cụ thể, giúp chúng ta nhớ kiến thức lâu hơn. Và qua quá trình học tập và thực hành môn
cơ sở dữ liệu, em đã làm bài tiểu luận này để tổng hợp lại nội dung các bài thực hành
qua từng tuần mà em đã làm được. Quá trình 9 tuần thực hành đã giúp em hiểu rõ được
cơ bản cách sử dụng cơ sở dữ liệu và cách viết các mã lệnh trên hệ quản trị cơ sở dữ liệu
MySQL.
Nội dung bài tiểu luận thể hiện input, output, mã nguồn, thuật toán (nếu có) của từng
bài thực hành. Tuy bài tiểu luận đã được em chuẩn bị và trình bày rất cẩn thận nhưng
cũng không tránh khỏi những thiếu sót, rất mong được các bạn và thầy đóng góp ý kiến
để bài tiểu luận được hoàn thiện hơn.
Em xin cảm ơn thầy Nguyễn Danh Tú đã rất tận tình giảng dạy và hướng dẫn em
trong quá trình học tập và thực hành hàng tuần môn cơ sở dữ liệu này. Bài báo cáo không
tránh khỏi những sai sót mong thầy góp ý để em có thể hoàn thiện hơn.

3
Nguyễn Thế Phong - 20216868
Database

2 Thiết lập môi trường làm việc MySQL

2.1 Thiết lập hệ quản trị cơ sở dữ liệu trên máy tính cá nhân
Cơ sở dữ liệu (Database) là một tập hợp các dữ liệu có tổ chức, thường được lưu trữ
và truy cập điện tử từ hệ thống máy tính. Khi cơ sở dữ liệu phức tạp hơn, chúng thường
được phát triển bằng cách sử dụng các kỹ thuật thiết kế và mô hình hóa chính thức.
Hệ quản trị cơ sở dữ liệu (Database Management System) là phần mềm cho phép
người sử dụng tạo lập và duy trì CSDL một cách thuận lợi và hiệu quả. DBMS cho phép
người dùng định nghĩa CSDL (DDL), cho phép người dùng cập nhật, tìm kiếm dữ liệu
(DML), cung cấp các kiểm soát, truy nhập điều khiển, bảo mật dữ liệu, toàn vẹn dữ liệu
(Integrity), điều khiển tương tranh, phục hồi dữ liệu (Recovery), và từ điển dữ liệu cho
phép người dùng truy nhập.
Hệ quản trị được thiết lập: MySQL Workbench

4
Nguyễn Thế Phong - 20216868
Database

2.2 Thiết lập môi trường làm việc với cơ sở dữ liệu từ máy chủ
đơn vị
MySQL Workbench là một chương trình giúp cho người lập trình có thể giao tiếp
với hệ cơ sở dữ liệu MySQL thay vì phải sử dụng các lệnh Command-line phức tạp và
mất thời gian.
MySQL Workbench tương thích với nhiều hạ tầng máy tính quan trọng như Linux,
macOS, Microsoft Windows, và Ubuntu.

2.3 Tạo được cơ sở dữ liệu mẫu để làm việc


• Qua copy and paste
Copy toàn bộ mã nguồn một CSDL mẫu vào MySQL Workbench để chạy
Giao diện kết quả:

• Qua Export, Import dữ liệu


Import và Export là cách chúng ta đưa và xuất dữ liệu vào CSDL. Đây là cách
5
Nguyễn Thế Phong - 20216868
Database

nhanh và thuận tiện vì chúng ta có thể lưu dữ liệu với dạng file.sql và nó tương
thích với hệ quản trị CSDL MySQL

Tạo CSDL qua Export

Tạo CSDL qua Import

6
Nguyễn Thế Phong - 20216868
Database

3 Viết câu lệnh đại số quan hệ

7
Nguyễn Thế Phong - 20216868
Database

4 Thực hành truy vấn SQL

Input: Cơ sở dữ liệu mẫu classicmodels

4.1 SELECT, ORDER BY, WHERE, SELECT DISTINCT


• SELECT: Hiển thị thông tin được yêu cầu trong một bảng, truy xuất các hàng và
các cột từ một hoặc nhiều bảng. Đầu ra của câu lệnh SELECT là một bảng khác
được gọi là tập kết quả (Result Set)
Cú pháp: SELECT <columnName1>...<columnNameN> FROM <tableName>

• ORDER BY: sắp xếp tập kết quả theo một trật tự: tăng dần ASC hoặc giảm dần
DESC

• WHERE: tập kết quả khi truy vấn phải thỏa mãn điều kiện được đặt trong lệnh
WHERE

• SELECT DISTINCT: ngăn chặn sự truy xuất của các bản ghi trùng lặp và loại
trừ các hàng trùng nhau trong một tập kết quả

Thực hành câu lệnh:


INPUT: cơ sở dữ liệu classicmodels, bảng customers.
OUTPUT: Lấy ra các cột city, country, phone từ bảng customers có:

• Giá trị state = “NY”

• Sắp xếp theo thứ tự giảm dần cột phone.

Mã nguồn và giao diện kết quả:

4.2 AND, OR, IN


Sử dụng các toán tử logic như toán tử AND, OR, IN để kiểm tra điều kiện nào đó,
thường dùng trong mệnh đề WHERE
8
Nguyễn Thế Phong - 20216868
Database

Thực hành câu lệnh:


INPUT: cơ sở dữ liệu classicmodels, bảng employees
OUTPUT: Lấy ra các hàng sao cho firstName = “Leslie” hoặc firstName = “Tom” và
reportsTo là một trong (“1102”, “1088”, “1143”), sắp xếp theo chiều tăng của reportsTo.

Mã nguồn và giao diện kết quả:

4.3 BETWEEN, LIKE, LIMIT


• BETWEEN: Toán tử để kiểm tra giá trị có thuộc khoảng cho trước hay không
hoặc dùng để lọc kết quả theo điều kiện khi kết hợp với mệnh đề WHERE, trong
lệnh SELECT, INSERT, UPDATE hoặc DELETE.
Output: productCode, productName, buyPrice có buyPrice nằm trong khoảng (90,
100) từ bảng products

• LIKE: trong SQL Server (Transact-SQL) cho phép dùng wildcard (các kí hiệu đại
diện) trong mệnh đề WHERE ở các lệnh SELECT, INSERT, UPDATE và DELETE,
dùng để đối sánh mẫu.
9
Nguyễn Thế Phong - 20216868
Database

Output: employeeNumber, lastName, firstName có firstName có a ở đầu từ bảng


employees

• LIMIT Để giới hạn kết quả trả về, lấy một số dòng đầu tiên hoặc tập hợp nhỏ liên
tục của kết quả trong SQL
Output: lấy ra 10 dòng đầu tiền từ bảng customers với các thuộc tính được lấy là
customersNumber, customerName được sắp xếp theo customerName

10
Nguyễn Thế Phong - 20216868
Database

4.4 IS NULL, Table Column Aliases

• IS NULL: dùng để kiểm tra một giá trị là NULL hay không
Output: customersNumber, contactFirstName, contactLastName, creditLimit,
salesRepEmployeeNumber có salesRepEmployeeNumber là giá trị NULL từ bảng
customers

• Table Column Aliases: cách gán cho bảng hoặc cột bất kỳ bằng cách sử dụng 1 tên
khác thuận tiện cho việc hiểu và truy vấn bằng cách sử dụng từ khóa AS
1. Column Aliases

2. Table Aliases
11
Nguyễn Thế Phong - 20216868
Database

12
Nguyễn Thế Phong - 20216868
Database

4.5 JOINS, INNER JOIN, LEFT JOIN, RIGHT JOIN, SELF


JOIN, CROSS JOIN
Mô hình CSDL quan hệ gồm nhiều bảng có liên kết với nhau qua khóa ngoại. Vì vậy
để truy vấn dữ liệu từ nhiều bảng khác nhau, ta dùng Join để làm điều đó. MySQL hỗ
trợ 4 kiểu joins:

• INNER JOIN: tương tự như kết quả ta nhận được khi thực hiện phép giao giữa hai
tập hợp

• LEFT JOIN: tương tự như kết quả ta nhận được khi thực hiện phép trừ giữa 2 tập
hợp A \ B

13
Nguyễn Thế Phong - 20216868
Database

• RIGHT JOIN: tương tự như kết quả ta nhận được khi thực hiện phép trừ giữa hai
tập hợp B \ A

• CROSS JOIN sẽ cho ra kết quả chứa tất cả các hàng ở cả 2 bảng. Nếu 2 bảng lần
lượt có n và m hàng thì tập kết quả sẽ có n.m hàng

14
Nguyễn Thế Phong - 20216868
Database

4.6 GROUP BY, HAVING, ROLL UP

• GROUP BY: nhóm các hàng bởi giá trị của các hàng thành các nhóm. Mệnh đề
GROUP BY trả về 1 hàng duy nhất cho mỗi nhóm

• HAVING: dùng để lọc kết quả của các nhóm trả về từ mệnh đề GROUP BY

• ROLL UP: thường được sử dụng để tạo ra tổng phụ (subtotals) và tổng số (totals)
cho mục đích báo cáo. Mệnh đề ROLL UP thường được sử dụng để tính toán tổng
hợp của dữ liệu phân cấp như bán hàng theo năm > quý > tháng
15
Nguyễn Thế Phong - 20216868
Database

4.7 Subquery, Devired Tables, Exists


• Subquery: là câu truy vấn con lồng trong các câu truy vấn khác được dùng trong
các câu truy vấn phức tạp

16
Nguyễn Thế Phong - 20216868
Database

• Devired Table: là một bảng ảo trả về kết quả từ câu lệnh SELECT, thường dùng
trong các câu lệnh truy vấn phức tạp. Devired Table và Subquery có thể thay thế
nhau khi sử dụng

• Exists: là toán tử dùng để kiểm tra sự tồn tại của hàng trả về bởi Subquery

17
Nguyễn Thế Phong - 20216868
Database

4.8 UNION, MINUS, INTERSECT


• UNION: toán tử dùng để gộp 2 hoặc nhiều tập kết quả thành 1 tập kết quả

• MINUS: so sánh kết quả 2 câu lệnh truy vấn và trả về hàng có trong câu truy vấn
thứ nhất nhưng không có trong câu thứ hai

18
Nguyễn Thế Phong - 20216868
Database

• INTERSECT trả về hàng xuất hiện trong cả 2 câu truy vấn hoặc nhiều hơn

19
Nguyễn Thế Phong - 20216868
Database

5 Tìm hiểu cấu trúc một cơ sở dữ liệu

5.1 Xây dựng lược đồ Diagram


• Sử dụng công cụ vẽ lược đồ: sử dụng công cụ vẽ diagram của MySQL Workbench

• Đọc và phân tích lược đồ Cơ sở dữ liệu gồm các bảng:

– Customers: lưu trữ dữ liệu về thông tin khách hàng


– Employees: lưu trữ dữ liệu về thông tin nhân viên
– Products: lưu trữ dữ liệu về thông tin sản phẩm
– Productlines: lưu trữ dữ liệu về các dòng sản phảm
– Orderdetails: lưu trữ dữ liệu chi tiết về các đơn đặt hàng
– Orders: lưu trữ dữ liệu về các đơn đặt hàng
– Payments: lưu trữ dữ liệu về thông tin thanh toán của khách hàng
– Offices: lưu trữ dữ liệu về thông tin trong văn phòng của công ty

Mỗi bảng là một thực thể, mỗi cột trong bảng là thuộc tính của thực thể đó
Quan hệ giữa các bảng:

– Mỗi dòng sản phẩm có nhiều sản phẩm. Liên kết "productlines - products" là
liên kết 1-N
– Mỗi sản phẩm có nhiều chi tiết về các đơn đặt hàng. Liên kết "products -
orderdetails" là liên kết 1-N
– Mỗi đơn đặt hàng có nhiều chi tiết về các đơn đặt hàng. Liên kết "orders -
orderdetails" là liên kết 1-N
– Mỗi khách hàng có nhiều đơn đặt hàng. Liên kết "customers - payments" là
liên kết 1-N
20
Nguyễn Thế Phong - 20216868
Database

– Mỗi khách hàng có nhiều khoản thanh toán. Liên kết "customers - payments"
là liên kết 1-N

– Mỗi nhân viên quản lý nhiều thông tin khách hàng. Liên kết "employees -
customers" là liên kết 1-N

– Mỗi nhân viên cấp trên quản lí nhiều nhân viên cấp dưới. Thực thể employees
liên kết với chính nó bằng liên kết 1-N

– Mỗi văn phòng quản lí nhiều nhân viên. Liên kết "offices - employees" là liên
kết 1-N

5.2 Truy vấn các bảng hệ thống trong CSDL

5.2.1 Tên các bảng

Câu lệnh SHOW TABLES trả về kết quả là tên của các bảng có trong CSDL hiện
đang sử dụng

5.2.2 Tên các cột và tính chất của cột trong một bảng

Câu lệnh SHOW COLUMN FROM table_name trả về tên các cột của bảng và tính
chất các cột đó
21
Nguyễn Thế Phong - 20216868
Database

6 MySQL Data Definition

6.1 Thiết lập bảng dữ liệu (PK, UK, DataType, Null, Constraint)
Tạo các bảng trong CSDL cần chú ý đến kiểu dữ liệu của mỗi cột, các ràng buộc, khóa
chính (Primary Key), khóa ngoại (Foreign Key),...

6.2 Thiết lập quan hệ dữ liệu (Relationship)


Thiết lập quan hệ dữ liệu giữa các bảng bằng khóa ngoại (Foreign key) và các ràng
buộc khi sửa hoặc xóa ở 1 bảng này sẽ ảnh hưởng đến bảng mà có quan hệ dữ liệu với
22
Nguyễn Thế Phong - 20216868
Database

bảng đó

6.3 Thiết lập khung nhìn (Views)


Trong SQL, một khung nhìn View 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 câu lệnh SQL nào đó. Một view bao gồm các hàng và cột giống
như một bảng thực. Các trường trong một khung nhìn là các trường từ một hoặc nhiều
bảng thực trong Database.
Thiết lập khung nhìn (Views) từ 1 bảng

23
Nguyễn Thế Phong - 20216868
Database

Thiết lập khung nhìn (Views) từ một bảng có điều kiện

Thiết lập khung nhìn (Views) từ 2 bảng có điều kiện

6.4 Thiết lập thủ tục và hàm (procedure và function)

• Procedure (thủ tục) là một chương trình trong cơ sở dữ liệu gồm nhiều câu lệnh mà
ta lưu lại cho những lần sử dụng sau
24
Nguyễn Thế Phong - 20216868
Database

• Function (Hàm) là một đối tượng trong cơ sở dữ liệu bao gồm một tập nhiều câu
lệnh được nhóm lại với nhau và được tạo ra với mục đích sử dụng lại.

7 MySQL Data Manipulation

7.1 Thực hiện các câu lệnh cập nhật (insert, update, delete dữ
liệu)
• Câu lệnh INSERT INTO trong SQL dùng để thêm một hàng dữ liệu mới vào bảng
trong cơ sở dữ liệu
25
Nguyễn Thế Phong - 20216868
Database

• Khi thao tác với CSDL, chúng ta sẽ cần đến thao tác sửa dữ liệu đã có. Câu lệnh
UPDATE dùng để chỉnh sửa những bản ghi đã tồn tại trong bảng. Ta có thể sử
dụng mệnh đề WHERE với lệnh UPDATE để cập nhật các hàng được chọn, nếu
không muốn tất cả các hàng trong bảng bị ảnh hưởng

• Câu lệnh DELETE trong MySQL được dùng để xóa một hoặc nhiều bản ghi (hàng)
từ một bảng trong MySQL. Chúng ta có thể xóa những bản ghi thỏa mãn điều kiện
nhất định hoặc xóa toàn bộ bản ghi trong bảng một cách dễ dàng với DELETE
26
Nguyễn Thế Phong - 20216868
Database

7.2 Cập nhật dữ liệu từ 1 bảng Excel qua sinh tự động SQL Script
Khi thêm, sửa hoặc xóa dữ liệu một bảng trong CSDL, chúng ta cần viết câu lệnh để
làm điều đó. Nhưng khi số lượng hàng (bản ghi) lớn, việc lặp đi lặp lại việc viết câu lệnh
là một điều tốn thời gian và không cần thiết. Khi đó, ta có sự trợ giúp từ Excel với công
cụ tự động sinh SQL Script giúp cho việc tạo ra câu lệnh nhanh chóng và dễ dàng hơn

27
Nguyễn Thế Phong - 20216868
Database

Mã nguồn và giao diện kết quả

7.3 Cập nhật dữ liệu từ một bảng khác


Việc cập nhật dữ liệu từ một bảng khác là điều cần thiết và việc đó được hỗ trợ trong
MySQL qua việc sử dụng JOIN và các câu lệnh liên quan

7.4 Cập nhật dữ liệu qua một procedure


Cập nhật dữ liệu còn có thể làm được một cách thuận tiện qua việc viết các procedure.
Khi cần dùng chúng ta chỉ cần truyền các tham số tương ứng và gọi là procedure như ở
mục 6.4 mà không cần viết lại cả câu lệnh. Điều đó giúp việc sử lí dữ diệu trong CSDL
trở nên thuận tiện và dễ dàng hơn.
28
Nguyễn Thế Phong - 20216868
Database

Tạo một procedure thực hiện thay đổi id Nhà cung cấp tại nơi có id Sản phẩm là 1 với
giá trị được truyền vào:

7.5 Tự động sinh ra các procedure cập nhật dữ liệu


Việc tự động sinh ra các procedure là một việc khá khó khăn, thường chúng ta có thể
tận dụng các ngôn ngữ lập trình để làm việc này

8 Sử dụng hàm trong truy vấn và đánh chỉ mục dữ liệu

8.1 Aggregate Functions, Math Functions, Comparison Functions


Trong hệ quản trị cơ sở dữ liệu, các hàm tổng hợp là một hàm trong đó các giá trị
của nhiều hàng được gom nhóm lại với nhau để làm đầu vào cho các tiêu chí nhất định
để tạo thành một giá trị duy nhất có ý nghĩa quan trọng hơn. Chúng ta có các hàm tổng
hợp thường xuyên sử dụng sau:

• Hàm COUNT trong SQL là hàm đơn giản nhất và rất hữu ích trong việc đếm số
lượng bản ghi, được trả về bởi một câu lệnh SELECT

• Hàm SUM trong SQL được sử dụng để tính tổng của một trường trong các bản ghi
khác nhau

• Hàm AVG trong SQL được sử dụng để tính giá trị trung bình của một trường trong
các bản ghi khác nhau

• Hàm MIN trong SQL được sử dụng để tìm ra bản ghi có giá trị nhỏ nhất trong một
tập hợp bản ghi
29
Nguyễn Thế Phong - 20216868
Database

• Hàm MAX trong SQL được sử dụng để tìm ra bản ghi có giá trị lớn nhất trong một
tập hợp bản ghi

Dưới đây là mã nguồn và giao diện kết quả thực hiện:


AVG

MAX

30
Nguyễn Thế Phong - 20216868
Database

MIN

SUM

Một
vài Math Functions:

• ABS() - giá trị tuyệt đối

• CEIL() - giá trị nguyên nhỏ nhất lớn hơn so với giá trị input

• FLOOR() - giá trị nguyên lớn nhất nhỏ hơn so với giá trị input

• DIV - thực hiện phép chia lấy kết quả phần nguyên

• POWER - tính lũy thừa của một số hoặc biểu thức

• EXP(n) - tính giá trị hàm e mũ


31
Nguyễn Thế Phong - 20216868
Database

Dưới đây là mã nguồn và giao diện kết quả thực hiện:


- ABS

- CEIL

32
Nguyễn Thế Phong - 20216868
Database

- FLOOR

- MOD

Comparison Functions:
- Hàm COALESCE trả về giá trị khác NULL đầu tiên trong số các giá trị input
- GREATEST và LEAST nhận n đối số và trả về giá trị lớn nhất hoặc nhỏ nhất trong
giá trị n của đối số đó
- IS NULL trả về nếu đối số là NULL, ngược lại trả về 0
Dưới đây là mã nguồn và giao diện kết quả thực hiện:

33
Nguyễn Thế Phong - 20216868
Database

∗ COALESCE

∗ ISNULL

8.2 Control Flow Functions and Expressions


Chúng ta có thể dùng Control Flow Functions and Expressions trong mệnh đề SE-
LECT, WHERE, ORDER BY, GROUP BY với một số hàm thông dụng:

• IF trả về một giá trị dựa trên điều kiện nào đó

• IFNULL trả về giá trị input đầu tiên nếu nó không NULL, nếu NULL thì trả về giá
trị input thứ 2

• CASE trả về giá trị trong nhánh THEN nếu điều kiện trong WHERE được thỏa
mãn, nếu không thì trả về giá trị trong nhánh ELSE
34
Nguyễn Thế Phong - 20216868
Database

Dưới đây là mã nguồn và giao diện kết quả thực hiện:


∗ IF

∗ NULLIF

35
Nguyễn Thế Phong - 20216868
Database

∗ CASE

8.3 Window Functions


Window Functions hoạt động trên một tập hợp các hàng và trả về một giá trị tổng
hợp duy nhất cho mỗi hàng.
Ưu điểm chính của việc sử dụng Window Functions so với các hàm tổng hợp thông thường
là: Các hàm Window Functions không làm các hàng được nhóm thành một hàng duy nhất,
các hàng giữ lại các danh tính thuộc tính riêng biệt của chúng và một giá trị tổng hợp sẽ
được thêm vào mỗi hàng.

36
Nguyễn Thế Phong - 20216868
Database

8.4 Date Functions, String Functions


Date Functions là các hàm cho phép chúng ta thao tác với kiểu dữ liệu ngày giờ và
thời gian một cách hiệu quả. Một số hàm thông dụng:

• CURDATE: trả về ngày hiện tại

• CURTIME: trả về thời gian hiện tại

• DATE_SUB(): trừ hai ngày

• ...

Dưới đây là mã nguồn và giao diện kết quả thực hiện:


∗ DATEIFF

∗ DAY

37
Nguyễn Thế Phong - 20216868
Database

String Functions là các hàm cho phép chúng ta thao tác với kiểu dữ liệu xâu một cách
hiệu quả. Một số hàm thông dụng:

• CONCAT(): nối các string lại với nhau

• TRIM(): loại bỏ các kí tự không mong muốn

• INSTR(): trả về vị trí mà đoạn string con xuất hiện trong đoạn string lớn

• ...

Dưới đây là mã nguồn và giao diện kết quả thực hiện:


∗ CONCAT

∗ INSTR

38
Nguyễn Thế Phong - 20216868
Database

8.5 Đánh chỉ mục dữ liệu một bảng

Chỉ mục (INDEX) trong SQL là bảng tra cứu đặc biệt mà công cụ tìm kiếm cơ sở dữ
liệu có thể sử dụng để tăng nhanh thời gian và hiệu suất truy vấn dữ liệu.
INDEX giúp tăng tốc các truy vấn SELECT chứa các mệnh đề WHERE hoặc ORDER,
nhưng nó làm chậm việc dữ liệu nhập vào với lệnh UPDATE và INSERT. Các chỉ mục
có thể được tạo hoặc xóa mà không ảnh hưởng đến dữ liệu.
Mặc dù sử dụng INDEX nhằm mục đích để nâng cao hiệu suất của Database, nhưng đôi
khi bạn nên tránh dùng chúng. Dưới đây là một số trường hợp bạn cần xem xét để quyết
định có nên sử dụng INDEX hay không:

• Không nên sử dụng trong các bảng nhỏ, ít bản ghi.

• Không nên sử dụng INDEX trong bảng mà các hoạt động UPDATE, INSERT xảy
ra thường xuyên với tần suất lớn.

• Không nên sử dụng cho các cột mà chứa một số lượng lớn giá trị NULL.

• Không nên dùng INDEX cho các cột mà thường xuyên bị sửa đổi

8.6 So sánh trước và sau khi đánh chỉ mục

Trước khi đánh index, hệ thống phải duyệt qua tất cả các hàng của bảng hiện tại để
trả về kết quả (ở đây là 23 rows). Thời gian thực thi là 0.016 sec

Sau khi đánh index, hệ thống chỉ cần duyệt qua 17 rows. Thời gian thực thi lúc này xấp
xỉ 0 sec
39
Nguyễn Thế Phong - 20216868
Database

40
Nguyễn Thế Phong - 20216868
Database

9 Thực hành thiết kế CSDL và các câu lệnh SQL

9.1 Thực hành thiết kế CSDL lưu trữ đơn hàng


9.1.1 Xây dựng lược đồ R-E (chụp ảnh viết tay)

9.1.2 Xây dựng lược đồ E-R(chụp ảnh viết tay)

9.1.3 Thiết kế trên hệ quản trị CSDL


Từ 2 lược đồ đã xây dựng ở trên, ta thiết kế CSDL trên MySQL Workbench với các
thuộc tính và ràng buộc cụ thể
41
Nguyễn Thế Phong - 20216868
Database

9.1.4 In diagram cơ sở dữ liệu (chụp từ phần mềm)

42
Nguyễn Thế Phong - 20216868
Database

9.2 Thực hành câu lệnh SQL


9.2.1 Viết câu lệnh thêm dữ liệu vào bảng

9.2.2 Viết câu lệnh truy vấn


Chúng ta viết câu lệnh truy vấn để kiểm tra xem CSDL có hoạt động ổn định và ra
kết quả như chúng ta mong muốn hay không.
1.Đếm số mặt hàng

43
Nguyễn Thế Phong - 20216868
Database

2. Đếm số khách hàng đã mua hàng

3. Gía tiền dương

44
Nguyễn Thế Phong - 20216868
Database

4. Liệt kê danh sách các đơn đặt hàng của cửa hàng

5. Liệt kê danh sách khách hàng đã mua ở cửa hàng

45
Nguyễn Thế Phong - 20216868
Database

6. Liệt kê danh sách sản phẩm cùa đơn hàng

7. Sản phẩm của đơn hàng mã 123

46
Nguyễn Thế Phong - 20216868
Database

8. Sản phẩm mà Nguyễn Thế Phong mua

9. Sản phẩm theo thứ tự giá giảm

47
Nguyễn Thế Phong - 20216868
Database

10. Tên khách hàng ngược thứ tự alphabe

11. Tên khách hàng theo thứ tự Alphabe

48
Nguyễn Thế Phong - 20216868
Database

12. Tổng số tiền của đơn hàng 123

13.Tổng số tiền của từng đơn hàng

49
Nguyễn Thế Phong - 20216868
Database

9.2.3 Thay đổi cấu trúc CSDL


Thực hiện thay đổi cấu trúc CSDL bằng cách thêm cột mới vào bảng hoặc sửa cột đã
có, hoặc thêm các ràng buộc,...
1. Thay đổi ngày đặt hàng của khách hàng phải nhỏ hơn ngày hiện tại.

2. Thay đổi trường điện thoại của khách hàng là not null.

50
Nguyễn Thế Phong - 20216868
Database

3. Thay đổi trường giá tiền của từng mặt hàng là dương( 0)

4. Thêm trường ngày xuất hiện trên thị trường của sản phẩm.

51
Nguyễn Thế Phong - 20216868
Database

10 Chuẩn hóa

52
Nguyễn Thế Phong - 20216868
Database

53
Nguyễn Thế Phong - 20216868
Database

54
Nguyễn Thế Phong - 20216868
Database

55
Nguyễn Thế Phong - 20216868
Database

56
Nguyễn Thế Phong - 20216868
Database

57
Nguyễn Thế Phong - 20216868
Database

58
Nguyễn Thế Phong - 20216868
Database

11 Truy vấn dữ liệu trên cơ sở dữ liệu OLTP

1. Truy vấn thông tin khách hàng phàn nàn

2. Truy vấn ra thông tin đơn hàng

59
Nguyễn Thế Phong - 20216868
Database

3. Truy vấn nhân viên đã chăm sóc khách hàng của đơn hàng này.

4. Truy vấn thông tin sản phẩm bị phàn nàn.

60
Nguyễn Thế Phong - 20216868
Database

5. Kiểm tra kho hàng còn sản phẩm đó không

6.Đưa ra những dòng sản phẩm có cùng mức giá, chênh lệch giá nhỏ để tư vấn(Nhỏ hơn
5 đô)

61
Nguyễn Thế Phong - 20216868
Database

7. Đưa ra những dòng xe có cùng một số đặc điểm với xe trước.

8. Truy vấn sản phẩm mới mà khách hàng yêu cầu theo đặc điểm.

62
Nguyễn Thế Phong - 20216868
Database

9. Tìm 1 nhân viên đã có kinh nghiệm để tư vấn cho khách hàng.

10. Hiển thị những khách hàng đã mua sản phẩm này để tiến hành khảo sát chất lượng

63
Nguyễn Thế Phong - 20216868
Database

11. Hiển thị top 5 khách hàng có tổng giá trị đơn hàng lớn nhất.

12. Hiển thị top 5 sản phẩm có tỷ lệ doanh số cao nhất

64
Nguyễn Thế Phong - 20216868
Database

13. Kiểm tra giao vận đã đúng thời gian yêu cầu chưa, hiển thị đơn hàng giao trễ.

14. Đưa các các sản phẩm không có mặt trong bất kỳ một đơn hàng nào

65
Nguyễn Thế Phong - 20216868
Database

15. Đưa ra các sản phẩm có số lượng trong kho lớn hơn trung bình số lượng trong kho
của các sản phẩm cùng loại.

16(*). Thống kê tổng số lượng sản phẩm trong kho theo từng dòng sản phẩm của từng
nhà cung ứng

66
Nguyễn Thế Phong - 20216868
Database

17(*). Thống kê ra mỗi sản phẩm được đặt hàng lần cuối vào thời gian nào và khách
hàng đã đặt hàng

67
Nguyễn Thế Phong - 20216868
Database

12 Xây dựng dashboard và PTDL từ CSDL OLTP

Công ty A muốn có một bản báo cáo tình hình doanh nghiệp theo các chủ đề sau: Câu
1: Thống kê doanh số của các nhân viên/quản lý theo phòng ban (cụ thể là phòng ban
có officeCode = 4)

Câu 2: Thống kê doanh số theo các office

Câu 3: Thống kê doanh số theo nội địa tại các office


68
Nguyễn Thế Phong - 20216868
Database

Câu 4: Thống kê top 5 những sản phẩm được khách hàng mua nhiều nhất theo khu vực
cụ thể

69
Nguyễn Thế Phong - 20216868
Database

13 Kết luận

Em xin chân thành cảm ơn thầy Nguyễn Danh Tú đã hướng dẫn em môn học Cơ sở
dữ liệu kì 2022.2. Sau khi được thầy hướng dẫn và một chút tự tìm hiểu, qua môn học
Cơ sở dữ liệu, em thấy mình đã học và làm được một số điều sau:

• Những điều học và làm được:


– Tổng quan về cơ sở dữ liệu
- Mô hình thực thể liên kết
- Mô hình dữ liệu quan hệ
- Thiết kế cơ sở dữ liệu
- Ngôn ngữ truy vấn SQL, DBMS
- Các tác vụ quản trị hệ thống
- Thực hành trên một hệ quản trị cơ sở dữ liệu: truy vấn theo yêu cầu, xây dựng
lược đồ, tối ưu thời gian truy vấn, thao tác nghiệp vụ thực tế,...

• Những điều hạn chế:


- Một số câu lệnh truy vấn còn đơn giản
- Thao tác với dữ liệu còn hạn chế
- Chưa biết cách sử dụng liên kết ngôn ngữ lập trình với ngôn ngữ SQL

Em xin chân thành cảm ơn thầy vì sự hướng dẫn và truyền đạt kiến thức trong môn cơ
sở dữ liệu. Thầy đã tạo điều kiện để em có cơ hội tiếp cận và thấu hiểu về lĩnh vực này.
Sự tận tâm và tâm huyết của thầy đã giúp em vượt qua những khó khăn trong quá trình
học tập. Em sẽ luôn trân trọng những kiến thức và kinh nghiệm mà thầy đã chia sẻ và
áp dụng chúng vào công việc và cuộc sống của mình.

70
Nguyễn Thế Phong - 20216868
Database

14 Tài liệu tham khảo

1. Slide bài giảng môn Cơ sở dữ liệu, thầy Nguyễn Danh Tú

2. web: https://www.mysqltutorial.org/

3. https://www.youtube.com/

71
Nguyễn Thế Phong - 20216868

You might also like