SydexaSydexa

SQL Cơ Bản

Thế giới dữ liệu
SELECT cơ bảnLọc với WHERE
Hàm tổng hợpGROUP BY & HAVING
INNER JOINLEFT/RIGHT/FULL JOIN & Subquery
Hàm xử lý dữ liệu
UNION & CTESắp ra mắt
Window FunctionsSắp ra mắt
CRUD & CREATE TABLESắp ra mắt
Thiết kế CSDLSắp ra mắt
VIEW & ALTER TABLESắp ra mắt
Dự án cuối khóaSắp ra mắt
Trang chủKhoá họcSQL Cơ Bản
Thế giới của dữ liệu
Vì sao cần cơ sở dữ liệu thay cho Excel, mô hình quan hệ (bảng, hàng, cột) và khái niệm khóa chính, khóa ngoại. Làm quen dataset quản lý sinh viên dùng xuyên suốt khóa học.

Trước khi nói bất kỳ lý thuyết nào, chúng ta sẽ thử một câu hỏi rất thực tế, kiểu câu mà thầy cô hay hỏi vào cuối học kỳ. Bạn hãy bấm nút và xem hai cách trả lời chạy song song nhé.

Ai đứng đầu khoa?

“Trong toàn khoa, bạn nào có điểm trung bình cao nhất?”

Bảng điểm có 50.000 dòng , 2.500 sinh viên × 20 lớp học phần.

Làm tay trên Excel00:00
  • ✓Mở file 50.000 dòng, chờ Excel nạp xong
  • ✓Ghép tay từng dòng điểm với sinh viên
  • ✓Tính điểm trung bình cho 2.500 người
  • ✓Sắp xếp lại toàn bộ bảng theo điểm
  • ✓Dò mắt tìm người đầu bảng, rồi kiểm lại
≈ 15 phút(ước lượng thao tác tay)
Hỏi cơ sở dữ liệu0 ms

SELECT sv.ho_ten, sv.lop,

ROUND(AVG(d.diem), 2) AS diem_tb

FROM diem d

JOIN sinh_vien sv ON sv.ma_sv = d.ma_sv

GROUP BY sv.ma_sv, sv.ho_ten, sv.lop

ORDER BY diem_tb DESC

LIMIT 1;

Đang quét 50.000 dòng…

ho_tenlopdiem_tb
Đặng Minh KhôiCNTT229.42
Xong sau 38 mili-giây
Cùng một câu hỏi, cùng một bộ dữ liệunhanh hơn 23.000 lần

Cùng một câu hỏi, hai con đường. Bấm nút để chạy cả hai cùng lúc.

Cùng một câu hỏi, cùng một bộ dữ liệu. Nhưng khác nhau ở chỗ là Excel bắt bạn tự làm từng bước, còn database thì bạn chỉ cần mô tả thứ mình muốn rồi nó tự lo phần còn lại.

Đoạn lệnh màu tím kia là SQL, thứ bạn sẽ tự viết được ở trong tương lai gần :D. Còn bài hôm nay trả lời câu hỏi đứng trước nó là dữ liệu đang được xếp thế nào mà hỏi một câu lại ra ngay được như vậy?

0:00/0:00
Bài này chưa cần gõ một dòng code nào:

Đừng cố hiểu đoạn SQL vừa rồi, cũng đừng ghi nhớ nó. Mục tiêu hôm nay là hiểu vì sao mọi người cần database và nắm được “bản đồ tư duy” để đọc bất kỳ cơ sở dữ liệu quan hệ nào.

Khởi động

1.Một ứng dụng như Shopee xử lý hàng triệu đơn mỗi ngày. Vì sao họ KHÔNG thể dùng một file Excel khổng lồ để lưu tất cả?
1/1
1/1

Lộ trình bài học

Ba chặng, một hành trình. Đây là con đường ta sẽ đi trong bài này:

Bản đồ hành trình

Bắt đầuCơ sở dữ liệu là gì?Vì sao Excel “vỡ trận”, vàdatabase giải quyết ra sao.Bảng · hàng · cộtBa khái niệm nền tảng của môhình quan hệ (relational).Khóa chính & khóa ngoạiĐịnh danh mỗi hàng và nốicác bảng, khỏi lặp dữ liệu.123Hoàn thành!

Vậy cơ sở dữ liệu là gì?

Cơ sở dữ liệu (database) là một nơi lưu trữ dữ liệu có tổ chức, được trông coi bởi một phần mềm chuyên dụng gọi là DBMS (Database Management System), ví dụ PostgreSQL, MySQL hay SQL Server...

Hình dung thế này: nếu Excel là một cuốn vở bạn tự viết tự quản, thì database giống một thư viện có thủ thư. Ông thủ thư (DBMS) đặt ra quy tắc: mỗi cuốn sách xếp đúng kệ đúng mã, ai mượn ai trả gì đều được ghi sổ, và đông người cùng tới tra cứu vẫn trật tự. Bạn không tự bới kệ, mà bạn nhờ thủ thư bằng một ngôn ngữ riêng, và ngôn ngữ đó chính là SQL (thứ ta sẽ học suốt khoá này).

Tiêu chíExcel / Google SheetsCơ sở dữ liệu
Quy môVài nghìn dòng là bắt đầu ì ạchHàng triệu đến hàng tỷ dòng vẫn nhanh
Nhiều người cùng lúcDễ ghi đè, kẹt fileHàng nghìn người đọc/ghi an toàn
Tính nhất quánSửa một thông tin phải sửa nhiều nơiLưu một nơi, chỗ khác tham chiếu lại
Kiểm soát kiểu dữ liệuÔ nào cũng gõ được bất cứ thứ gìChặn dữ liệu sai kiểu ngay từ đầu
Cách hỏi dữ liệuLọc và dùng hàm thủ côngDùng ngôn ngữ SQL, hỏi câu phức tạp trong mili giây
Đừng hiểu lầm:

Database không phải “kẻ thù” của Excel. Mỗi công cụ có chỗ dùng riêng: cần tính toán nhanh, báo cáo cá nhân thì Excel vẫn vô địch. Nhưng khi bạn xây một phần mềm thật có nhiều người dùng và nhiều dữ liệu, database gần như luôn là lựa chọn mặc định.

Excel “vỡ trận” vs Cơ sở dữ liệu có tổ chức

VSExcelmột file · nhiều người sửa trực tiếp#ho_tendiem1An9.02Bình8.03Bình8.04Cường7.5sdt0903…0912…0912…0921…⚠ Ghi đè!✗ Hỗn loạn, dễ mất dữ liệuCơ sở dữ liệumột phần mềm đứng ra điều phối mọi truy cậpsinh_viendiem⚙️Phần mềmquản lýdữ liệu✓✓✓✓ Có tổ chức, dữ liệu được bảo vệ

Kiểm tra nhanh

1.DBMS (hệ quản trị cơ sở dữ liệu) đóng vai trò gì trong câu chuyện 'thư viện'?
1/1
1/1

Mọi thứ đều là bảng

Loại database phổ biến nhất hiện nay là cơ sở dữ liệu quan hệ (relational database). Ý tưởng cốt lõi đơn giản đến bất ngờ: dữ liệu được tổ chức thành các bảng, trông y hệt một trang tính Excel, nhưng có kỷ luật hơn nhiều.

Một bảng gồm ba khái niệm bạn cần thuộc nắm được:

  • Bảng (table) - Một tập hợp dữ liệu cùng loại. Ví dụ: bảng sinh_vien chứa toàn bộ sinh viên.
  • Hàng (row / bản ghi / record) - Một cá thể trong bảng. Mỗi hàng của sinh_vien là một sinh viên cụ thể.
  • Cột (column / trường / field) - Một thuộc tính của cá thể đó. Ví dụ: họ tên, ngày sinh, lớp.

Dưới đây là bảng sinh_vien, mỗi hàng là một sinh viên, mỗi cột là một thông tin về họ:

ma_svho_tenngay_sinhgioi_tinhlop
SV001Nguyễn Văn An2005-03-12NamCNTT01
SV002Trần Thị Bình2005-07-25NữCNTT01
SV003Lê Hoàng Cường2004-11-02NamCNTT02

Mỗi cột có một kiểu dữ liệu

Đây là điểm khác biệt lớn so với Excel. Trong database, mỗi cột được quy định một kiểu dữ liệu (data type) cố định, và database sẽ từ chối mọi giá trị sai kiểu. Như khi gõ chữ “chín phẩy” vào một cột kiểu số sẽ bị chặn ngay. Nhờ vậy dữ liệu luôn sạch.

Kiểu dữ liệuDùng choVí dụ
TEXT / VARCHARChuỗi ký tựho_ten = 'Nguyễn Văn An'
INTEGERSố nguyênso_tin_chi = 3
REAL / NUMERICSố có phần thập phândiem_so = 8.5
DATENgày thángngay_sinh = 2005-03-12
BOOLEANĐúng / Saida_tot_nghiep = false

Nói thì dễ, chứ làm lại là một câu chuyện khác. Dưới đây là bảng sinh_vien đang thiếu một hàng, bạn hãy kéo từng giá trị vào đúng ô và xem database phản ứng thế nào nhé.

Điền hàng mới: sai kiểu là bị chặn

sinh_vienđã điền 0/4 ô
ma_svTEXTho_tenTEXTngay_sinhDATEdiem_tbREAL
SV001Nguyễn Văn An2005-03-128.5
SV002Trần Thị Bình2005-07-257.0
SV003Lê Hoàng Cường2004-11-029.25

Kéo giá trị vào ô trống, hoặc bấm chọn rồi bấm vào ô:

Hàng mới của Phạm Thu Dung đang chờ 4 giá trị. Thử thả 'chín phẩy' vào cột diem_tb xem database nói gì.

Bộ dữ liệu đi cùng ta suốt khoá học

Để mọi ví dụ đều gần gũi, cả khoá học sẽ xoay quanh một hệ thống quản lý sinh viên gồm 4 bảng. Trước mắt cứ nhớ tên và vai trò của chúng đã; cuối bài ta sẽ vẽ cả bốn bảng nối với nhau thành một sơ đồ hoàn chỉnh:

  • sinh_vien - Thông tin từng sinh viên: mã, họ tên, ngày sinh, lớp.
  • mon_hoc - Danh mục môn học: mã môn, tên môn, số tín chỉ.
  • lop_hoc_phan - Một môn được mở dạy trong một học kỳ cụ thể (ví dụ: 'Cơ sở dữ liệu - HK1 2024').
  • diem - Điểm của một sinh viên trong một lớp học phần.

Nhưng khoan, có chỗ chưa ổn. Nếu mọi thứ đều là bảng, sao không nhét tất cả vào một bảng cho gọn mà phải chia ra bốn? Và khi đã chia rồi, con điểm 8.5 nằm trong bảng diem là điểm của ai, môn nào?

Ghi nhớ:

Bảng = danh sách, hàng = một dòng trong danh sách, cột = một thuộc tính. Nắm chắc ba từ này thì mọi câu lệnh SQL sau này chỉ là cách nói “lấy cột nào, từ bảng nào, ở những hàng thoả điều kiện gì”.

Kiểm tra nhanh

1.Trong bảng sinh_vien, thông tin của MỘT sinh viên cụ thể được gọi là gì?
1/2
1/2

Khóa chính & khóa ngoại

Ta đã có bảng, có hàng, có cột và tên của bốn bảng. Nhưng hai câu hỏi vừa rồi vẫn treo đó, và cả hai đều là thứ mà một mình bảng - hàng - cột không trả lời nổi.

Câu thứ nhất: thử tưởng tượng bảng sinh_vien không có cột ma_sv, mà lớp lại có ba bạn cùng tên Nguyễn Văn An, cùng ngày sinh, cùng lớp:

ho_tenngay_sinhlop
Nguyễn Văn An2005-03-12CNTT01
Nguyễn Văn An2005-03-12CNTT01
Nguyễn Văn An2005-03-12CNTT01

Ba hàng giống hệt nhau, không hàng nào có nổi một thứ để phân biệt với hai hàng còn lại. Bạn bảo database “chuyển An sang lớp CNTT02” thì nó biết sửa hàng nào? Lời giải là khóa chính (primary key): một cột mà mỗi hàng giữ một giá trị riêng, không trùng và không được để trống. Có nó, ba bạn An thành SV001, SV002, SV003, và mọi câu lệnh về sau mới chỉ trúng đúng một hàng.

Câu thứ hai: bảng diem để riêng, bảng sinh_vien để riêng, vậy ghép chúng lại bằng gì? Bằng khóa ngoại (foreign key): một cột trong bảng này chứa khóa chính của bảng kia. Còn nhớ dòng “Tính nhất quán” ở bảng so sánh đầu bài chứ, “lưu một nơi, chỗ khác tham chiếu lại”? Cái “tham chiếu” ấy giờ đã có tên.

0:00/0:00

Khóa ngoại tìm về khóa chính

Bảng diemma_sv = khóa ngoại (FK)Bảng sinh_vienma_sv = khóa chính (PK)ma_diemma_svma_lhpdiem_soD001SV001LHP018.5D002SV002LHP017.0D003SV001LHP029.0ma_svho_tenSV001Nguyễn Văn AnSV002Trần Thị BìnhSV003Lê Hoàng Cường
Bấm “Bắt đầu” để xem mỗi dòng điểm (khóa ngoại) tìm về đúng sinh viên (khóa chính).

Toàn cảnh bộ dữ liệu

Ở phần trước bạn đã gặp tên của bốn bảng. Giờ thì chúng có thể được vẽ ra đúng như thật: mỗi đường nối dưới đây chính là một khóa ngoại đang trỏ về khóa chính của bảng bên kia.

Đây cũng là bộ dữ liệu bạn sẽ viết truy vấn lên trong toàn bộ các bài còn lại, nên đáng để bấm thử từng ô một lần cho quen mặt.

Bốn bảng đi cùng bạn suốt khoá học

Bấm vào từng ô để xem các cột. Đường nối chính là khóa ngoại bạn vừa học.0/4
PKKhóa chính, định danh duy nhất mỗi hàngFKKhóa ngoại, trỏ sang khóa chính của bảng khác1 → NMũi tên chỉ về phía “nhiều”: một hàng ở gốc, nhiều hàng ở ngọn
1 → N1 → N1 → N

Chưa chọn bảng nào. Bấm vào một ô phía trên để xem các cột của nó, đâu là khóa chính, đâu là khóa ngoại, và vì sao bảng đó được tách ra riêng thay vì gộp chung.

Kiểm tra nhanh

1.Đặc điểm nào sau đây ĐÚNG với một khóa chính (Primary Key)?
1/2
1/2

Tổng kết bài học

Bạn vừa đi qua “bản đồ tư duy” của cơ sở dữ liệu quan hệ: vì sao Excel đuối khi phần mềm lớn lên, dữ liệu được tổ chức thành bảng - hàng - cột, mỗi cột có một kiểu dữ liệu, và các bảng được nối với nhau qua khóa chính và khóa ngoại. Chưa cần một dòng code, bạn đã đủ nền để bắt đầu viết SQL ở các bài sau.

Ôn nhanh bằng flashcard

Nhấp vào từng thẻ để lật và tự kiểm tra trước khi làm quiz.

Cơ sở dữ liệu (database) là gì?

Nhấp vào thẻ để lật

Nơi lưu trữ dữ liệu có tổ chức, được quản lý bởi một phần mềm gọi là DBMS (PostgreSQL, MySQL, SQL Server...). Ta giao tiếp với nó bằng ngôn ngữ SQL.

Nhấp vào thẻ để lật lại
1/5

Kiểm tra kiến thức cuối bài

1.Lý do quan trọng nhất khiến các phần mềm thật dùng database thay cho một file Excel là gì?
1/5
1/5
Bài tiếp theo