Trang chủ>  Blog >  Tin tức >  Tìm hiểu hàm Function trong SQL chi tiết nhất

Tìm hiểu hàm Function trong SQL chi tiết nhất


Tìm hiểu chi tiết function trong SQL: cách tạo, gọi, sửa và ứng dụng trong xử lý truy vấn, phân tích dữ liệu hiệu quả kèm ví dụ minh họa dễ hiểu.

  302 lượt xem

Nội dung bài viết

Khi bắt đầu làm việc với cơ sở dữ liệu, bạn sẽ sớm nhận ra rằng việc xử lý dữ liệu hiệu quả không chỉ dựa vào câu lệnh SELECT. Một công cụ quan trọng giúp bạn tối ưu truy vấn, tổ chức logic và tái sử dụng mã là hàm function trong SQL. Bài viết này sẽ giúp bạn hiểu rõ khái niệm, cách sử dụng, và ứng dụng thực tiễn của loại hàm này trong SQL. Hãy cùng theo dõi nhé. 

Hàm Function trong SQL là gì?

Trong SQL, function là một tập hợp câu lệnh được viết để thực hiện một nhiệm vụ xác định, có thể do hệ thống cung cấp sẵn hoặc do người dùng tự tạo. Các hàm này được lưu trữ trong cơ sở dữ liệu và có thể được gọi đến bất cứ khi nào cần sử dụng. Kết quả trả về từ hàm có thể là một giá trị đơn lẻ (như một con số, chuỗi…) hoặc một tập hợp dữ liệu dưới dạng bảng, tùy vào loại hàm được sử dụng.

hàm function trong sql là gì

Phân loại các loại hàm trong SQL

Trong SQL, các hàm được chia thành hai nhóm chính dựa trên cách chúng được xây dựng và sử dụng: hàm tích hợp sẵn và hàm do người dùng tự định nghĩa. Mỗi nhóm phục vụ những mục đích riêng và có tính ứng dụng cao trong xử lý dữ liệu.

1. Hàm hệ thống (Built-in/System Functions)

Đây là những hàm được cung cấp mặc định bởi hệ quản trị cơ sở dữ liệu (DBMS), cho phép bạn thực hiện các thao tác xử lý phổ biến một cách nhanh chóng mà không cần tự viết lại. Một số nhóm hàm hệ thống phổ biến bao gồm:

  • Hàm tính toán: Dùng để tổng hợp dữ liệu số, ví dụ như SUM(), AVG(), MIN(), MAX(), COUNT().
  • Hàm xử lý chuỗi: Hỗ trợ thao tác với dữ liệu dạng văn bản như LEN(), SUBSTRING(), REPLACE(), TRIM().
  • Hàm ngày giờ: Dùng để làm việc với dữ liệu thời gian như GETDATE(), DATEDIFF(), DATEADD(), FORMAT().
  • Hàm chuyển đổi kiểu dữ liệu: Ví dụ CAST(), CONVERT() giúp thay đổi định dạng dữ liệu.

Các hàm này có thể được gọi trực tiếp trong câu lệnh SQL mà không cần khai báo trước, cực kỳ tiện lợi và tối ưu hóa sẵn bởi hệ thống.

2. Hàm do người dùng tự định nghĩa (User-Defined Functions - UDF)

Khi các hàm hệ thống không đáp ứng đủ nhu cầu xử lý dữ liệu phức tạp, người dùng có thể tự xây dựng hàm của riêng mình. Những hàm này giúp đóng gói logic nghiệp vụ, tái sử dụng và làm cho mã truy vấn trở nên gọn gàng, nhất quán hơn.

Các hàm do người dùng định nghĩa được phân chia thành ba loại chính:

Hàm đơn trị (Scalar Function): Đây là loại function trả về một giá trị duy nhất — có thể là số, chuỗi, hoặc ngày giờ. Chúng thường được sử dụng trong phần SELECT, WHERE, hoặc ORDER BY.

Ví dụ: Hàm dbo.GetDiscountRate(@CustomerID) trả về phần trăm chiết khấu tương ứng với một khách hàng cụ thể.

Hàm bảng (Table-Valued Function - TVF): Khác với scalar function, loại hàm này trả về một bảng dữ liệu, cho phép bạn sử dụng chúng như một bảng con trong các truy vấn.

TVF lại được chia thành hai dạng cụ thể:

  • Inline Table-Valued Function: Được viết gọn trong một dòng với một câu lệnh SELECT. Loại này có hiệu suất cao vì dễ được tối ưu hóa bởi hệ thống.
    Ví dụ: Hàm trả về danh sách đơn hàng trong 30 ngày gần nhất.
  • Multi-Statement Table-Valued Function: Linh hoạt hơn, cho phép khai báo biến, dùng nhiều câu lệnh xử lý trung gian trước khi trả về bảng kết quả. Phù hợp với các bài toán nghiệp vụ phức tạp.

hàm UDF

Xem thêm: Top 5 các câu lệnh sql dùng phổ biến cho bạn tham khảo

Chức năng chính của hàm function trong SQL

1. Thực hiện các phép toán và tính toán phức tạp

Một trong những chức năng nổi bật nhất của hàm function trong SQL là khả năng thực hiện các phép toán từ đơn giản đến phức tạp. Ví dụ:

  • Tính tổng doanh thu với SUM()
  • Tính trung bình điểm với AVG()
  • Đếm số lượng bản ghi với COUNT()
  • Tính độ lệch chuẩn với STDEV()
  • Làm tròn số với ROUND()
  • Xử lý thời gian với DATEDIFF(), GETDATE()

Các hàm này giúp truy vấn dữ liệu theo cách chính xác và nhanh chóng, thay vì phải viết logic tính toán thủ công.

2. Xử lý và biến đổi dữ liệu hiệu quả

Hàm SQL còn được dùng để xử lý và biến đổi dữ liệu trong quá trình truy vấn:

  • Lọc dữ liệu: Sử dụng kết hợp hàm và mệnh đề WHERE để lọc bản ghi thỏa mãn điều kiện.
  • Chuyển đổi dữ liệu: Dùng các hàm như CAST(), CONVERT() để thay đổi kiểu dữ liệu.
  • Xử lý chuỗi: Các hàm như LEFT(), RIGHT(), LEN(), REPLACE(), SUBSTRING() giúp thao tác linh hoạt với dữ liệu dạng văn bản.
  • Sắp xếp và chuẩn hóa dữ liệu: Ví dụ, dùng LOWER() hoặc UPPER() để đồng nhất văn bản khi so sánh.

Việc xử lý dữ liệu thông qua function giúp tiết kiệm thời gian và tăng độ chính xác trong báo cáo, phân tích.

3. Tái sử dụng mã – Giảm thiểu trùng lặp

Khi bạn cần thực hiện cùng một phép tính hoặc kiểm tra nhiều lần trong nhiều truy vấn khác nhau, việc viết lại đoạn mã đó rất mất thời gian và dễ sai sót. Với hàm function trong SQL, bạn có thể đóng gói logic một lần, sau đó gọi lại khi cần.

Ví dụ:
Một hàm tính phần trăm chiết khấu (calculate_discount) có thể dùng được trong cả truy vấn báo cáo bán hàng, phân tích khách hàng, và lập kế hoạch khuyến mãi.

Điều này không chỉ giúp tiết kiệm thời gian phát triển mà còn đảm bảo tính nhất quán trong hệ thống dữ liệu.

Gợi ý: Tạo bảng trong SQL đơn giản, nhanh chóng chỉ với 10 phút

4. Cải thiện hiệu suất truy vấn

Một số function trong SQL — đặc biệt là các hàm do người dùng định nghĩa (UDF) — được biên dịch sẵn và lưu trữ trên hệ thống. Điều này giúp rút ngắn thời gian thực thi so với việc xử lý lại cùng một đoạn logic nhiều lần.

Ngoài ra:

  • Các hàm scalar đơn giản thường được thực hiện rất nhanh và hiệu quả khi viết đúng cách.
  • Trong môi trường cơ sở dữ liệu lớn, function giúp tổ chức và tối ưu hóa code để hệ quản trị (ví dụ SQL Server, MySQL, PostgreSQL) dễ dàng thực hiện các tối ưu hóa truy vấn.

Cải thiện hiệu suất truy vấn

Cách gọi function trong SQL Server

Sau khi bạn đã tạo một function trong SQL Server, bạn có thể gọi hàm này trong nhiều ngữ cảnh khác nhau, tùy theo loại function là scalar hay table-valued.

Đối với Scalar Function (trả về một giá trị đơn):

Bạn có thể sử dụng scalar function như một phần trong câu lệnh SELECT, tương tự như cách gọi các hàm hệ thống.

Cú pháp: SELECT dbo.TenHam(@thamso1, @thamso2);

Ví dụ: SELECT dbo.TinhTongDiem(85, 90) AS TongDiem;

Bạn cũng có thể dùng hàm này trong WHERE, ORDER BY, hoặc các biểu thức logic khác.

Đối với Table-Valued Function (trả về bảng dữ liệu):

Khi gọi table-valued function, bạn phải sử dụng trong mệnh đề FROM như một bảng con.

Cú pháp:

SELECT *

FROM dbo.TenHam(@thamso1)

Ví dụ:

SELECT *

FROM dbo.LayDonHangTheoNgay('2024-01-01')

Lưu ý: Nếu là inline TVF, bạn có thể JOIN trực tiếp với các bảng khác. Với multi-statement TVF, cần kiểm tra kỹ các ràng buộc và hiệu suất.

Sửa function trong SQL Server

Khi cần thay đổi nội dung logic bên trong một function trong SQL Server, bạn phải sử dụng câu lệnh ALTER FUNCTION.

Cú pháp:

ALTER FUNCTION dbo.TenHam (@thamso1 datatype, ...)

RETURNS datatype

AS

BEGIN

    -- nội dung mới

END

Ví dụ:

ALTER FUNCTION dbo.TinhTongDiem (@diem1 INT, @diem2 INT)

RETURNS INT

AS

BEGIN

    RETURN (@diem1 + @diem2 + 5) -- thêm điểm thưởng

END

Lưu ý: Nếu bạn đang sử dụng SSMS (SQL Server Management Studio), bạn có thể chuột phải vào hàm cần sửa trong thư mục “Functions” → Chọn Modify, hệ thống sẽ mở khung ALTER FUNCTION sẵn cho bạn chỉnh sửa.

Xóa function trong SQL Server

Khi một hàm không còn cần thiết hoặc đã lỗi thời, bạn có thể xóa function khỏi cơ sở dữ liệu bằng câu lệnh DROP FUNCTION.

Cú pháp: DROP FUNCTION dbo.TenHam;

Ví dụ: DROP FUNCTION dbo.TinhTongDiem;

Lưu ý quan trọng: Trước khi xóa, hãy đảm bảo không có truy vấn, thủ tục, hay báo cáo nào còn đang sử dụng hàm đó. Nếu không, hệ thống sẽ báo lỗi hoặc ảnh hưởng đến logic xử lý dữ liệu.

xóa hàm function

Xem thêm:

Ứng dụng của hàm Function trong thực tế

Tăng hiệu suất xử lý truy vấn

Một trong những lợi ích quan trọng của function trong SQL là khả năng cải thiện hiệu suất truy vấn, đặc biệt khi bạn làm việc với khối lượng dữ liệu lớn. Thay vì viết lại cùng một logic xử lý nhiều lần trong các truy vấn, bạn có thể đóng gói nó trong một function, giúp truy vấn ngắn gọn hơn và dễ tối ưu hóa hơn.

Ví dụ: Nếu bạn thường xuyên tính toán tỷ lệ phần trăm chiết khấu dựa trên hạng khách hàng, bạn có thể viết một scalar function và gọi lại nhiều lần mà không phải sao chép logic trong từng câu lệnh SELECT.

Ngoài ra, các function khi được lưu trữ và biên dịch sẵn (đặc biệt là với inline table-valued function) có thể giúp hệ quản trị cơ sở dữ liệu như SQL Server tận dụng tốt bộ tối ưu hóa truy vấn, từ đó giảm đáng kể thời gian xử lý.

Tái sử dụng logic tính toán

Trong các hệ thống lớn, việc viết lại cùng một công thức hoặc logic xử lý ở nhiều nơi không chỉ làm mất thời gian mà còn dễ gây ra lỗi không nhất quán. Với hàm do người dùng định nghĩa trong SQL, bạn có thể tạo ra một chuẩn chung cho logic tính toán và gọi lại bất kỳ lúc nào.

Ví dụ:

  • Hàm tính điểm trung bình học sinh
  • Hàm chuẩn hóa chuỗi văn bản
  • Hàm kiểm tra định dạng email hoặc số điện thoại

Việc tái sử dụng hàm giúp chuẩn hóa cách xử lý dữ liệu trong toàn bộ hệ thống, đồng thời giảm công sức bảo trì trong tương lai.

Tối ưu báo cáo, phân tích dữ liệu

Các function trong SQL rất hữu ích khi bạn làm việc với báo cáo hoặc xây dựng dashboard phân tích dữ liệu. Thay vì phải viết lại các phép tính phức tạp trong từng câu truy vấn báo cáo, bạn có thể dùng function để chuẩn hóa logic và đảm bảo kết quả đầu ra luôn nhất quán.

Ví dụ:

  • Hàm xác định phân khúc khách hàng theo doanh thu
  • Hàm tính điểm tín dụng dựa trên nhiều tiêu chí
  • Hàm phân loại độ rủi ro trong hệ thống tài chính

Những sai lầm thường gặp khi dùng Function trong SQL

Viết function lặp lại logic đã có

Nhiều người dùng SQL mới thường có thói quen viết function để xử lý một logic đơn giản đã được hỗ trợ sẵn bởi các hàm hệ thống. Điều này không chỉ gây dư thừa mã, mà còn có thể làm giảm hiệu suất do function do người dùng định nghĩa thường không được tối ưu tốt như các hàm hệ thống.

Ví dụ lỗi phổ biến: Tạo hàm tính tổng thay vì dùng SUM().

Giải pháp: Trước khi viết function mới, hãy kiểm tra kỹ xem SQL Server có sẵn hàm xử lý tương tự hay không.

Lạm dụng function trong SELECT

Một lỗi thường gặp khác là sử dụng quá nhiều function trong phần SELECT hoặc gọi function lặp đi lặp lại trong truy vấn. Điều này có thể dẫn đến hiệu suất suy giảm đáng kể, đặc biệt khi truy vấn chạy trên bảng dữ liệu lớn.

Ví dụ: Gọi hàm tính chiết khấu riêng cho từng dòng trong bảng chứa hàng chục nghìn bản ghi.

Giải pháp: Chỉ nên sử dụng function khi thực sự cần thiết và kiểm tra hiệu suất truy vấn sau khi áp dụng.

Quên xử lý lỗi hoặc giá trị NULL

Nhiều function trong SQL không được kiểm tra kỹ giá trị đầu vào, đặc biệt là khi có khả năng nhận giá trị NULL. Điều này có thể khiến kết quả trả về sai hoặc truy vấn bị lỗi.

Ví dụ lỗi phổ biến:

RETURN (@diem1 + @diem2)

→ Nếu @diem1 là NULL thì kết quả là NULL, dù @diem2 có giá trị.

 Giải pháp: Luôn dùng ISNULL() hoặc COALESCE() để kiểm soát đầu vào trong function:

RETURN (ISNULL(@diem1, 0) + ISNULL(@diem2, 0))

quên xử lý lỗi hoặc giá trị null

Hiểu và sử dụng thành thạo function trong SQL không chỉ giúp bạn viết truy vấn ngắn gọn, hiệu quả mà còn hỗ trợ rất nhiều trong việc phân tích và xử lý dữ liệu ở cấp độ cao hơn. Dù bạn là sinh viên IT, chuyên viên dữ liệu hay lập trình viên backend, việc nắm vững các loại hàm và cách triển khai chúng sẽ là một lợi thế lớn trong công việc. Hãy bắt đầu áp dụng ngay hôm nay để thấy sự khác biệt!

Chương trình đào tạo: Phân tích dữ liệu, Khoa học dữ liệu, Kĩ sư dữ liệu, Lập trình ứng dụng.
Chất lượng nhất - Uy tín nhất - Nhiều học viên tin tưởng nhất
Hơn 8000 học viên ưu tú đã tốt nghiệp
Đăng ký tư vấn khóa học

*Vui lòng nhập số điện thoại của bạn

*Vui lòng nhập họ tên của bạn

*Vui lòng chọn địa điểm học

*Vui lòng chọn giới tính

*Vui lòng chọn 1 trường


Các bài viết liên quan


Các bài viết liên quan