SQL (Structured Query Language) là ngôn ngữ lập trình chuyên biệt được chuẩn hóa để dùng cho quản trị cơ sở dữ liệu quan hệ và thực hiện các thao tác trên dữ liệu. SQL có nhiều 용도, bao gồm: sửa đổi cấu trúc bảng và chỉ mục; thêm, cập nhật, xóa hàng dữ liệu; và truy xuất các tập con thông tin từ cơ sở dữ liệu cho xử lý giao dịch và ứng dụng phân tích. Có các truy vấn và thao tác chuyên biệt hoạt động dưới dạng lệnh, thường gọi là các câu lệnh SQL như select, add, insert, update, delete, create, alter, truncate.
SQL trở thành ngôn ngữ lập trình tiêu chuẩn cho cơ sở dữ liệu quan hệ sau khi chúng xuất hiện vào cuối những năm 1970 và đầu những năm 1980. Thường gọi là cơ sở dữ liệu SQL, các hệ thống quan hệ bao gồm một tập hợp bảng chứa dữ liệu dưới dạng hàng và cột, nơi mỗi cột trong bảng tương ứng với một danh mục dữ liệu, ví dụ: tên khách hàng hoặc địa chỉ, và mỗi hàng chứa giá trị dữ liệu cho cột giao nhau đó.
SQL cũng là ngôn ngữ chuyên miền (domain-specific language) dùng cho lập trình và thiết kế dữ liệu trong hệ quản trị cơ sở dữ liệu quan hệ (RDBMS). Nó đặc biệt hữu ích trong xử lý dữ liệu có cấu trúc nơi có quan hệ giữa các thực thể/biến khác nhau của dữ liệu.
SQL dựa trên đại số quan hệ và phép tính tuple quan hệ. SQL bao gồm nhiều loại câu lệnh, thường gọi là: ngôn ngữ truy vấn dữ liệu (DQL), ngôn ngữ định nghĩa dữ liệu (DDL), ngôn ngữ điều khiển dữ liệu (DCL), và ngôn ngữ thao tác dữ liệu (DML). Phạm vi SQL bao gồm: truy vấn dữ liệu, thao tác dữ liệu (insert, update, delete), định nghĩa dữ liệu (tạo/sửa schema), và kiểm soát truy cập dữ liệu. SQL cũng được mô tả là ngôn ngữ khai báo (4GL) vì nó cũng bao gồm các yếu tố thủ tục.
Ứng dụng của SQL
Có nhiều ứng dụng của SQL:
- 1. Scripts tích hợp dữ liệu (Data Integration Scripts): Ứng dụng chính của SQL là viết scripts tích hợp dữ liệu bởi quản trị viên cơ sở dữ liệu và nhà phát triển.
- 2. Truy vấn phân tích (Analytical Queries): Nhà phân tích dữ liệu dùng SQL để thiết lập và chạy truy vấn phân tích định kỳ.
- 3. Truy xuất thông tin (Retrieve Information): Ứng dụng phổ biến khác là truy xuất tập con thông tin trong cơ sở dữ liệu cho ứng dụng phân tích và xử lý giao dịch. Các yếu tố SQL thường dùng: select, insert, update, add, delete, create, truncate, alter.
- 4. Các ứng dụng quan trọng khác: SQL dùng để sửa đổi cấu trúc chỉ mục và bảng. Ngoài ra, người dùng có thể thêm, cập nhật, xóa hàng dữ liệu bằng ngôn ngữ này.
Tiêu chuẩn SQL và phần mở rộng độc quyền
Một tiêu chuẩn SQL chính thức được chấp nhận bởi Viện Tiêu chuẩn Quốc gia Mỹ (ANSI) năm 1986 và sau đó bởi Tổ chức Tiêu chuẩn hóa Quốc tế (ISO) năm 1987. SQL thường xuyên được dùng bởi quản trị viên cơ sở dữ liệu, cũng như nhà phát triển viết scripts tích hợp dữ liệu và nhà phân tích dữ liệu thiết lập và chạy truy vấn phân tích.
Cả RDBMS độc quyền và mã nguồn mở xây dựng quanh SQL đều có sẵn cho tổ chức sử dụng. Chúng bao gồm: Microsoft SQL Server, Oracle Database, IBM DB2, SAP HANA, SAP Adaptive Server, MySQL (nay thuộc Oracle) và PostgreSQL.
Tuy nhiên, nhiều sản phẩm cơ sở dữ liệu này hỗ trợ SQL với các phần mở rộng độc quyền cho ngôn ngữ tiêu chuẩn để lập trình thủ tục và các chức năng khác. Ví dụ: Microsoft cung cấp tập mở rộng Transact-SQL (T-SQL), trong khi phiên bản mở rộng của Oracle là PL/SQL. Kết quả là, các biến thể SQL của các nhà cung cấp không hoàn toàn tương thích với nhau.
Lệnh và cú pháp SQL
Các lệnh SQL được chia thành vài loại khác nhau, như ngôn ngữ thao tác dữ liệu (DML) và ngôn ngữ định nghĩa dữ liệu (DDL), điều khiển giao dịch, và biện pháp bảo mật.
- DML dùng để truy xuất và thao tác dữ liệu.
- DDL dùng để định nghĩa và sửa đổi cấu trúc cơ sở dữ liệu.
- Điều khiển giao dịch giúp quản lý xử lý giao dịch, đảm bảo giao dịch hoàn thành hoặc rollback nếu có lỗi.
- Câu lệnh bảo mật dùng để kiểm soát truy cập cơ sở dữ liệu cũng như tạo vai trò và quyền người dùng.
Ngôn ngữ SQL được chia nhỏ thành các yếu tố ngôn ngữ, bao gồm:
- Mệnh đề (Clauses), là thành phần cấu thành của câu lệnh và truy vấn.
- Biểu thức (Expressions), có thể có giá trị vô hướng, hoặc bảng gồm cột và hàng dữ liệu.
- Lệnh từ (Predicates) dùng để chỉ định điều kiện có thể đánh giá thành logic ba giá trị của SQL (3VL) (true/false/unknown) hoặc giá trị Boolean (true/false) và dùng để giới hạn hiệu lực của câu lệnh/truy vấn, hoặc thay đổi luồng chương trình.
- Truy vấn (Queries) dùng để truy xuất dữ liệu dựa trên tiêu chí cụ thể.
- Câu lệnh (Statements), có thể có hiệu lực bền vững trên schema và dữ liệu, hoặc kiểm soát giao dịch, luồng chương trình, kết nối, phiên, hoặc chẩn đoán.
- Câu lệnh SQL cũng bao gồm ký tự chấm phẩy (";") kết thúc câu lệnh.
- Khoảng trắng không quan trọng (Insignificant whitespace) thường bị bỏ qua trong câu lệnh và truy vấn SQL, giúp dễ dàng định dạng mã SQL để đọc dễ dàng.
Tính tương thích và tiêu chuẩn hóa
Các triển khai SQL không tương thích giữa các nhà cung cấp và không tuân theo tất cả tiêu chuẩn. Đặc biệt cú pháp ngày/giờ, nối chuỗi, NULL, và so sánh phân biệt chữ hoa/thường khác nhau giữa các vendor. Do đó, mã SQL hiếm khi có thể chuyển đổi giữa các hệ thống cơ sở dữ liệu mà không cần sửa đổi.
Có một số lý do cho vấn đề khả năng chuyển đổi giữa hệ thống cơ sở dữ liệu:
- Độ phức tạp và kích thước tiêu chuẩn SQL khiến hầu hết nhà triển khai không hỗ trợ toàn bộ tiêu chuẩn.
- Tiêu chuẩn không chỉ định hành vi cơ sở dữ liệu trong một số lĩnh vực quan trọng (ví dụ: chỉ mục, lưu trữ tệp...), để nhà triển khai quyết định cách xử lý.
- Tiêu chuẩn SQL chỉ định chính xác cú pháp mà hệ thống cơ sở dữ liệu tuân thủ phải triển khai. Tuy nhiên, đặc tả ngữ nghĩa của các cấu trúc ngôn ngữ ít được định nghĩa rõ ràng, dẫn đến sự mơ hồ.
- Nhiều vendor cơ sở dữ liệu có cơ sở khách hàng lớn hiện có; khi phiên bản mới của tiêu chuẩn SQL xung đột với hành vi trước đó của cơ sở dữ liệu vendor, vendor có thể không muốn phá vỡ tương thích ngược.
- Ít động lực thương mại để vendor làm cho người dùng dễ dàng thay đổi nhà cung cấp cơ sở dữ liệu (xem vendor lock-in).
- Người dùng đánh giá phần mềm cơ sở dữ liệu thường ưu tiên các yếu tố như hiệu năng cao hơn tuân thủ tiêu chuẩn.
Ưu điểm của SQL
- Truy vấn SQL có thể dùng để truy xuất lượng lớn bản ghi từ cơ sở dữ liệu nhanh chóng và hiệu quả.
- SQL dùng để xem dữ liệu mà không lưu trữ dữ liệu trong đối tượng.
- SQL nối hai hoặc nhiều bảng và hiển thị như một đối tượng cho người dùng.
- Cơ sở dữ liệu SQL sử dụng tiêu chuẩn lâu đời, được ANSI & ISO áp dụng. Cơ sở dữ liệu Non-SQL không tuân theo tiêu chuẩn rõ ràng nào.
- Sử dụng SQL tiêu chuẩn giúp dễ dàng quản trị hệ thống cơ sở dữ liệu mà không phải viết lượng lớn mã.
- SQL hạn chế truy cập bảng để không ai có thể chèn hàng vào bảng.
- Trước đây SQL database đồng nghĩa với cơ sở dữ liệu quan hệ. Với sự xuất hiện của OODBMS, khả năng lưu trữ đối tượng được mở rộng cho cơ sở dữ liệu quan hệ.
Nhược điểm của SQL
- Giao tiếp với cơ sở dữ liệu SQL phức tạp hơn thêm vài dòng mã.
- Khi bảng bị xóa, view trở nên không hoạt động. Nó phụ thuộc vào đối tượng bảng.
- Mặc dù cơ sở dữ liệu SQL tuân theo tiêu chuẩn ANSI & ISO, một số cơ sở dữ liệu dùng phần mở rộng độc quyền cho SQL tiêu chuẩn để đảm bảo vendor lock-in.
- Nó là một đối tượng nên chiếm dụng không gian.