zalo-icon
facebook-icon
phone-icon
TechData.AI Logo
SQL CƠ BẢN CHO NGƯỜI MỚI BẮT ĐẦU

SQL CƠ BẢN CHO NGƯỜI MỚI BẮT ĐẦU

Trong kỷ nguyên số, dữ liệu chính là trái tim của mọi tổ chức, mọi quyết định. Và nếu dữ liệu là trái tim, thì SQL chính là ngôn ngữ giúp bạn giao tiếp, thấu hiểu và khai thác sức mạnh tiềm ẩn từ trái tim đó. Bạn có tò mò về thế giới dữ liệu nhưng chưa biết bắt đầu từ đâu? Bạn muốn nắm vững một công cụ quyền năng để mở ra những cơ hội mới trong sự nghiệp? Bài viết này của TechData.AI chính là điểm khởi đầu lý tưởng dành cho bạn. Chúng ta sẽ cùng nhau khám phá những kiến thức SQL cơ bản nhất, từ đó xây dựng nền tảng vững chắc để bạn tự tin bước vào hành trình chinh phục dữ liệu.

Tại TechData.AI, chúng tôi tin rằng việc học công nghệ phải thực sự thiết thực, dễ hiểu và truyền cảm hứng. Đó là lý do chúng tôi biên soạn bài viết này với phong cách đơn giản, gần gũi nhưng vẫn đảm bảo độ sâu về chuyên môn. Bạn sẽ không chỉ học được cú pháp mà còn hiểu được ý nghĩa đằng sau từng câu lệnh, từng thao tác, giúp bạn hình dung rõ ràng về cách dữ liệu được quản lý và sử dụng trong thế giới thực.

1. SQL Là Gì và Tại Sao Bạn Cần Học Nó?

Hãy tưởng tượng bạn đang ở trong một thư viện khổng lồ, nơi có hàng tỷ cuốn sách được sắp xếp theo nhiều cách khác nhau. Làm thế nào để bạn tìm được cuốn sách mình cần, trong hàng ngàn, hàng triệu cuốn sách đó? Bạn cần một "ngôn ngữ" để hỏi thủ thư, để chỉ dẫn cho ông ấy tìm kiếm đúng không? SQL chính là ngôn ngữ đó, nhưng thay vì sách, chúng ta đang nói về dữ liệu.

SQL là viết tắt của Structured Query Language, tạm dịch là "Ngôn ngữ truy vấn có cấu trúc". Đây là một ngôn ngữ tiêu chuẩn được thiết kế để quản lý và thao tác với các cơ sở dữ liệu quan hệ (Relational Database Management System – RDBMS). Các hệ thống RDBMS phổ biến mà bạn có thể đã nghe đến bao gồm MySQL, PostgreSQL, SQL Server, Oracle, SQLite. Mặc dù có nhiều hệ thống khác nhau, nhưng phần lớn chúng đều sử dụng cú pháp SQL chuẩn. Điều này có nghĩa là khi bạn học SQL cơ bản, bạn có thể áp dụng kiến thức đó cho hầu hết các hệ quản trị cơ sở dữ liệu quan hệ.

Tại Sao SQL Lại Quan Trọng Đến Vậy?

Trong thời đại dữ liệu lên ngôi, SQL trở thành một kỹ năng không thể thiếu cho rất nhiều vai trò và ngành nghề. Nó không chỉ dành riêng cho dân công nghệ mà còn mở ra cánh cửa cho bất kỳ ai muốn hiểu và làm việc với dữ liệu. Dưới đây là những lý do chính khiến SQL trở nên quan trọng:

  • Phân tích dữ liệu: Các nhà phân tích dữ liệu (Data Analyst), nhà khoa học dữ liệu (Data Scientist) sử dụng SQL hàng ngày để trích xuất, lọc, tổng hợp và phân tích thông tin từ các tập dữ liệu khổng lồ. Từ các truy vấn SQL, họ có thể phát hiện xu hướng, mô hình và đưa ra cái nhìn sâu sắc giúp doanh nghiệp đưa ra quyết định sáng suốt.
  • Phát triển phần mềm: Các nhà phát triển back-end, phát triển web và ứng dụng di động sử dụng SQL để tương tác với cơ sở dữ liệu của ứng dụng. Mọi thứ từ việc lưu trữ thông tin người dùng, sản phẩm, bài viết, đến các giao dịch mua bán đều cần SQL để quản lý và truy xuất.
  • Quản trị cơ sở dữ liệu (DBA): Chuyên gia quản trị cơ sở dữ liệu dùng SQL để thiết kế, triển khai, duy trì, tối ưu hóa hiệu suất và bảo mật các hệ thống cơ sở dữ liệu, đảm bảo dữ liệu luôn sẵn sàng và an toàn.
  • Hỗ trợ kinh doanh và Marketing: Ngay cả những người không chuyên về công nghệ trong lĩnh vực kinh doanh, marketing hay quản lý dự án cũng có thể dùng SQL để tự mình truy vấn dữ liệu khách hàng, dữ liệu bán hàng, hiệu suất chiến dịch mà không cần chờ đợi bộ phận IT. Điều này giúp họ nhanh chóng nắm bắt tình hình, đưa ra báo cáo tức thì và phản ứng kịp thời với thị trường.
  • Cơ hội nghề nghiệp rộng mở: Với sự bùng nổ của dữ liệu, nhu cầu về các chuyên gia có kỹ năng SQL là cực kỳ lớn. Học SQL giúp bạn nâng cao giá trị bản thân, mở rộng cơ hội việc làm trong nhiều lĩnh vực khác nhau.

Học SQL không chỉ là học một ngôn ngữ lập trình, mà là mở cánh cửa đến một thế giới nơi bạn có thể "trò chuyện" trực tiếp với dữ liệu, đặt câu hỏi và nhận được câu trả lời chính xác, kịp thời. Đây là một kỹ năng giá trị, giúp bạn tăng cường khả năng giải quyết vấn đề và đưa ra quyết định dựa trên bằng chứng, không chỉ dựa vào cảm tính hay phỏng đoán. SQL empowers bạn để biến dữ liệu thô thành thông tin hữu ích, và đó là một siêu năng lực thực sự trong thế giới ngày nay.

2. Cấu Trúc Cơ Bản của Một Cơ Sở Dữ Liệu SQL

Trước khi bắt tay vào các câu lệnh, chúng ta cần hiểu dữ liệu được tổ chức như thế nào trong một hệ thống SQL. Hãy hình dung một cơ sở dữ liệu như một tủ hồ sơ lớn và cực kỳ có tổ chức, nơi mọi thông tin được sắp xếp khoa học để dễ dàng tìm kiếm và quản lý. Bên trong tủ hồ sơ đó, có nhiều ngăn kéo, mỗi ngăn kéo chứa các loại hồ sơ khác nhau.

2.1. Cơ Sở Dữ Liệu (Database)

Đây là tập hợp có tổ chức của dữ liệu. Một cơ sở dữ liệu không chỉ là nơi chứa các dữ liệu thô mà còn bao gồm các cấu trúc định nghĩa cách dữ liệu được lưu trữ, các mối quan hệ giữa chúng, các quy tắc ràng buộc, và thậm chí cả các chương trình nhỏ để xử lý dữ liệu. Ví dụ, bạn có thể có một cơ sở dữ liệu "QuanLyBanHang" chứa tất cả thông tin về sản phẩm, khách hàng, đơn hàng; hoặc một cơ sở dữ liệu "NhanSuCongTy" lưu trữ thông tin về nhân viên, phòng ban, lương thưởng.

2.2. Bảng (Table)

Bảng là đơn vị lưu trữ dữ liệu chính trong một cơ sở dữ liệu quan hệ. Mỗi bảng giống như một bảng tính Excel quen thuộc, với các hàng (records) và cột (fields) được tổ chức rõ ràng. Mỗi bảng trong cơ sở dữ liệu thường đại diện cho một loại đối tượng hoặc sự kiện cụ thể.

  • Cột (Column/Field): Định nghĩa loại dữ liệu mà bạn muốn lưu trữ. Mỗi cột có một tên duy nhất trong bảng (ví dụ: "Tên sản phẩm", "Giá bán", "Ngày nhập hàng") và một kiểu dữ liệu cụ thể (ví dụ: số nguyên, văn bản, ngày tháng). Các cột này giống như các tiêu đề ở đầu mỗi cột trong bảng Excel của bạn.
  • Hàng (Row/Record): Là một tập hợp các giá trị dữ liệu cho các cột cụ thể. Mỗi hàng đại diện cho một đối tượng hoặc một sự kiện duy nhất. Ví dụ, một hàng trong bảng "Sản phẩm" có thể là: "Laptop XYZ", 15.000.000 VND, "2023-10-26". Mỗi hàng là một bản ghi hoàn chỉnh về một thực thể.

Hãy cùng xem một ví dụ về bảng đơn giản, bảng KhachHang (Customer):


+--------------+------------------+--------------------------+---------------------+
| MaKhachHang  | TenKhachHang     | Email                    | NgayDangKy          |
+--------------+------------------+--------------------------+---------------------+
| 1            | Nguyen Van A     | nguyen.a@example.com     | 2023-01-15          |
| 2            | Tran Thi B       | tran.b@example.com       | 2023-03-22          |
| 3            | Le Van C         | le.c@example.com         | 2023-07-01          |
| 4            | Pham Thi D       | pham.d@example.com       | 2023-09-10          |
+--------------+------------------+--------------------------+---------------------+
        

Trong ví dụ này:

  • MaKhachHang, TenKhachHang, Email, NgayDangKy là các cột (tiêu đề).
  • Mỗi dòng dữ liệu (ví dụ: "1, Nguyen Van A, nguyen.a@example.com, 2023-01-15") là một hàng (bản ghi) riêng biệt, mô tả một khách hàng cụ thể.

2.3. Kiểu Dữ Liệu (Data Types)

Mỗi cột trong bảng phải được định nghĩa với một kiểu dữ liệu cụ thể. Điều này rất quan trọng vì nó cho cơ sở dữ liệu biết cách lưu trữ thông tin (bao nhiêu bộ nhớ cần thiết) và cách xử lý thông tin đó (ví dụ, bạn không thể cộng hai chuỗi văn bản như bạn cộng hai số). Dưới đây là một số kiểu dữ liệu phổ biến mà bạn sẽ gặp:

  • INTEGER (INT): Dùng cho số nguyên (ví dụ: 1, 100, -5). Thường được dùng cho các ID, số lượng.
  • VARCHAR(n): Dùng cho chuỗi ký tự có độ dài biến đổi, tối đa n ký tự (ví dụ: 'Nguyen Van A', 'Hanoi'). 'n' là giới hạn độ dài bạn đặt cho chuỗi.
  • TEXT: Tương tự VARCHAR nhưng dùng cho chuỗi ký tự rất dài, không có giới hạn độ dài 'n' cụ thể. Thường dùng cho các đoạn mô tả dài.
  • DATE: Dùng cho ngày (ví dụ: '2023-10-26').
  • DATETIME / TIMESTAMP: Dùng cho ngày và giờ (ví dụ: '2023-10-26 14:30:00').
  • BOOLEAN / BOOL: Dùng cho giá trị đúng/sai (TRUE/FALSE hoặc 1/0, tùy hệ thống). Ví dụ: 'isActive', 'isAvailable'.
  • DECIMAL(p, s) / NUMERIC(p, s): Dùng cho số thập phân với độ chính xác cố định. p là tổng số chữ số (precision), và s là số chữ số sau dấu phẩy (scale). Ví dụ: DECIMAL(10, 2) có thể lưu trữ số như 12345678.99.
  • FLOAT / DOUBLE: Dùng cho số thập phân với độ chính xác động, thường dùng trong tính toán khoa học.

2.4. Khóa Chính (Primary Key) và Khóa Ngoại (Foreign Key)

Đây là những khái niệm cực kỳ quan trọng trong cơ sở dữ liệu quan hệ, giúp đảm bảo tính toàn vẹn của dữ liệu và thiết lập mối quan hệ ý nghĩa giữa các bảng.

  • Khóa Chính (Primary Key): Là một cột (hoặc tập hợp các cột) chứa các giá trị duy nhất và không được phép rỗng (NULL) cho mỗi hàng trong bảng. Nó được dùng để định danh một cách duy nhất từng bản ghi. Ví dụ, MaKhachHang trong bảng KhachHang là một khóa chính vì mỗi khách hàng có một mã duy nhất. Một bảng chỉ có thể có một khóa chính.
  • Khóa Ngoại (Foreign Key): Là một cột (hoặc tập hợp các cột) trong một bảng mà giá trị của nó tham chiếu đến khóa chính của một bảng khác. Khóa ngoại thiết lập mối quan hệ giữa hai bảng, giúp duy trì tính nhất quán của dữ liệu. Ví dụ, nếu bạn có bảng DonHang lưu thông tin các đơn hàng, thì cột MaKhachHang trong bảng DonHang có thể là khóa ngoại, tham chiếu đến MaKhachHang trong bảng KhachHang. Điều này đảm bảo rằng mỗi đơn hàng phải thuộc về một khách hàng có thật trong hệ thống.

Việc hiểu rõ cách dữ liệu được tổ chức sẽ giúp bạn dễ dàng hơn trong việc viết các câu lệnh SQL để truy vấn và thao tác dữ liệu một cách hiệu quả. Đây là nền tảng vững chắc để bạn không chỉ biết cú pháp mà còn hiểu được "linh hồn" của dữ liệu.

3. Các Lệnh SQL Cơ Bản Nhất (CRUD)

Giờ là lúc chúng ta đi sâu vào phần thú vị nhất: các câu lệnh SQL thực tế. Hầu hết các thao tác bạn sẽ thực hiện với dữ liệu đều nằm trong nhóm CRUD: Create (Tạo), Read (Đọc), Update (Cập nhật), Delete (Xóa). Đây là bốn hoạt động cơ bản bạn sẽ thực hiện liên tục với bất kỳ cơ sở dữ liệu nào. Để minh họa, chúng ta sẽ sử dụng bảng KhachHang đã giới thiệu ở trên.

3.1. SELECT – Đọc Dữ Liệu (Read)

Lệnh SELECT là xương sống của SQL, cho phép bạn trích xuất dữ liệu từ một hoặc nhiều bảng. Đây là lệnh bạn sẽ sử dụng nhiều nhất, và nó có rất nhiều biến thể để bạn có thể lấy chính xác dữ liệu mình cần.

3.1.1. Chọn Tất Cả Các Cột

Để lấy tất cả các cột và tất cả các hàng từ một bảng, bạn sử dụng ký tự đại diện * (dấu sao).


SELECT *
FROM KhachHang;
        

Lệnh này sẽ trả về toàn bộ dữ liệu trong bảng KhachHang, hiển thị tất cả các cột và tất cả các hàng.

3.1.2. Chọn Các Cột Cụ Thể

Thông thường, bạn sẽ chỉ cần một phần thông tin. Nếu bạn chỉ muốn xem một số cột nhất định, hãy liệt kê tên các cột đó, cách nhau bởi dấu phẩy. Điều này giúp giảm tải dữ liệu truyền về và giúp bạn tập trung vào những thông tin quan trọng.


SELECT TenKhachHang, Email
FROM KhachHang;
        

Kết quả sẽ chỉ hiển thị tên và email của các khách hàng.

3.1.3. Lọc Dữ Liệu với WHERE Clause

Khi bạn có hàng ngàn, hàng triệu bản ghi, việc lấy tất cả dữ liệu là không hiệu quả. Mệnh đề WHERE cho phép bạn chỉ định các điều kiện để lọc ra những hàng dữ liệu mà bạn thực sự quan tâm.


SELECT *
FROM KhachHang
WHERE MaKhachHang = 1;
        

Lệnh này sẽ trả về tất cả thông tin của khách hàng có MaKhachHang là 1.

Các Toán Tử So Sánh Phổ Biến:

Bạn sử dụng các toán tử này để tạo điều kiện trong mệnh đề WHERE:

  • = (Bằng): WHERE TenKhachHang = 'Nguyen Van A'
  • <> hoặc != (Không bằng): WHERE MaKhachHang <> 2
  • > (Lớn hơn): WHERE NgayDangKy > '2023-06-01'
  • < (Nhỏ hơn): WHERE MaKhachHang < 3
  • >= (Lớn hơn hoặc bằng): WHERE NgayDangKy >= '2023-03-01'
  • <= (Nhỏ hơn hoặc bằng): WHERE MaKhachHang <= 2
Kết Hợp Điều Kiện với AND, OR, NOT:

Bạn có thể kết hợp nhiều điều kiện lọc bằng các toán tử logic để tạo ra các truy vấn phức tạp hơn.


SELECT TenKhachHang, Email
FROM KhachHang
WHERE MaKhachHang > 1 AND NgayDangKy < '2023-06-01';
        

Lệnh này sẽ lấy tên và email của các khách hàng có mã lớn hơn 1 VÀ đăng ký trước ngày 01 tháng 06 năm 2023. Cả hai điều kiện đều phải đúng.


SELECT *
FROM KhachHang
WHERE TenKhachHang = 'Nguyen Van A' OR TenKhachHang = 'Le Van C';
        

Lệnh này sẽ lấy tất cả thông tin của khách hàng tên 'Nguyen Van A' HOẶC 'Le Van C'. Chỉ cần một trong các điều kiện là đúng.


SELECT *
FROM KhachHang
WHERE NOT Email LIKE '%@example.com'; -- Lấy khách hàng không có email dạng @example.com
        
Các Toán Tử Đặc Biệt:

Những toán tử này giúp bạn lọc dữ liệu theo các mẫu hoặc phạm vi cụ thể:

  • IN: Chỉ định nhiều giá trị có thể có cho một cột. Nó là cách viết ngắn gọn cho nhiều điều kiện OR.
    
    SELECT *
    FROM KhachHang
    WHERE MaKhachHang IN (1, 3); -- Lấy khách hàng có MaKhachHang là 1 hoặc 3
                    
  • BETWEEN: Chọn các giá trị nằm trong một phạm vi cụ thể (bao gồm cả giá trị đầu và cuối).
    
    SELECT *
    FROM KhachHang
    WHERE NgayDangKy BETWEEN '2023-01-01' AND '2023-03-31'; -- Lấy khách hàng đăng ký trong quý 1
                    
  • LIKE: Tìm kiếm các mẫu văn bản. Sử dụng ký tự đại diện:
    • % (dấu phần trăm): Đại diện cho chuỗi ký tự bất kỳ có độ dài bằng 0 hoặc nhiều hơn.
    • _ (dấu gạch dưới): Đại diện cho một ký tự bất kỳ.
    
    SELECT *
    FROM KhachHang
    WHERE TenKhachHang LIKE 'Nguyen%'; -- Tìm tên bắt đầu bằng 'Nguyen'
                    
    
    SELECT *
    FROM KhachHang
    WHERE Email LIKE '%@example.com'; -- Tìm email có chứa '@example.com'
                    
  • IS NULL / IS NOT NULL: Kiểm tra xem một cột có giá trị NULL (rỗng, thiếu dữ liệu) hay không. Giá trị NULL không giống như chuỗi rỗng '' hay số 0.
    
    SELECT *
    FROM KhachHang
    WHERE Email IS NOT NULL; -- Lấy khách hàng có địa chỉ email
                    

3.1.4. Sắp Xếp Dữ Liệu với ORDER BY

Khi bạn nhận được kết quả truy vấn, đôi khi bạn muốn chúng được sắp xếp theo một thứ tự nhất định (ví dụ: theo tên, theo ngày, theo giá trị). Mệnh đề ORDER BY giúp bạn làm điều đó. Bạn có thể sắp xếp theo thứ tự tăng dần (ASC, là mặc định nếu không chỉ định) hoặc giảm dần (DESC).


SELECT *
FROM KhachHang
ORDER BY NgayDangKy DESC; -- Sắp xếp khách hàng theo ngày đăng ký mới nhất (giảm dần)
        

SELECT TenKhachHang, NgayDangKy
FROM KhachHang
ORDER BY TenKhachHang ASC, NgayDangKy DESC; -- Sắp xếp theo tên tăng dần, nếu trùng tên thì sắp theo ngày đăng ký giảm dần
        

3.1.5. Giới Hạn Kết Quả với LIMIT (hoặc TOP)

Khi làm việc với các bảng lớn, việc hiển thị tất cả các bản ghi có thể rất chậm và không cần thiết. Bạn có thể chỉ muốn xem một số lượng bản ghi nhất định (ví dụ: 10 khách hàng đầu tiên, 5 sản phẩm bán chạy nhất). Việc sử dụng cú pháp này phụ thuộc vào hệ quản trị cơ sở dữ liệu bạn đang dùng:

  • MySQL/PostgreSQL/SQLite: Sử dụng LIMIT.
  • SQL Server: Sử dụng TOP.
  • Oracle: Sử dụng FETCH FIRST n ROWS ONLY hoặc Subquery với ROWNUM.

-- Ví dụ cho MySQL/PostgreSQL/SQLite:
SELECT *
FROM KhachHang
ORDER BY NgayDangKy DESC
LIMIT 2; -- Lấy 2 khách hàng đăng ký gần đây nhất

-- Ví dụ cho SQL Server:
SELECT TOP 2 *
FROM KhachHang
ORDER BY NgayDangKy DESC;
        

3.2. INSERT INTO – Thêm Dữ Liệu Mới (Create)

Lệnh INSERT INTO dùng để thêm các hàng dữ liệu mới vào một bảng. Đây là cách bạn đưa thông tin mới vào cơ sở dữ liệu của mình.

Có hai cách chính để sử dụng INSERT INTO:

3.2.1. Chỉ định cột và giá trị:

Đây là cách được khuyến nghị vì nó rõ ràng và an toàn nhất. Bạn chỉ định các cột mà bạn muốn thêm dữ liệu, sau đó cung cấp các giá trị tương ứng.


INSERT INTO KhachHang (MaKhachHang, TenKhachHang, Email, NgayDangKy)
VALUES (5, 'Hoang Van E', 'hoang.e@example.com', '2023-11-01');
        

Cột MaKhachHang phải là duy nhất. Nếu bạn cố gắng thêm một MaKhachHang đã tồn tại và nó là khóa chính, hệ thống sẽ báo lỗi.

3.2.2. Chỉ định giá trị cho tất cả các cột (ít được khuyến nghị):

Bạn có thể bỏ qua danh sách cột nếu bạn cung cấp giá trị cho TẤT CẢ các cột trong bảng, theo đúng thứ tự mà chúng được định nghĩa khi tạo bảng.


-- Giả sử thứ tự cột trong bảng KhachHang là: MaKhachHang, TenKhachHang, Email, NgayDangKy
INSERT INTO KhachHang
VALUES (6, 'Nguyen Thi F', 'nguyen.f@example.com', '2023-11-05');
        

Cách làm này kém an toàn hơn vì nếu cấu trúc bảng thay đổi (ví dụ: thêm/xóa/thay đổi thứ tự cột), câu lệnh của bạn có thể bị lỗi hoặc thêm dữ liệu sai vị trí. Luôn ưu tiên cách chỉ định rõ ràng tên cột.

3.3. UPDATE – Cập Nhật Dữ Liệu (Update)

Lệnh UPDATE dùng để sửa đổi dữ liệu hiện có trong một hoặc nhiều hàng của một bảng. Điều cực kỳ quan trọng là phải sử dụng mệnh đề WHERE để chỉ định những hàng nào bạn muốn cập nhật, nếu không bạn sẽ cập nhật TẤT CẢ các hàng trong bảng một cách không mong muốn và không thể hoàn tác (trừ khi có bản sao lưu hoặc giao dịch).


UPDATE KhachHang
SET Email = 'nguyen.van.a@example.com'
WHERE MaKhachHang = 1;
        

Lệnh này sẽ thay đổi địa chỉ email của khách hàng có MaKhachHang là 1.


UPDATE KhachHang
SET NgayDangKy = '2023-01-10', Email = 'nguyen.a.capnhat@example.com'
WHERE TenKhachHang = 'Nguyen Van A';
        

Bạn có thể cập nhật nhiều cột cùng lúc bằng cách liệt kê chúng và ngăn cách bởi dấu phẩy.

3.4. DELETE FROM – Xóa Dữ Liệu (Delete)

Lệnh DELETE FROM dùng để xóa một hoặc nhiều hàng khỏi một bảng. Tương tự như UPDATE, luôn luôn sử dụng mệnh đề WHERE để tránh xóa tất cả dữ liệu một cách không mong muốn và không thể phục hồi.


DELETE FROM KhachHang
WHERE MaKhachHang = 2;
        

Lệnh này sẽ xóa khách hàng có MaKhachHang là 2.


DELETE FROM KhachHang
WHERE NgayDangKy < '2023-03-01';
        

Lệnh này sẽ xóa tất cả khách hàng đăng ký trước ngày 01 tháng 03 năm 2023.

Cảnh báo quan trọng: Nếu bạn chạy DELETE FROM TenBang; mà không có WHERE clause, tất cả dữ liệu trong bảng đó sẽ bị xóa vĩnh viễn và không thể hoàn tác trong nhiều trường hợp. Hãy cực kỳ cẩn thận và luôn kiểm tra kỹ điều kiện WHERE của bạn!

4. Nâng Cao Khả Năng Truy Vấn Dữ Liệu

Khi bạn đã thành thạo các lệnh CRUD cơ bản, bạn đã có thể giao tiếp hiệu quả với cơ sở dữ liệu. Nhưng SQL còn cung cấp nhiều công cụ mạnh mẽ hơn để khai thác dữ liệu sâu sắc và lấy được những thông tin giá trị. Hãy cùng khám phá một số trong số đó.

4.1. Hàm Tổng Hợp (Aggregate Functions)

Các hàm tổng hợp cho phép bạn thực hiện các phép tính trên một tập hợp các hàng và trả về một giá trị duy nhất. Chúng cực kỳ hữu ích cho việc thống kê và tổng quan dữ liệu. Chúng ta sẽ giả sử có thêm bảng DonHang với cấu trúc như sau để minh họa:


+--------------+--------------+---------------------+------------+
| MaDonHang    | MaKhachHang  | NgayDatHang         | TongTien   |
+--------------+--------------+---------------------+------------+
| DH001        | 1            | 2023-01-20          | 1000000    |
| DH002        | 2            | 2023-03-25          | 500000     |
| DH003        | 1            | 2023-07-05          | 2000000    |
| DH004        | 3            | 2023-09-12          | 750000     |
| DH005        | 2            | 2023-11-03          | 1200000    |
| DH006        | 5            | 2023-11-02          | 800000     |
+--------------+--------------+---------------------+------------+
        
  • COUNT(): Đếm số lượng hàng. Có thể đếm tất cả hàng (COUNT(*)) hoặc đếm các giá trị không NULL trong một cột cụ thể (COUNT(TenCot)).
    
    SELECT COUNT(MaKhachHang) AS TongSoKhachHang
    FROM KhachHang; -- Đếm số khách hàng có MaKhachHang không NULL
                    
    
    SELECT COUNT(*) AS TongSoDonHang
    FROM DonHang; -- Đếm tổng số đơn hàng
                    
  • SUM(): Tính tổng của các giá trị số trong một cột.
    
    SELECT SUM(TongTien) AS TongDoanhThu
    FROM DonHang; -- Tính tổng doanh thu từ tất cả các đơn hàng
                    
  • AVG(): Tính giá trị trung bình của các giá trị số trong một cột.
    
    SELECT AVG(TongTien) AS DoanhThuTrungBinh
    FROM DonHang; -- Tính doanh thu trung bình mỗi đơn hàng
                    
  • MIN(): Tìm giá trị nhỏ nhất trong một cột.
    
    SELECT MIN(NgayDangKy) AS KhachHangCuNhat
    FROM KhachHang; -- Tìm ngày đăng ký sớm nhất
                    
  • MAX(): Tìm giá trị lớn nhất trong một cột.
    
    SELECT MAX(NgayDangKy) AS KhachHangMoiNhat
    FROM KhachHang; -- Tìm ngày đăng ký muộn nhất
                    

4.2. Nhóm Dữ Liệu với GROUP BY

Mệnh đề GROUP BY được sử dụng với các hàm tổng hợp để nhóm các hàng có cùng giá trị trong một hoặc nhiều cột thành một nhóm duy nhất. Sau đó, hàm tổng hợp sẽ được áp dụng cho từng nhóm. Điều này cực kỳ hữu ích để phân tích dữ liệu theo từng danh mục.

Ví dụ, để tính tổng doanh thu cho mỗi khách hàng từ bảng DonHang:


SELECT MaKhachHang, SUM(TongTien) AS TongDoanhThu
FROM DonHang
GROUP BY MaKhachHang;
        

Kết quả sẽ hiển thị tổng doanh thu cho từng MaKhachHang riêng biệt. Thay vì một tổng toàn bộ, bạn nhận được tổng theo từng nhóm khách hàng.

4.3. Lọc Nhóm với HAVING

Mệnh đề HAVING giống như WHERE nhưng được dùng để lọc các nhóm được tạo bởi GROUP BY. Điều quan trọng là bạn không thể sử dụng WHERE để lọc các kết quả của hàm tổng hợp (ví dụ: WHERE SUM(TongTien) > 1000000 sẽ bị lỗi). Đó là lúc HAVING phát huy tác dụng.


SELECT MaKhachHang, SUM(TongTien) AS TongDoanhThu
FROM DonHang
GROUP BY MaKhachHang
HAVING SUM(TongTien) > 1500000; -- Chỉ lấy các khách hàng có tổng doanh thu lớn hơn 1.5 triệu
        

Lệnh này sẽ trả về mã khách hàng và tổng doanh thu, nhưng chỉ cho những khách hàng mà tổng doanh thu của họ vượt quá 1.500.000.

4.4. Kết Nối Bảng với JOIN

Đây là một trong những tính năng mạnh mẽ và quan trọng nhất của SQL, cho phép bạn kết hợp các hàng từ hai hoặc nhiều bảng dựa trên một cột chung (thường là mối quan hệ khóa chính – khóa ngoại). INNER JOIN là loại JOIN phổ biến nhất, trả về các hàng chỉ khi có sự trùng khớp giữa các cột trong cả hai bảng. Hãy nhớ lại bảng KhachHang và bảng DonHang. Cả hai đều có cột MaKhachHang.

Để lấy thông tin về tên khách hàng cùng với mã đơn hàng và tổng tiền của các đơn hàng mà họ đã đặt, chúng ta sẽ kết nối hai bảng này:


SELECT
    KhachHang.TenKhachHang, -- Lấy tên khách hàng từ bảng KhachHang
    DonHang.MaDonHang,      -- Lấy mã đơn hàng từ bảng DonHang
    DonHang.TongTien        -- Lấy tổng tiền từ bảng DonHang
FROM
    KhachHang
INNER JOIN DonHang ON KhachHang.MaKhachHang = DonHang.MaKhachHang;
        

Lệnh này sẽ kết hợp thông tin của khách hàng với các đơn hàng của họ, chỉ hiển thị những khách hàng đã có đơn hàng. Đây là ví dụ về cách SQL giúp bạn liên kết các mảng dữ liệu rời rạc để tạo ra bức tranh tổng thể hơn, mang lại cái nhìn 360 độ về các thực thể trong cơ sở dữ liệu của bạn.

5. Hành Trình Học SQL Của Bạn Chỉ Mới Bắt Đầu

Chúc mừng bạn! Bạn đã đi qua những viên gạch đầu tiên và quan trọng nhất trên con đường chinh phục SQL. Những kiến thức cơ bản về cấu trúc cơ sở dữ liệu, cùng với các lệnh SELECT, INSERT, UPDATE, DELETE, và các hàm tổng hợp, GROUP BY, HAVING, JOIN, chính là nền tảng vững chắc để bạn tiếp tục khám phá một thế giới dữ liệu rộng lớn và đầy tiềm năng.

SQL không chỉ là một tập hợp các cú pháp; nó là một công cụ tư duy, giúp bạn đặt câu hỏi một cách có cấu trúc và nhận được câu trả lời chính xác từ dữ liệu. Đây là một kỹ năng vô cùng linh hoạt và mạnh mẽ, nó sẽ mở ra nhiều cánh cửa trong sự nghiệp của bạn, dù bạn đang theo đuổi lĩnh vực phân tích dữ liệu, phát triển phần mềm, quản lý sản phẩm, hay thậm chí là kinh doanh và marketing. Khả năng truy vấn và hiểu dữ liệu là một lợi thế cạnh tranh khổng lồ trong thế giới hiện đại.

Vậy, làm thế nào để tiếp tục phát triển?

Hành trình học tập không bao giờ dừng lại. Để thực sự làm chủ SQL và biến nó thành một phần không thể thiếu trong bộ kỹ năng của bạn, hãy:

  • Thực hành liên tục: Kiến thức chỉ thực sự của bạn khi bạn áp dụng nó. Hãy tìm các bộ dữ liệu mẫu, tự tạo bảng, thêm dữ liệu và thực hiện các truy vấn của riêng bạn. Càng thực hành nhiều, bạn càng thành thạo.
  • Khám phá sâu hơn: Bài viết này chỉ là khởi đầu. SQL còn rất nhiều điều thú vị khác như các loại JOIN nâng cao (LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN), Subqueries (truy vấn con), Window Functions, Common Table Expressions (CTE), Stored Procedures, Views, Triggers, v.v. Mỗi khái niệm đều mở ra một khả năng mới để bạn xử lý dữ liệu.
  • Tham gia cộng đồng: Học hỏi từ người khác, đặt câu hỏi khi gặp khó khăn, và chia sẻ kinh nghiệm của bạn là cách tuyệt vời để tiến bộ nhanh chóng. Các diễn đàn trực tuyến, nhóm học tập là nguồn tài nguyên vô giá.
  • Thử thách bản thân: Đừng ngại đối mặt với những bài toán dữ liệu phức tạp hơn. Mỗi khi bạn giải quyết được một vấn đề khó, kiến thức và sự tự tin của bạn sẽ tăng lên đáng kể.

Tổng Kết

SQL không chỉ là một ngôn ngữ, đó là một tư duy. Tư duy về cách dữ liệu được tổ chức, cách thông tin được trích xuất và cách chúng ta có thể sử dụng dữ liệu để tạo ra giá trị. Tại TechData.AI, chúng tôi tự hào là người đồng hành cùng bạn trên hành trình này, cung cấp những kiến thức chuyên sâu nhưng luôn được trình bày một cách dễ hiểu, thực tế và đầy cảm hứng. Chúng tôi tin rằng bất kỳ ai cũng có thể làm chủ dữ liệu nếu có phương pháp và công cụ phù hợp.

Chúng tôi khuyến khích bạn tiếp tục tìm hiểu và thực hành ngay những kiến thức đã học hôm nay. Đừng để dữ liệu trở thành một kho báu bị khóa chặt. Hãy dùng SQL để mở khóa và khai thác giá trị thực sự của nó! Nếu bạn thấy bài viết này hữu ích, đừng ngần ngại chia sẻ nó với bạn bè và đồng nghiệp, những người cũng đang khao khát khám phá sức mạnh của dữ liệu. Và nếu bạn muốn đào sâu hơn, với lộ trình học tập bài bản và sự hỗ trợ tận tâm từ các chuyên gia, TechData.AI luôn sẵn lòng chào đón bạn. Hãy liên hệ với chúng tôi để tìm hiểu về các khóa học và tài nguyên chuyên biệt giúp bạn trở thành một chuyên gia dữ liệu thực thụ, tự tin làm chủ mọi thách thức trong thế giới công nghệ.

MagicFlow | TechData.AI

Scroll to Top