Professional Documents
Culture Documents
BÁO CÁO
CUỐI KỲ
CƠ SỞ DỮ LIỆU
Phong.NT216868@sis.hust.edu.vn
Database
Mục lục
10 Chuẩn hóa 52
13 Kết luận 70
2
Nguyễn Thế Phong - 20216868
Database
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.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.
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
6
Nguyễn Thế Phong - 20216868
Database
7
Nguyễn Thế Phong - 20216868
Database
• 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ả
• 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
• 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
• 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
• 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
• 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
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
• 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
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
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.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),...
bảng đó
23
Nguyễn Thế Phong - 20216868
Database
• 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.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
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:
• 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
MAX
30
Nguyễn Thế Phong - 20216868
Database
MIN
SUM
Một
vài Math Functions:
• 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
- 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
• 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
∗ NULLIF
35
Nguyễn Thế Phong - 20216868
Database
∗ CASE
36
Nguyễn Thế Phong - 20216868
Database
• ...
∗ 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:
• INSTR(): trả về vị trí mà đoạn string con xuất hiện trong đoạn string lớn
• ...
∗ INSTR
38
Nguyễn Thế Phong - 20216868
Database
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 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
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
42
Nguyễn Thế Phong - 20216868
Database
43
Nguyễn Thế Phong - 20216868
Database
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
45
Nguyễn Thế Phong - 20216868
Database
46
Nguyễn Thế Phong - 20216868
Database
47
Nguyễn Thế Phong - 20216868
Database
48
Nguyễn Thế Phong - 20216868
Database
49
Nguyễn Thế Phong - 20216868
Database
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
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.
60
Nguyễn Thế Phong - 20216868
Database
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
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
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.
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
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 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:
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
2. web: https://www.mysqltutorial.org/
3. https://www.youtube.com/
71
Nguyễn Thế Phong - 20216868