Ngôn ngữ SQL được phát triển từ ngôn ngữ SEQUEL-2, thử nghiệm và cài đặt tại Trung tâm nghiên cứu của hãng IBM ở San Jose, California cho hệ thống QTCSDL lớn điển hình là System -R. Trong System -R, SQL vừa đóng vai trò là một ngôn ngữ có thể thao tác độc lập của người sử dụng đầu cuối, đồng thời lại có khả năng là một ngôn ngữ con được nhúng trong ngôn ngữ chủ PL/1.
Khác với ngôn ngữ đại số quan hệ, là ngôn ngữ dựa trên các phép toán của đại số quan hệ. SQL là một ngôn ngữ phi thủ tục, chuẩn mực và điển hình. DO vậy hiện nay rất nhiều sản phẩm phần mềm thương mại đều được cài đặt SQL như Access, SQL Server, DB2, Oracle,...
Phép toán cơ bản trong SQL là phép ánh xạ được miêu tả như một khối SELECT - FROM - WHERE. Trong phần sau, các mệnh đề của ngôn ngữ SQL sẽ được trình bầy chi tiết bằng các ví dụ.
Các thuật ngữ trong CSDL quan hệ như quan hệ, thuộc tính, bộ,... sẽ được thay bằng các thuật ngữ như bảng (table), cột (colum), bản ghi (record) hoặc hàng (row). 2. Các mệnh đề của ngôn ngữ SQL
2.1. Tạo bảng
Mệnh đề tạo bảng tạo một bảng quan hệ mới thông quan tên bảng, xác định các thuộc tính và các ràng buộc logic của bảng.
Mệnh đề tạo bảng có dạng tổng quát như sau:
Trong đó:
tên bảng: là xâu kí tự bất kì không có ký hiệu trống và không trùng với các từ khoá.
tên cột: là xâu kí tự bất kì không chứa ký hiệu trống,trong một bảng tên cột là duy nhất. Thứ tự của cột trong bảng là không quan trọng.
kiểu dữ liệu: trong mệnh đề tạo bảng dùng một số kiểu dữ liệu sau: - integer: kiểu số nguyên, từ - 2.147.483.648 đến - 2.147.483.647 - smallinteger: số nguyên nhỏ từ -32.768 đến 32.767
- decimal (n,p): số thập phân với độ dài tối đa là n kể cả p chữ số phần thập phân (không tính dấu chấm thập phân).
- char(n): xâu kí tự có độ dài cố định n. Một số HQTCSDL cho phép kích thước tối đa của char là 2000 bytes. Nếu mỗi kí tự tương ứng một byte (mã ASCII như đối với hệ QTCSDL Access) thì số kí tự tối đa là 2000. Trong trường hợp sử dụng bộ mã UCS2 (như đối với hệ QTCSDL SQL Server) thì số kí tự biểu diễn tối đã là 1000 kí tự (sử dụng 2 byte để biểu diễn 1 kí tự).
- varchar(n): xâu kí tự có độ dài biến đổi, độ dài xâu có thể từ 0 đến n và được xác định tại thời điểm đưa giữ liệu vào lưu trữ. . Một số HQTCSDL cho phép kích thước tối đa của char là 4000 bytes.
- date: dữ liệu dạng ngày tháng, định dạng ngầm định: DD - MON - YY. - Ngoài ra mỗi hệ QTCSDL cũng đưa ra các kiểu dữ liệu riêng.
NULL là giá trị ngầm định khi không biết chính xác giá trị. Do đó cột đóng vai trò khoá chính không được nhận giá trị NULL, các cột khác có thể tuỳ chọn.
Ví dụ 2.1: Cho CSDL gồm 3 bảng S (Supplier),P (Part) và SP như sau:
S (S#, SNAME, STATUS, CITY) : các hãng cung ứng, với S# là khoá chính P (P#, PNAME, COLOR, WEIGHT, CITY) : các mặt hàng, P# là khoá chính SP(S#, P#, QTY,SDATE) : các mặt hàng đã cung cấp.
Tạo bảng S:
Hình 9 - Cấu trúc lệnh tạo bảng nhà cung cấp Tạo bảng P:
Nhận xét:
Trong mệnh đề tạo bảng có thể sử dụng thêm các yếu tố ràng buộc để hạn chế các giá trị cho một hay nhiều cột trong bảng, như: ràng buộc khoá chính, khoá ngoài, ràng buộc toàn vẹn tham chiếu, ràng buộc miền giá trị tương ứng như sau:
• NULL: cột có thể không chứa giá trị. • NOT NULL: cột phải chứa một giá trị nào đó • PRIMARY KEY: ràng buộc khoá chính • REFERENCE: ràng buộc khoá ngoài
• ON DELETE CASCADE: ràng buộc toàn vẹn tham chiếu
2.2. Xoá bảng
Mệnh đề xoá bảng xoá một bảng quan hệ (cả cáu trúc và nội dung của bảng) khỏi CSDL. Bảng này chỉ có thể được tạo lại bằng cách sử dụng mệnh đề CREATE TABLE.
Mệnh đề xoá bảng có dạng tổng quát như sau:
Ví dụ 2.2: Xoá bảng SP trong ví dụ trên: DROP TABLE SP
2.3. Thêm dữ liệu
Đây là mệnh đề thêm một bản ghi vào một bảng và thường được sử dụng để tổ chức vào dữ liệu. Dạng tổng quát như sau:
Có 3 cách biểu diễn mệnh đề thêm dữ liệu:
Cách 1: INSERT INTO S(S#, SNAME, STATUS, CITY)
VALUES (1,'VINH',30,'HA NOI' )
Cách 2: Nếu vị trí của các cột trong bảng là cố định mệnh đề có thể viết:
INSERT INTO S
VALUES (1,'VINH',30,'HA NOI' )
Cách 3: Nếu người vào dữ liệu quên vị trí của các cột, khi đó có thể biểu diễn như sau:
INSERT INTO S(S#, STATUS, CITY, SNAME) VALUES (1, 30,'HA NOI', 'VINH')