Bài viết nhằm giới thiệu đến bạn đọc những nội dung về SQL, lịch sử phát triển của SQL, đặc điểm của SQL và đối tượng làm việc, các kiểu dữ liệu cơ bản của SQL, các tập lệnh cơ bản của SQL. Với các bạn đang học chuyên ngành Công nghệ thông tin thì đây là tài liệu tham khảo hữu ích dành cho các bạn.
Trang 1Tổng Quan Về SQL
I_Giới thiệu chung về SQL
1>.SQL là gì?
-SQL là viết tắt của Structure Query Language,nó là một công
cụ quản lý dữ liệu đ-ợc sử dụng phổ biến ở nhiều lĩnh vực
.Hầu hết các ngôn ngữ bậc cao đều có trình hỗ trợ SQL nh-
Visual BASic,Oracle,Visual C
Trong Oracle tất cả các ch-ơng trình và ng-ời sử dụng phải
sử dụng SQL để truy nhập vào dữ liệu trong CSDL của Oracle
Các ch-ơng trình ứng dụng và các công cụ Oracle cho phép
ng-ời sử dụng truy nhập tới CSDL mà không cần sử dụng trực
tiếp SQL Nh-ng những ứng dụng đó khi chạy phải sử dụng SQL
2>.Lịch sử phát triển:
-SQL đ-ợc phát triển từ ngôn ngữ SEQUEL2 bởi IBM theo mô
hình Codd tại trung tâm nghiên cứu của IBM ở California ,vào
những năm 70 cho hệ thống QTCSDL lớn
-Đầu tiên SQL đ-ợc sử dụng trong các ngôn ngữ quản lý CSDL
và chạy trên các máy đơn lẻ Song do sự phát triển nhanh
chóng của nhu cầu xây dựng những CSDL lớn theo mô hình khách
chủ( trong mô hình này toàn bộ CSDL đ-ợc tập trung trên máy
chủ (Server)) Mọi thao tác xử lý dữ liệu đ-ợc thực hiện
trên máy chủ bằng các lệnh SQL máy trạm chỉ dùng để cập nhập
hoặc lấy thông tin từ máy chủ) Ngày nay trong các ngôn ngữ
lập trình bậc cao đều có sự trợ giúp của SQL Nhất là trong
lĩnh vực phát triển của Internet ngôn ngữ SQL càng đóng vai
trò quan trọng hơn Nó đ-ợc sử dụng để nhanh chóng tạo các
trang Web động
SQL đã đ-ợc viện tiêu chuẩn quốc gia Mỹ (ANSI)và tổ chức
tiêu chuẩn quốc tế (ISO) chấp nhận nh- một ngôn ngữ chuẩn
cho CSDL quan hệ Nh-ng cho đến nay chuẩn này ch-a đ-a ra
đủ 100%.Nên các SQL nhúng trong các ngôn ngữ lập trình khác
nhau đã đ-ợc bổ xung mở rộng cho SQL chuẩn cho phù hợp với
các ứng dụng của mình.Do vậy có sự khác nhau rõ ràng gi-ã
các SQL
3>.Đặc điểm của SQL và đối t-ợng làm việc:
a>Đặc điểm:
-SQL là ngôn ngữ tựa tiếng Anh
-SQL là ngôn ngữ phi thủ tục,Nó không yêu cầu ta cách thức
truy nhập CSDL nh- thế nào Tất cả các thông báo của
SQL đều rất dễ sử dụng và ít khả năng mắc lỗi
-SQL cung cấp tập lệnh phong phú cho các công việc hỏi đáp
DL
+Chèn,cập nhật ,xoá các hàng trong một quan hệ
+Tạo,sửa đổi,thêm và xoá các đối t-ợng trong của CSDL
Comment [none1]:
Trang 2+Điều khiển việc truy nhập tới cơ sở dữ liệu và các
đối t-ợng của CSDL để đảm bảo tính bảo mật của cơ sở DL
+đảm bảo tính nhất quán và sự ràng buộc của CSDL
-Yêu cầu duy nhất để sử dụng cho các hỏi đáp là phải nắm
vững đ-ợc các cấu trúc CSDL của mình
b>Đối t-ợng làm việc của SQL:
-Là các bảng ( tổng quát là các quan hệ )dữ liệu hai chiêù
.Các bảng này bao gồm một hoặc nhiều cột và hàng.Các cột gọi
là các tr-ờng ,các hàng gọi là các bản ghi.Cột với tên gọi
và kiểu dữ liệu (kiểu dl của mỗi cột là duy nhất)xác định
tạo nên cấu trúc của bảng (Ta có thể dùng lệnh Desc[ribe]
TABLE-name để xem cấu trúc của bảng ,phần tuỳ chọn[] có thể
đ-ợc bỏ trong Oracle).Khi bảng đã đ-ợc tổ chức hệ thống cho
một mục đích nào đó có một CSDL
4>.Các kiểu dữ liệu cơ bản của SQL:
-Integer:Số nguyên:-2147483648 đến 2147483647
-Smallinteger:-32768 đến 32767
-Number(n,p):số thập phân độ dài tối đa là n kể cả p chữ số
thập phân(không tính dấu chấm)
-char (n):xâu có độ dàI cố định là n n<=255
-varchar(n):xâu có độ dàI biến đổi (0-:-n)
-long varchar :xâu có độ dài không cố định,độ dài có thể
thay đổi 4Kb-:-32Kb
-Date:Dữ liệu kiểu ngày
II_Giới thiệu các tập lệnh cơ bản của SQL:
-Tập lệnh SELECT:Đây là lệnh th-ờng đ-ợc dùng nhiều nhất
trong CSDL ,nó th-ờng đ-ợc sử dụng để nhận dữ liệu từ
CSDL
-Tập lệnh INSERT,UPDATE,DELETE:các lệnh này th-ờng hay đ-ợc
dùng để vào một hàng mới,sửa đổi hay xoá bỏ các hàng đã tồn
tại trong các quan hệ của CSDL
-Tập lệnh CREATE,ALTER,DROP:Ba lệnh này dùng để tạo,thay
đổi,xoá bỏ bất kỳ cấu trúc dữ liệu nào của các quan hệ nh-
bảng ,VIEW,INDEX
-Tập lệnh GRANT,REVOKE:Hai lệnh này đ-ợc sử dụng để cho phép
quyền truy nhập hay không cho phép quyền truy nhập tới CSDL
của Oracle và cấu trúc bên trong nó
Trong phần giới thiệu các tập lệnh này ta dùng ba bảng quan
hệ sau làm ví dụ minh hoạ:
R1(Nhân viên) (#NV,Ho_tên,Nsinh,nghề nghiệp,Đìa
chỉ,l-ơng)
R2(Liên kết) (#NV,#MP)
R3(phong) (#Mp,Tên_phong,tel)
1>Lệnh SELECT:
Trang 3*Mệnh đề SELECT t-ơng ứng với toán tử project(phép chiếu ) của đại số quan hệ.Nó đ-ợc dùng để tạo danh sách các thuộc tính mà ta mong muốn.Khối lệnh SELECT gồm có ba mệnh đề chính:
+SELECT:xác định nội dung của các cột cấn đ-a ra +FROM:danh sách các quan hệ đ-ợc quét qua
+WHERE:ứng với một khẳng định lựa chọn của đạI số quan hệ.Nó là một khẳng định liên quan đến các thuộc tính của quan hệ xuất hiện trong mệnh đề FROM:
-Một hỏi đáp cuả SELECT th-ờng có dạng:
SELECT [distinct]*/A1 An FROM r1 rm
[WHERE p];
Trong đó :
Ai là các thuộc tính
rj là các quan hệ (có thể là các TABLEs,VIEWs )Ta có thể dùng các bí danh cho các Ai,rj
p:là đIều kiện ràng buộc
ở đây WHERE có thể có hoặc không
Dùng *để chỉ tất cả các thuộc tính của các quan hệ đ-ợc chọn -Hỏi đáp này t-ong đ-ơng với biểu diễn sau trong quan hệ:
A1 An[S p(r1 rm)]
-Để loại bỏ các bộ giá trị (các hàng) trùng nhau ta thêm từ khoá Distinct vào sau SELECT (tr-ớc đây SQL thêm từ khoá unique)
-Trong khẳng định p:ta có thể dùng các liên từ logic and,or,not khi kết hợp nhiều điều kiện
VD1:Để hiện các thông tin về một nhân viên nào đó gồm(#,Họ_tên,N_sinh,Chức_vụ,địa_chỉ,l-ơng)
SELECT Distinc * FROM R1;
*Đ-a ra (họ_tên,Nsinh,chức_vụ,địa_chỉ,l-ơng,tên_phòng) với
đIều kiện l-ơng>500.000 và đia_chỉ không ở Hà nội
SELECT Ho_tên,Nsinhn,chức_vụ,địa_chỉ,l-ơng,tên_phòng FROM Nhânviên R1,Liênkêt R2,Phong R3
WHERE (R1.lương>500.000) and (not R1.địa_chỉ=’Hà nội’) and
(R1.#NV=R2.#NV) and (R2.#MP=R3.#MP);
-Trong lệnh trên ta đã dùng R1,R2,R3 làm bí danh cho Nhânviên, Liênkêt,Phong
Các bí danh đó chỉ có tác dụng trong một câu lệnh
Các ví dụ sau này ta dùng R1,R2,R3 để thay cho các bảng trên cho gọn
Có 4 toán tử hay đ-ợc dùng với các kiểu dữ liệu.Trong mệnh
đề WHERE là:
In (not In)
Between and (not between )
Like(not like)
Trang 4Is null (not is Null)
+Toán tử In (not In):dùng để kiểm tra giá trị trong(không nằm trong) một danh sách đ-ợc chỉ ra
Ví d ụ :đ-a ra những ng-ời có đia_chỉ ở Hà nội và Hà tây SELECT * FROM R1 WHERE đia_chỉ in (‘Hà nội’,’Hà tây’); +Toán tử Between and (not ) : kiểm tra giá trị nằm giữa (không nằm giữa) một phạm vi đ-ợc chỉ ra
VD :đ-a ra những ng-ời có l-ơng nằm trong khoảng (500.000-:-1.000.000)
SELECT * FROM R1 WHERE l-ơng between 500.000 and 1.000.000;
+Toán tử like (not like):dùng để kiểm tra những giá trị giống (không giống) với giá tri sau like,th-ờng sử dụng với xâu ký tự và khi ta không biết chính xác giá trị cần tìm kiếm hoặc giá trị cần tìm kiếm giống một mẫu nào đó.Trong SQL người ta sử dụng ký hiệu % cho xâu con và ‘_’cho 1 ký tự bất kỳ
VD:Tìm những ng-ời có tên mà có ký tự đầu tiên bất kỳ,ký tự tiềp theo là OA và tiếp theo là dãy ký tự bất kỳ:
SELECT *FROM R1 WHERE hoten=’_OA%’;
+Toán tử Is Null (not is Null):kiểm tra cho các giá trị rỗng (không rỗng);
VD:Đ-a ra tất cả những nhân viên mà đã cập nhật địa chỉ
SELECT *FROM R1 WHERE Dia_chi Not Is Null;
-Các hàm hay đ-ợc sử dụng trong mệnh đề SELECT:
+AVG:tính giá trị trung bình của một hoặc nhiều tr-ờng bỏ qua các giá trị rỗng
VD:tính l-ơng TB của cơ quan:
SELECT AVG(l-ơng) FROM R1;
+Count:đ-ợc dùng để đếm các bộ (hàng)
VD:ĐIểm tổng số bản ghi từ R1 có l-ong>500.000
SELECT count(*) FROM R1 WHERE l-ơng>500.000
+Hàm Max:tìm giá trị lớn nhất của biểu thức:
VD:tìm ng-ời có l-ơng lớn nhát trong R1 có địa chỉ ở Hà Tây
SELECT Max(lương) FROM R1 WHERE địa_chỉ=’Hà_tây’; +Hàm Min:tìm giá trị nhỏ nhất của biểu thức:
VD:tìm ng-ời có l-ơng nhỏ nhát trong R1 có địa chỉ ở Hà Tây
SELECT Min(l-ơng) FROM R1 WHERE địa_chỉ=’Hà_tây’; +Hàm Sum:tính tổng giá trị bỏ qua giá trị rỗng
VD:Tính tổng l-ơngcủa cơ quan
SELECT Sum(l-ơng) FROM R1;
-NgoàI 3 mệnh đề chính trên ta còn có thể :
+Tìm kiếm theo nhóm nhờ mệnh đề GROUP BYđ-ợc sử dụngđể phân chia các bộ thành các nhóm nhỏ
VD:Đ-a ra danh sách các nhân viên theo nhóm địa chỉ
Trang 5SELECT *FROM R1 Group by Đia_chỉ;
Th-ờng đi với mệnh đề Group by là mệnh đề Having by sử dụng
để chỉ ra những hạn chế của các nhóm đ-ợc hiển thị.Chú ý rằng mệnh đề Having by chỉ đi với Group by và điều kiện của
nó chỉ tác động đến từng nhóm bản ghi đ-ợc chỉ ra ở mệnh đề Group by chứ không tác động đến toàn bảng
VD: Đ-a ra danh sách các nhóm nhân viên cùng chức vụ và có l-ơng >500.000
SELECT * FROM R1
Group by chức_vụ
Having by l-ơng>500.000
-Sắp xếp theo một hoặc nhiều tr-ờng ta dùng mệnh đề
ORDER BY (colum1/[ASc|Desc] )
+ASc sắp xếp theo chiều tăng (ngầm định)
+Desc sắp xếp theo chiều giảm
VD Sắp xếp nhân viên theo chiều giảm theo l-ơng ,nếu cùng mức l-ơng thì theo sắp xếp theo chiều xếp theo chiều tăng ho_tên
SELECT * FROM R1 ORDER BY l-ơng/Desc,ho_tên;
2>Nhóm lệnh INSERT,UPDATE,DELETE:
*INSERT:
Dùng để chèn dl vào một quan hệ chúng ta có thể tạo ra
1 bộ để chèn vào hoặc một tập các bộ từ hỏi đáp SELECT để chèn vào
Cú pháp của lệnh: INSERT INTO R[A1 An] VALUES(vl1 )
VD:chèn 1 hàng (‘020’,’Nguyễn trọng Nghĩa’,Bảo vệ’,’Hà nội’,’800.000’)vào R1
INSERT INTO R1 VALUES
(‘020’,’Nguyễn trọng Nghĩa’,Bảo vệ’,’Hà nội’,800.000);
*UPDATE
Dùng để sử đổi giá trị của một hoăc nhiều bộ đã tồn tại trong quan hệ cú pháp cuả lệnh
UPDATE R SET [WHERE p]
VD:-l-ơng của tất cả các nhân viên của cơ quan cùng tăng 5% UPDATE R1 SET l-ơng=l-ơng*1,05
-chỉ tăng l-ơng của những ng-ời có l-ơng<500.000 và tăng 10%
UPDATE R1 SET l-ơng=l-ơng*1,1 WHERE l-ơng<500.000
*DELETE:
Dùng để xoá bỏ 1 hoặc nhiều bộ trong quan hệ
Cú pháp:
DELETE FROM R[WHERE P]
những bộ nào thoả mãn đk P thì mới bị huỷ bỏ khỏi quan hệ R VD: DELETE FROM R1 WHERE ng_sinh>’01-01-1935’;
Trang 6DELETE FROM R1;
Chú ý:lệnh DELETE chỉ thao tác với 1 quan hệ.Muốn huỷ các bộ
từ nhiều quan hệ ta dùng DELETE cho mỗi quan hệ.Lệnh DELETE chỉ đánh dấu các bản ghi chứ ch-a thực sự xoá hẳn ,ta có thể khôi phục lại đ-ợc Để xoá hẳn ta dung lệnh COMMIT ,khi đã
ra lệnh này ta không thể khôi phục lại đ-ợc nữa Khi ch-a ra lệnh COMMIT ta có thể khôi phục lại bằng cách dùng lệnh ROLLBACK
3>Nhóm lệnh CREATE,ALTER,DROP:
a>Lệnh CREATE
Lệnh này dùng để tạo ra các quan hệ nh- TABLE,VIEW,INDEX
*CREATE TABLE
-Bảng là một cấu trúc cơ bản để cất giữ trong hệ thống quan hệ.Có khuôn dạng hai chiều gồm có các cột và hàng.Nólà yếu
tố cơ bản cho các thao tác khác nhau.Có thể nói việc tạo bảng là b-ớc đầu tiên quan trọng nhất để thiết lập CSDL -Cú pháp của lệnh này:
CREATE TABLE table-name(colom_name type(size) )
Khi tạo ra bảng chúng ta phải chỉ ra kiểu dữ liệu của cột và mỗi cột chỉ có thể có môt kiểu dữ liêụ duy nhất.Khi tạo bảng
ta có thể đ-a ra các ràng buộc
Các ràng buộc của các tr-ờng có thể là : primary key,foreign ket ,unique,not null
VD:tạo bảng nhân viên
CREATE TABLE NHAN_VIEN (#NV varchar(4) constraint NV_Primary key,ho_tên Varchar(25),Ng_sinh date,chứcvụ varchar(20),đia_chỉ varchar(30).l-ơng number(7));
trong VD trên ta tạo ra một ràng buộc là #NV đ-ợc
định nghĩa là primary key
-Ta cũng có thể tạo ra bảng mới với cấu trúc và dữ liệu từ 1 bảng khác
Cú pháp:
CREATE TABLE TABLE_name[(colum_name )]AS
SELECT statement;
VD:tạo ra 1 bảng mới có tên là NVN (#NV,họ_tên) từ bảng NHAN_VIEN
CREATE TABLE NVN AS SELECT #NV,họ_tên FROM NHAN_VIEN;
*CREATE VIEW:
-VIEWs giống nh- những window mà thông qua những window này dữ liệu có thể đ-ợc xem hoặc thay đổi
Nó có thể đ-ợc tạo ra dựa trên một hay nhiều bảng trong CSDL.Nó là một bảng ảo không tồn tại thực sự trong CSDL.Nh-ng nó có thể đ-ợc truy nhập nh- là các bảng thông th-ờng.Ta có thể nhận đ-ợc các hàng từ VIEW với các lệnh SELECT và trong hầu hết các tr-ờng hợp của việc UPDATE,INSERT,DELETE hàng từ CSDL thông qua VIEW.Có một vàI tr-ờng hợp không cho phép UPDATE từ CSDL
Trang 7-Việc sử dụng VIEW có rất nhiều hữu ích trong việc:
+Hạn chế việc truy nhập CSDL SELECT từ một VIEW có thể hiển thị phần hạn chế của CSDL một cách nhanh chóng
+Cho phép ng-ời dùng tạo ra những hỏi đáp đơn giản để nhận đ-ợc kết quả từ những hỏi đáp phức tạp mà không cần biết cách thức nối các bảng nh- thế nào
+Cung cấp các phần tử dữ liệu độc lập cho ng-ời sử dụng
và các ch-ong trình viết ứng dụng dẫn đến đảm bảo cho việc bảo mật dữ liệu ,che dấu dữ liệu nào đó khỏi một user nào
đó
Cú pháp : CREATE [or REPLACE/FORCE] VIEW view_name [colum ]
AS Query,[with check option]
-OR REPLACE:cho phép một VIEW đ-ợc tạo ra thậm chí nếu một VIEW đã tồn tại có cùng tên nh- vậy.Do đó nó sẽ thay thế VIEW cũ
-FORCE:cho phép tạo ra VIEW thậm chí các bảng cơ sở ch-a tồn tại nh-ng các bảng phải tồn tại tr-ớc khi VIEW đó đ-ợc sử dụng
-Mệnh đề WITH CHECK OPTION:chỉ ra rằng việc INSERT,UPDATE thực hiện thông qua VIEW là không cho phép
VD: Tạo VIEW có tên NV_phong từ R1,R2,R3 gồm các tr-ờng Họ_tên,phòng
CREATE VIEW NV_phong AS SELECT hotên,tênphong FROM R1,R2,R3 WHERE (R1.#NV=R2.#NV)and (R2.#MP=R3.#MP) with check option;
*CREATE INDEX
Bảng chỉ số là một đối t-ợng đặc biệt đ-ợc tạo ra để cung cấp cho việc truy nhập tới bảng trong CSDL một cách nhanh chóng
Cú pháp:
CREATE INDEX index_name ON table(colum)
VD: CREATE INDEX Nhân _ vien_id ON NHAN_VIEN (Họ_tên);
b> Lệnh ALTER
-Dùng để hoặc là thêm một hay nhiều tr-ờng vào bảng hoặc sửa
đổi một cột hiện
tại.SQL ANSI chuẩn không cho phép huỷ bỏ các cột
-Cú pháp:
ALTER TABLE TABLE_name ADD | MODIFY | DROP option (colum Datatype )
+ADD:thêm cột mới
+MODIFY:sửa đổi cột
+DROP option xoá bỏ các ràng buộc
VD1:thêm tr-ờng gia đình kiểu char(1) vào R1
ALTER TABLE R1 ADD gia đình char(1);
VD2:Thay đổi tr-ờng Địa_chỉ Varchar(30) trong R1 thành
Địa_Chỉ(20):
ALTER TABLE R1 MODIFY Địa_Chỉ varchar(20);
Trang 8VD3:Huỷ bỏ ràng buộc tr-ờng khoá #NV trong R1
ALTER TABLE R1 DROP constraint NV_prim
c>Lệnh DROP
-Dùng để xoá bỏ một quan hệ,khi ta xoá bỏ một bảng cơ sở thì tất cả các VIEW,INDEX đ-ợc định nghĩa trên bảng đó sẽ
bị xoá bỏ
Cú phap:
DROP TABLE/VIEW/INDEX Name;
VD:Xóa bỏ Nhân_viên_id;
DROP INDEX Nhân_viên_id;
4>Tập lệnh GRANT,REVOKE:
*Để kiểm tra quyền truy nhập CSDL dùng lệnh GRANT
Cú pháp:
GRANT privileges ON object TO (user/public)[WITH GRANT OPTION]
-các quyền (privileges) truy nhập CSDL:
+Read(đọc)
+SELECT(chọn)
+write(ghi)
+INSERT(bổ sung)
+UPDATE(sửa đổi)
+DELETE,run
-Đối t-ợng (object) :là tên các quan hệ hoặc tên các ch-ơng trình
-Tên nguời sử dụng:Tên của một ng-ời ,một nhóm ng-ời hoặc danh sách ng-ời
public:cho tất cả mọi ng-ời cùng đ-ợc sử dụng
-Từ khoá :with grant OPTION:đảm bảo để ng-ời sử dụng có thể tiếp tục trao quyền sử dụng cho ng-ời khác
VD:cho phép SELECT,INSERT,UPDATE trên bảng R1 cho Nghĩa,Khôi GRANT SELECT,INSERT,UPDATE ON R1 TO Nghĩa,Khôi with grant option;
Nghĩa,Khôi có thể trao quyền trên cho ng-ời khác
*Để huỷ bỏ quyền truy nhập
Cú pháp:REVOKE privileges ON object FROM user
VD:để huỷ bỏ quyền UPDATE từ Nghĩa:
REVOKE UPDATE ON R1 FROM Nghĩa;
Lời kết thúc:
Trong bài này tôi muốn trình bày với các bạn về ngôn ngữ SQL chuẩn để các nhóm khác có thể tham khảo Nh-ng do tài liệu vê SQL chuẩn không có ,mà tôi chỉ tham khảo các tài liệu về SQL sử dụng cho truy nhập CSDL của ORACLE cho nên trong khi trình bày có khi " Lạm dụng" về SQL sử dụng trong ORACLE Rất mong các bạn góp ý kiến!
Trang 9
Ng-êi tr×nh bÇy : Ph¹m Minh Quý_K40B Tµi liÖu tham kh¶o :
+INTRODUCTION TO ORACLE : SQL PL/SQL AND SQL*PLUS
+UNDERSTANDING ORACLE