Trong chương trình đào tạo của FPT Polytechnic, MySQL và SQL Server là các bộ công cụ quan trọng được đưa vào 2 môn học bắt buộc là Cơ sở dữ liệu(CSDL) và Quản trị CSDL với SQL Server, tại đây sinh viên được học tập và làm việc với 2 ngôn ngữ phổ biến là SQL và T-SQL. Vậy SQL và T-SQL là gì? Chúng có gì khác nhau? Bài viết sau sẽ là câu trả lời trọn vẹn cho bạn nhé!
Định nghĩa và lịch sử
SQL (Structured Query Language)
- Được phát triển vào những năm 1970 bởi IBM và sau đó được ANSI chuẩn hóa vào năm 1986.
- SQL là ngôn ngữ tiêu chuẩn dùng để truy vấn, quản lý, và thao tác dữ liệu trên các DBMS như MySQL, PostgreSQL, Oracle.
T-SQL (Transact-SQL)
- Được Microsoft phát triển dựa trên SQL và tích hợp trong hệ quản trị cơ sở dữ liệu Microsoft SQL Server.
- Ra đời nhằm mở rộng khả năng của SQL bằng cách thêm các tính năng LẬP TRÌNH cho CSDL.
- T-SQL thường được sử dụng trong các ứng dụng doanh nghiệp nơi hiệu suất và khả năng lập trình phức tạp là cần thiết.
Tính năng
SQL
Cung cấp các câu lệnh cơ bản như:
- SELECT: Truy vấn dữ liệu.
- INSERT, UPDATE, DELETE: Thao tác dữ liệu.
- ..JOIN, GROUP BY, ORDER BY, WHERE, HAVING: Logic dữ liệu.
T-SQL:
Kế thừa toàn bộ tính năng của SQL và mở rộng thêm:
- Biến và biểu thức: Hỗ trợ khai báo biến (DECLARE), gán giá trị cho biến (SET hoặc SELECT).
- Cấu trúc điều kiện: IF…ELSE, CASE.
- Vòng lặp WHILE kết hợp với các lệnh nhảy BREAK, CONTINUE.
- Xử lý lỗi: TRY…CATCH. Trong điều kiện dữ liệu không phù hợp hoặc các trường hợp ngoại lệ, người lập trình có thể sử dụng cấu trúc try..catch để in ra thông báo cho người dùng, hoặc sử dụng những hàm thông báo lỗi có sẵn của T-SQL.
- Thủ tục (Stored Procedure): Có sẵn các thủ tục, hoặc lập trình viên có thể xây dựng thủ tục và chúng được lưu trữ vào hệ thống của Database.
- Hàm (Functions): Được xây dựng và tái sử dụng, hàm có thể trả về giá trị nguyên thủy hoặc trả về dạng bảng dữ liệu.
Một số ví dụ so sánh tính năng của SQL và T-SQL
Ví dụ 1: Giả sử ta có table Nhân viên, trong đó có cột Lương, hãy hiển thị những nhân viên có lương cao hơn mức lương trung bình?
Sử dụng truy vấn con (SubQuery) trong SQL:
Select * from NhanVien
Where luong > (select avg(luong) from NhanVien);
Sử dụng biến trong T-SQL:
Declare @AvgLuong int –Khai báo biến AvgLuong
Select @AvgLuong=avg(luong) from NhanVien–Gán giá trị cho biến
Select * from NhanVien
Where luong > @AvgLuong; –Sử dụng biến vào điều kiện where
Ví dụ 2: Giả sử có 2 table Phân công và Nhân viên như dưới đây. Hãy hiển thị nhân viên có Tổng thời gian làm việc tại các dự án lớn nhất?
Table phân công
Mã NV | Mã DA | Thời Gian | |||||||
001 | 20 | 15,3 | Table Nhân Viên | ||||||
001 | 30 | 20,5 | Mã NV | Tên NV | |||||
003 | 1 | 20 | 001 | Như | |||||
003 | 2 | 20 | 002 | The | |||||
004 | 3 | 40,7 | 003 | Tâm | KẾT QUẢ | ||||
005 | 3 | 10 | 004 | Hùng | Mã NV | Tên NV | TotalTime | ||
005 | 10 | 10 | 005 | Tùng | 009 | Tiên | 41,4 | ||
005 | 20 | 10 | 006 | Vinh | |||||
006 | 20 | 30 | 007 | Hành | |||||
007 | 10 | 10,7 | 008 | Quang | |||||
007 | 30 | 30 | 009 | Tiên | |||||
008 | 10 | 35,2 | 017 | Tiên | |||||
008 | 30 | 5 | |||||||
009 | 1 | 32,5 | |||||||
009 | 2 | 8,9 |
–câu lệnh SQL:
SELECT MaNV, TenNV, sum(ThoiGian) ‘TotalTime’
FROM NhanVien nv inner join PhanCong pc on nv.MaNV=pc.Ma_NVien
GROUP BY MaNV, TenNV
HAVING sum(ThoiGian) <= all (Select sum(ThoiGian)
From PhanCong
Group by Ma_NVien);
–và T-SQL:
DECLARE @MaxTime FLOAT
SELECT @MaxTime= sum(ThoiGian) From PhanCong Group by Ma_Nvien
SELECT MaNV, TenNV, sum(ThoiGian) ‘TotalTime’
FROM NhanVien nv inner join PhanCong pc on nv.MANV=pc.Ma_NVien
GROUP BY MaNV, TenNV
HAVING sum(ThoiGian) = @MaxTime
Ứng dụng
SQL: Được dùng để truy vấn và thao tác dữ liệu trên nhiều hệ quản trị cơ sở dữ liệu khác nhau.
T-SQL: Được sử dụng trong hệ sinh thái của Microsoft. Phù hợp với các bài toán phức tạp cần xử lý tích hợp, nghiệp vụ logic ngay trong cơ sở dữ liệu thay vì phải lập trình trên các IDE bằng ngôn ngữ lập trình khác (chủ đề này sẽ được thảo luận trong bài viết sau).
Hiệu suất
SQL: Hiệu suất chủ yếu phụ thuộc vào cấu trúc cơ sở dữ liệu và cách viết truy vấn. Đối với các tác vụ phức tạp, SQL thường cần kết hợp với ứng dụng bên ngoài để xử lý, dẫn đến hiệu suất thấp hơn.
T-SQL: Hỗ trợ thực thi song song bởi SQL Server và IDE.
Trong SQL và T-SQL chúng ta có thể gọi các hàm của hệ thống như SUM, AVG, COUNT…Tuy nhiên T-SQL còn có thể cho phép Lập trình viên viết hàm và sử dụng hàm với kiểu trả về là một table ngày trong DBMS, khi đó ứng dụng có thể gọi đến hàm đã được định nghĩa và lưu trữ trong SQL Server, sau đây là một ví dụ:
–Viết hàm trả về bảng các nhân viên của một phòng ban
Create or Alter Function Fn_NhanVien_PB (@MaPB int)
Returns Table
As
Return
(
Select * from NhanVien
where PHG = @MaPB
)
— Gọi hàm vừa tạo với tham trị là Mã phòng ban ‘005’
select * from Fn_NhanVien_PB(5)
Tính mở rộng
SQL: Được hỗ trợ bởi hầu hết các hệ quản trị cơ sở dữ liệu, nên dễ dàng chuyển đổi giữa các nền tảng.
T-SQL: Chỉ có trên SQL Server và các dịch vụ liên quan của Microsoft như Azure, nên không thể mở rộng trên các DBMS khác.
Bảng so sánh SQL và T-SQL dưới đây giúp chúng ta có cái nhìn tổng thể hơn:
Tiêu chí | SQL (Structured Query Language) | T-SQL (Transact-SQL) |
---|---|---|
Định nghĩa | Ngôn ngữ truy vấn dữ liệu chuẩn. | Phần mở rộng của SQL, được phát triển bởi Microsoft. |
Phạm vi sử dụng | Dùng trong nhiều hệ quản trị CSDL như MySQL, PostgreSQL, Oracle, SQLite. | Chỉ hoạt động trên Microsoft SQL Server và Azure SQL Database. |
Mục đích chính | Quản trị CSDL. | Quản trị CSDL, xử lý logic phức tạp và lập trình thủ tục. |
Chức năng chính | – Truy vấn dữ liệu – Thao tác dữ liệu. |
– Bao gồm tất cả chức năng của SQL. – Mở rộng với Biến, Cấu trúc, Thủ tục(PROCEDURE) và Hàm (FUNCTION). |
Tiêu chuẩn hóa | Tuân theo chuẩn quốc tế ANSI/ISO. | Không phải chuẩn quốc tế, là đặc trưng của Microsoft. |
Lập trình | Không hỗ trợ. | Hỗ trợ đầy đủ cấu trúc lập trình như: WHILE, IF…ELSE, CASE. |
Xử lý ngoại lệ | Không hỗ trợ. | Hỗ trợ xử lý lỗi với TRY…CATCH. |
Giao dịch (Transaction) | Hỗ trợ giao dịch cơ bản thông qua câu lệnh BEGIN TRANSACTION, COMMIT, ROLLBACK. | Mở rộng giao dịch phức tạp với kiểm soát giao dịch và xử lý lỗi. |
Tích hợp XML/JSON | Giới hạn, không có tính năng tích hợp mạnh mẽ. | Hỗ trợ mạnh mẽ xử lý XML và JSON trực tiếp. |
Tính năng bảo mật | Không hỗ trợ. | Hỗ trợ bảo mật nâng cao như mã hóa dữ liệu, quyền người dùng. |
Tính năng bổ sung | Không có tính năng bổ sung. | Giao dịch, khóa bảng (LOCK TABLE). |
Tính linh hoạt | Chỉ giới hạn trong việc truy vấn và thao tác dữ liệu. | Hỗ trợ lập trình ngay trong CSDL. |
Kết luận
Tóm lại, việc lựa chọn giữa hai ngôn ngữ này phụ thuộc vào nhu cầu cụ thể của dự án và môi trường làm việc, nếu bạn cần một ngôn ngữ chung cho nhiều hệ quản trị cơ sở dữ liệu, SQL sẽ là sự lựa chọn hợp lý. Ngược lại, T-SQL mở rộng khả năng của SQL với các tính năng lập trình như hàm, thủ tục được tích hợp sâu trong DBMS, nên T-SQL của Microsoft SQL Server phù hợp cho các dự án lớn và phức tạp.
Giảng viên Trần Thế Bảy
Bộ môn Ứng dụng phần mềm
FPT Polytechnic TP HCM