Giáo trình Cơ sở dữ liệu (Tập 1) trình bày các kỹ thuật tổ chức dữ liệu ở dạng mô hình liên kết thực thể, hay mô hình quan hệ, chuẩn hóa mô hình cơ sở dữ liệu quan hệ, cũng như sử dụng các phép toán đại số quan hệ hoặc SQL để truy vấn thông tin từ cơ sở dữ liệu. Giáo trình kết cấu gồm 3 chương và chia thành 2 phần, phần 2 trình bày những nội dung về: ngôn ngữ khai thác cơ sở dữ liệu quan hệ;... Mời các bạn cùng tham khảo!
Trang 1Chương 3 NGÔN NGỮ KHAI THẤC CSDL QUAN HỆ
Chương này trình bày khái quát những kiến thức cơ bản về các ngôn ngữ cho phép định nghĩa các đối tượng của một cơ sở dữ liệu vàbiểudiễncác yêu cầutrên cơsở dữ liệuđó màmộthệ quàn trị cơ sở dữ liệucó thể hỗ trợ Cụ thể, chúngta sẽ đitìm hiểu hai ngôn ngữ khai thác
cơ sở dữliệu quan hệ đó là đại số quan hệ và ngôn ngữ truy vấn có cấutrúc SQL
3.1 Các phép toán quan hệ
Ngôn ngữ đại sốquanhệ làcơ sở quantrọngcủamột ngôn ngữ bậc cao được sử dụng để thao tác ữên các quanhệ Với dữliệuđược lưu trữ
là những quan hệ nào đó, có thể sử dụng các phép toán của đại số quan
hệ để tạo ra các quanhệ mới, quanhệ mới này làthôngtinđược hiển thị
ratheoyêucầucủa người dùng
Đại số quan hệlàloại ngôn ngữ thủ tục, bao gồmtập hợp các phép
toán được áp dụng trên các thể hiện cùaquanhệ Kết quả trả về của một câu truy vấn làmột thể hiện của quan hệ Chuỗi các phép toán đại sổ
quan hệ hình thành nên biểu thức đại số quan hệ (câu truyvấn) mà kếtquảcủanó cũngtràvềmộtthể hiện của quanhệ
Đối với ngônngữnày, mỗi câu hỏi được biểu diễn thông qua việc
áp dụng một tập hợp các phép toán đặc biệt đối với các quan hệ Cácphép toán của đại số quan hệ thường được chiathành ba nhóm Nhómthứ nhất gồm các phép toán tập hợp (phép hợp, phép giao, phép trừ vàphép tích Đề-các) Nhóm thứ hai gồm các phéptoán đặc biệt trên quan
hệ (phép chọn, phép chiếu, phép chia, phép kết nối và phép đặt lại tên) Nhóm thứ ba gồm các phép toánquanhệ bổ sung (các hàm kếttập và các phép gộp nhóm)
Trang 23.1.1 Các phép toán tập hợp
Một quanhệ là một tập hợp các n-bộ được tạo ravới n là số ngôi hay bậc cố định của một quan hệ Trong lý thuyết tập hợp, nhóm các phép toán tập hợp bao gồm phép hợp, phép giao, phéptrừ, và phéptíchĐề-các của hai tập hợp là những phép toán hai ngôi Khi sử dụng các phéptoánnày trong các cơ sở dữliệu quan hệ cần phải có cácđiều kiện đảmbảo ràng quan hệ kết quả cùa các phép toán cũngphải làmộtquan
hệ hợp lệ Điều kiện nàygọi là điều kiệnkhả hợp
Định nghĩa 3.1: Chohai lượcđồ quanhệ R(A1, A2, , An) và S(B1, B2, , Bm) làkhả hợp nếu chúng cùng bậc(có nghĩa là n=m) và có cùngmiền giá trị DOM(Aj) = DOM(Bj), 1< i < n
Định nghĩa 3.2: Cho r và s làhai quanhệ Khi đó, r và s được gọi
là khả hợp nếu chúng được xác định ưên cùng tập thuộc tính và các thuộc tính cùng têncó cùng miềngiá trị
Ví dụ 3.1: Cho 2 quan hệ NHANVIEN và THANNHAN với cácthể hiện:
NHAN.VIEN TENNV NGSINH GT
Tung 12/08/1955 Nam Hang 07/19/1968 Nu Nhu 06/20/1951 Nu Hung 09/15/1962 Nam
THAN NHAN TENTN NG SINH GTTN
Trinh 04/05/1986 Nu Khang 10/25/1983 Nam Phuong 05/03/1958 Nu Minh 02/28/1942 Nam Chau 12/30/1988 Nu
Trang 3Khi đó ta có:
- Bậccủahaiquanhệ: n=3;
- Miền giá tri của các thuộc tính:
Biểudiễnhình thức của phép này có dạng: r u s= { 11 ter Vtes}
Ví dụ 3.2: Cho 2 quan hệ NHACC và KHACHHANG với các thể hiện:
NHACC lliỉỉẨ >55?
Lan
Hà OanhTùng MậnLê
Hà NộiBắc NinhThanh Hóa NamĐịnhBắc GiangHải Dương
KỐACHHANG
TùngLâm LanĐào
Nam ĐịnhHải Phòng
HàNội Phú Thọ
Trang 4Khi đó, phép hợp của 2 quan hệ NHACC vàKHACHHANG được biểu diễn và có kếtquả như sau:
Tùng Nam ĐịnhMận Bắc Giang
Lê Hải Dương
Biểu diễn hình thức củaphépnàycó dạng: rn s = 11 ter Ates)
Ví dụ 3.3: Cho 2 quan hệ NHACC và KHACHHANG với các thểhiện như ví dụ 3.2
Khi đó, phép giao của2 quan hệ NHACCvà KHACHHANG được biểu diễn và có kếtquả như sau:
• Phép trừ
Lan Tùng
Hà NộiNam Định
Cho 2 quan hệ r và s khả hợp Khi đó, phép trừ của rvà s là một quan hệ gồm tập tất cả các bộ thuộcr nhưng không thuộc s và được kýhiệu làr - s
Trang 5Biểudiễnhình thức củaphépnày có dạng: r - s = {11ter A tỂs}
Ví dụ 3.4: Cho 2 quan hệ NHACC và KHACHHANG với các thểhiện như ví dụ 3.2
Khi đó, phép trừ của 2 quan hệ NHACC và KHACHHANG được biểu diễn và cókếtquà như sau:
Oanh Thanh Hóa
KHACHHANG - NHACC SIB
Trang 6{A],A2, ,An} và {Bl,Bĩ, —, Bm) và r và s là hai quan hệthuộc hai lược
đồ R và s tương ứng Khi đó phép tích Đề - các cùa 2 quan hệ r và s làmột quan hệ gồm tập tất cả các (m+n) - bộ có n thành phần đầu tiên làmộtbộ thuộc r và mthành phần saulàmộtbộ thuộc svà được ký hiệu là
rx s
Biểu diễn hình thức củaphépnàycódạng:
r X s = {t I t=(ai, an,b1, bni)A (ab an) e rA(b15 bm) e s}
Kết quàtrả về là mộtquan hệ q Mỗi bộ của q làtổ hơp giữa 1 bộtrong r và 1 bộ trong s:
Ti vi LCDMáy giặt
Tủ lạnh
Khi đó, tích Đề-các của 2 quanhệ NHACC và HANGHOA được biểu diễn và có kếtquả như dưới đây:
Trang 7NHACC X HANGHOA MaNCC Ten MaHH TenHH
và được kýhiệulà r -ỉ-s
Biểu diễn hình thức củaphépnàycó dạng:
r -5- s={t I t=(am+b an): V (ậa™) e s, (aba2, ,am,am+b an) e r}
Ví dụ 3.6: Cho 2 quan hệ CUNGCAP vàHANGHOA với các thểhiện như saụ
Trang 8CUNGCAP MaNCÇ MaHH
Khi đó, tích phép chia của quan hệ CUNGCAP cho quan hệHANGHOAđược biểu diễn và có kết quà như dưới đây:
100102
3.1.2 Các phép toán đặc biệt trên quan hệ
Các phép toán đặc biệt trên quan hệ bao gồm các phép toán liênquan chặt chẽ đến các thao tác cơbàn làm thay đổi quan hệ (như cácthaotácthêm, sửa, xóa các bộ giá trị trongmột quan hệ) Các phép toánnày là một cách tiếp cận khác trong việc biểu diễn câu truy vấn củangôn ngữđại số quanhệ
• Phép chọn
Phép chọn được dùng để lọc ra một tập con các bộ của quan hệ đã cho thỏa mãn một điều kiện xác định Điều kiện đó được gọi là điều kiện chọn hay biểu thức chọn.
Trang 9Biểu thức chọn F được biểu diễn bởi mộtbiểu thức logic bao gồm các toán hạng, mỗitoán hạng là một phépso sánh đơn giản giữa hai biến
là hai thuộc tínhhoặc giữa một biếnlà một thuộc tính và một biến làgiátrị hằng Biểu thức chọn F cho giá trị là đúng hoặc sai (TRUE hoặcFALSE) đối với mỗi bộ đã kiểm ứa
Như vậy, điều kiện chọn F là một biểu thứclogic gồm các mệnh đề
có dạng:
- <tên thuộc tính> <phép so sánh><hằngsố>
- <tên thuộc tính><phép so sánh> <tên thuộctính>
Các phép so sánhtrongđiều kiện chọnF là <, >, <, >, =
Các mệnh đề được nối lại nhờ các phép logic A (và), V (hoặc), -I (phủ định)
Cho r là một quan hệ và F là một biểu thức logic trên các thuộc tính của r Phép chọn trên quan hệ r các bộ thỏa mãn điều kiện chọn F,
kỉ hiệu là ơf(r) là tập tất cả các bộ của r thỏa mãn F.
Biểu diễn hình thứccủaphép này có dạng:
ơF(r) = {11 ter A F(t) = TRUE}
Ví dụ 3.7: Cho quan hệ HANGHOA vớicác thể hiện như sau
Trang 10ƠMausac= “Xám” (HANGHOA) MaHH Mausac Trongluoog
Cho r là một quan hệ n ngôi xác định trên tập thuộc tính U={A i ,A2,
và một tập con thuộc tínhXcU Phép chỉếu của quan hệ r trên
tập thuộc tính X được ký hiệu là Iĩx(R, là một quan hệ gồm tập tất cả các
bộ của r xác định trên tập thuộc tỉnh X).
Biểu diễn hình thức củaphép nàycó dạng: nx(r)={t[X] I ter}
Trang 11Ví dụ 3.8: Cho quan hệHANGHOA với cácthể hiện nhưsau:
HANGHOA MaHH Másac •• ;,;'í Trongluong,
TV01 Ti viLCD Đen 2.5
TL01 Tủ lạnh Xanh 10TV02 Ti vi LCD Xám 3.5MG02 Máy giặt Trắng 8Khi đĩ, yêucầu đưa ra thơng tin về mãhàng, tênhàng củacác mặt hàng sẽ đượcbiểu diễn và cĩkếtquả như sau:
nMarai,TenHH (HẤNGHốẨ)^
TV01MG01TL01TV02MG02
Ti vi LCDMáy giặt
Tủ lạnh
Ti vi LCDMáy giặtYêu cầu 2: Đưa rathơng tin về mã hàng, màu sắc củanhững hànghĩa cĩ trọng lượng lớn hơn 7 kg được biểu diễnvà cĩ kếtquà như dướiđây:
n^aHH, Mausac(ƠTrongluong>7 (BÌẰNGHỮẤ)^ *ỊỊSS
TL01MG02
XanhTrắng
Phép chiếu tổng quát là sự mở rộng phép chiếu bằng cách cho phép sử dụng các phép tốn sổ học trong danh sách thuộc tỉnh, và được
kí hiệu.là n FI F2'Fn (E) trong đĩ:
- E là biểu thức đại sổ quan hệ;
Trang 12- Fl, F2, ,Fn là các biểu thức số học liên quan đến hằng số hoặc các thuộc tính trong E.
Ví dụ 3.9: Cho quan hệ THETINDUNG (Mathe, trigiathe,SotienSD)
Yêu cầu: Hãy cho biết số tiền còn lại trong mỗithẻ?
Khi đó ta có câu truy vấn: n Mathe, trigiathe - SotienSD (THETINDƯNG)
Phép kếtnối được dùng để tổ hợp hai bộ có liên quantừ hai quan
hệ thànhmộtbộ mới trongmộtquanhệ mới
Khái niệm“ ghép bộ ”: giảsử cho hai bộ u =(ai, a2, , a„) và V =(bi, b2, bm), phép ghépbộ u với bộV được kí hiệulà(u,v) được định nghĩa như sau: (u,v)=(ab a2, , an,bb b2,bm)
Phép kết nổi hai quan hệ thực chất là phép ghép các cặp bộ của hai
quan hệ thỏa mãn một điều kiện nào đó trên chúng Điều kiện đó được gọi là điều kiện kết nối hay biểu thức kết nổi.
Cho quan hệ r xác định trên tập thuộc tính (A ị , A2, A„), s là
quan hệ xác định trên tập thuộc tỉnh (Bj, B 2 , , Bn), và 6 là một trong các phép so sảnh * ,=,<,>,<,> Kết quả của phép kết nổi 0 quan hệ r
với quan hệ s theo điều kiện Ai ỡ Bj và được kí hiệu r [><! s là và được
A10 Bj
xác định như sau:
r l><l s={(t,u)| ter, UGSvà t[Ai] 0 u[ Bj] }
Trang 13Tất nhiên ở đây cần giả thiết rằng các phép so sánh của các cặpthuộc tính của hai quan hệ là có nghĩa, tức là mỗi giá trị thuộc Dom(Ai)
cóthể so sánh được với mỗigiá trị thuộcDom(Bj)qua phép so sánh 0
Ta có thể sử dụng kí hiệu r [><1s nếu F được kí hiệu thay cho
s (hoặcr [X]s) choquanhệkết quả
Ví dụ 3.10: Cho 4 quan hệ NHACC, CUNGCAP, HANGHOAvà KHACHHANG vớicầc thểhiện
NHACC MaNCC TenNCC DiachiNCC KHACHHANG TenKH DiachiKH
102 Oanh Thanh Hóa Đào Phú Thọ
MG02
Ti vi LCD Máy giặt
Tủ lạnh
Ti vi LCD
Máy giặt
Hà Nội Hải Dương
Thanh Hóa Bắc Ninh Hải Phòng
Khi đó giả sửta có các truy vấnsau:
Truy vấn 1: Đưa ra thông tin về các nhà cung cấp có tên khác với tên khách hàng
Trang 14NHACC lI KBACHHANG
ta có thể viếtmột biểu thức đại số quan hệ mà các phép toán cóthể xếplồng với nhau Cáchviếtbiểu thức này có thể đon giảnhon bằng cách sử
Trang 15dụng nhữngquan hệ kết quàtrung gian tương ứng với mỗi phép toán tại mộtthòi điểm và tạo ra các quan hệ là các kết quả trung gian đó Nhữngquanhệ trung gian như vậy ẹần phải đượcđặt tên.
Ví dụ 3.11: Đưara thông tin về Mã nhàcungcấp, tênnhàcung cấp
đã cung ứng mặt hàngMG01 Khi đó ta có thể viết theo các cách nhưsau:Không dùngquanhệ trung gian:
ri-MaNCC, TenNCc(^MaHH=“MG01” (NHACC * CUNGCAP))
Dùng quanhệtrung gian:
TG <- ƠMaHH=“MGOi”(NHACC * CUNGCAP))
KQ <— nMaNCC> TenNCc(TG)
Ta cũng có thể đặt lại tên cho các thuộc tính trong các quan hệtrung gian và kếtquả Để đạt lại tên cho các thuộc tínhtrongmột quan hệkết quả, chúngta có thể liệt kê tên mới của các thuộc tính trong cặpdấu
“0” theo tênquanhệ kết quả hoặc sửdụng phép đặt lại tênp
Xét quan hệ r với các thuộctínhB, c, D
Đổi tên quan hệ' Phép đổi tên quan hệ r thành quan hệ được kíhiệu làPr(s)
Đổi tên thuộc tính: Phép đổi tên thuộctính B trong quanhệ r thànhthuộc tínhX được kí hiệu là Px, c, D(r)
Đổi tên thuộc tỉnh và đổi tên quan hệ'. Phép đổi tênquanhệ r thànhquanhệ s và thuộctính B thànhthuộc tính X được kí hiệu là ps(X) c,D(r)
Ví dụ 3.12: Xét lại ví dụ 3.9 trongtrường hợp sửdụng phép đặtlại tên:
TG <—ơMaHH=“MG0i” (NHACC * CUNGCAP))
KQ (Ma, Ten)<- nMaNcc,TenNcc(TG)
Hoặc p kq (Ma, Ten) (nMaNCC, TenNCc(TG))
Trang 163.1.3 Các phép toán quan hệ bổ sung
Trong ngôn ngữ đại số quan hệ nếu chỉ sử dụng các phép toán cơbản ở trênthì có nhiều truy vấn cơ sở dữ liệusẽ khôngthực hiện được
Vì vậy, ưong các hệ quản trị cơ sở dữ liệu thìhầu hếtcác ngôn ngữ thaotác dữ liệu đã có những phép toán quan hệ bổ sung để thực hiện đượcnhững truy vấn như vậy Các phép toánquan hệ bổ sung thường dùng làcác hàm kết tập và các phép gộp nhóm Các phép toán này làm tăng cường sứcmạnhkhai thác cơ sở dữ liệu củađại số quan hệ
- Các hàm kết tập: Kiểu truy vấnđầutiên không thểbiểu diễn được trong đại số quan hệlà các truyvấnmôtà bằngcáchàm toánhọc cótínhchất kết hợp trênmộttập hợpcác giátrị củacơ sờ dữ liệu Ví dụ như các yêu cầu được truy vấn là “cho biết tổng doanh thu đãbán?” hay “thống
kê tổng số lượng hàng hóa đã được bán?” hoặc “cho biết giá cả trungbình của các mặt hàng được bán?”, Mỗi hàm kếttập nhận vào tập hợp các giá trị và trảvềmộtgiá trị đơn Các hàm hayáp dụng để thu thập các giá trị số đó là:
Trang 17Với truy vấn đưa ra tổng số hàng hóa đã được bán, ta có truy vấn:SUM(Soluong) -> kếtquả là 100.
Chú ý: Kết quảtrà về của việc áp dụng một hàm kết tập đó là một quan hệ Các bộ trùng lặp trong mỗi nhóm không bị loại bỏ khỏi nhóm khi thực hiện một hàm kết tập
- Các phép gộp nhóm' Một kiểu truy vấn hay dùng khác cũng không thực hiện được trong đại số quan hệ với các phép toán cơ bản ởtrên là yêu cầu nhóm các bộ trong một quan hệ theo một giátrị của một
số các thuộc tính của chúng và sau đó áp dụng cáchàm nhómmột cáchđộc lập cho từng nhóm Ví dụ, nhóm các bộ của quan hệ CUNGCAP theo MaNCC như vậy mỗi nhóm bao gồm các mặt hàng đã được cung cấp bởi mỗi nhà cungcấp Sau đó chúng ta có thể đưa ra thông tin: Đốivới mỗi nhà cung cấp đã cung ứng bao nhiêu loại mặthàng với tổng sổlượng các mặt hàng đã cung ứng Ta có thể định nghĩa một phép gộp nhóm như sau:
<Các thuộc tínhgộpnhóm>3<Danhsách hàm kết tập> (r)
Trong đó:
o 3 là kí hiệu của phép toán gộp nhóm
o <Các thuộc tính gộp nhóm> là danh sách các thuộc tính củaquan hệr;
Trang 18SQL(Structured Query Language) là một ngôn ngữmáy tính dùng
để tạo, chỉnh sửa, và truy vấn dữ liệu từ mộthệ quàn trị cơ sở dữ liệu quan hệ
Ngôn ngữSQL xuấtpháttừbài báo“Môhình quanhệ chodữ liệu dùng trong ngân hàng dữ liệu dùng chung có khối lượng lớn” của tiến
sĩEdgarF Codd, 1970, và mô hình này sau đó đã được chấp nhận rộngrãi làmô hìnhtiêu chuẩndùng cho hệ thống quàn lýcơ sở dữ liệuquanhệ.Giữa những năm 1970, một nhóm các nhà phát triển thuộc trungtâm nghiên cứu của IBM dựa trên mô hình của tiến sT Edgar F Codd
đãphát triển mộthệ thống quàn lý và truy vấn cơ sởdữ liệu được đặtt'ên là Structured English Query Language, viết tắt là “SEQUEL” Saunày, tên viếttắt SEQUEL được rút gọn thành SQL Mặc dù SQL bị ảnhhưởng bởi công trìnhcủa tiến sĩ Codd nhưng nó không do tiếnsĩ Coddthiết kế mà được thiết kế bởi Donald D Chamberlin và Raymond F Boyce tại IBM
Trang 19Năm 1986, SQLđược thừa nhận làtiêuchuẩncủaANSI(AmericanNational Standards Institute) và được ISO(International OrganizationforStandardization) thừanhận một năm sau đó, năm 1987 Tiêu chuẩnSQL
đã trải qua một số phiên bản: SQL-86, SQL-89, SQL-92,SQL:1999, SQL:2003, SQL:2008,SQL:2011
3.2.1 Tổng quan về ngôn ngữ SQL
Bất kỳ một ngônngữ xây dựngvàkhai thác cơ sở dữliệu quan hệnàophải cho phép ngườidùng thực hiện các côngviệc sau:
- Tạo một cơ sở dữ liệu và cấu trúc các quan hệ
- Thực hiệncácthaotácquản lý dữ liệu cơbản, như thêmmới, hiệuchỉnh và xóa dữ liệu thuộc một quanhệnào đó
- Thực hiện các truyvấnđơngiảnvàphức tạp
SQL giúp cho ngườidùng thực hiện các nhiệmvụ trên một cách dễ dàng, với các cấu trúc và cú pháp lệnh đơn giản dễ học
SQL cũng là một ngôn ngữ có tính dịch chuyển cao, do ngônngữ tuân theo những chuẩn đã đượcxác định nên người dùng có thể sử dụngcùng một cấu trúc và cú pháp lệnh khihọ chuyển từmộthệquản trị cơ sở
dữ liệu này sang một hệ quản trị cơsở dữ liệu khác
SQL là một ngôn ngữ hướng chuyển đổi” (transform - orientedlanguage), ngôn ngữ được thiết kế để sử dụng các quan hệ trong việc chuyểnđổi cácđầuvàothành các đầura yêu cầu
Theo chuẩnISO, ngôn ngữ SQL có hai thành phần chính:
- Thành phần ngôn ngữ định nghĩa dữ liệu (Data DefinitionLanguage - DDL) dùng để định nghĩa các cấu trúc cơ sở dữ liệu và quản
lý các truy cập đến dữ liệu Chi tiếtvềthànhphầnDDL sẽ được trìnhbày
ởphần3.2.3
- Thành phần ngôn ngữ quản trị dữ liệu (Data Manipulation Language - DML) dùng để truy vấn và cậpnhật dữ liệu Chi tiếtvềthànhphần DML sẽđượctrìnhbàyở phần 3.2.4 và 3.2.5
Trang 20Cho đếnphiênbản SQL:1999,ngôn ngữ SQL chibao gồm các lệnhđịnhnghĩa và quàntrị dữ liệu mà không bao gồm các câu lệnh điều khiển luồng công việc nhưIF THEN ELSE, GO TO, hay While Nhữngcâu lệnh này được càỉ đặt bằng các ngôn ngữ lập trình hay ngôn ngữquản lý công việc, hoặc được người dùngquyết định thôngqua các tươngtác trực tiếp Do sự thiếu hụtnày, SQL có thể được sử dụng theo 2 cách.Cáchthứnhất là dùng SQL cùng với các chỉ thị được thêm vàotại thiết
bị đầu cuối hoặc cách thứ hai là nhúng SQL vào một ngôn ngữ lập trìnhnàođó (cách này được sử dụng rộng rãi trong việcxâydựng các hệ thống thông tintrongdoanh nghiệp)
Ngôn ngữ SQL làmột ngôn ngữ dễhọc:
- SQL làngôn ngữ không hướng thủtục: người dùng sẽ chỉ rõ đâu
làthông tinhọ cần, mà không cầnchì ra làm cách nào để có được thông tin đó Nói cách khác, SQL không yêu cầu người dùng chi rõ phương thức truy cập dữ liệumột cách tườngminh Do chi cầnxác định yêu cầuthông tin nên ngôn ngữ SQL trở nênđơn giản với người học
- Giống hàu hết các ngôn ngữ hiện đại khác, SQL là ngôn ngữkhông có định dạng, có nghĩa là các phần khác nhau của một chi thị không cầnphảiđặt tại mộtvị trí cụthểfrênmàn hình
- Cấu trúc các câu lệnh bao gồmnhững từ tiếng Anh đơn giản như CREATETABLE, INSERT, UPDATE, SELECT v.v
- SQL có thể sừ dụng bởi nhiều đối tượngngười dùng, như ngườiquản trị cơ sở dữ liệu (DBA), người quàn lý, người pháttriển ứng dụng,
và rất nhiều kiểu người dùngkhác
Trong ngôn ngữ SQL không sửdụng các kháiniệm quan hệ, thuộctính và các thể hiện như đã định nghĩa ưong phần đại số quan hệ mà thay vào đó SQL sử dụng các khái niệm bàng, cột và hàng Một bảng tươngđương với mộtquan hệ, một cộttương đương với một thuộctính và mộthàng tương đương với một thể hiện Cũng nên chú ý răng, SQL không tuyệt đối tuân theo định nghĩa của mô hình quan hệ được miêu tả ở
Trang 21chương trước Ví dụ, SQLcho phép một bảng kếtquả của mộtphép “tìmkiếm” cóthể baogồm những hànggiốngnhau(duplicate rows), SQLcònquy định thứ tự trên các cột, và cho phép người dùng sử dụng một sốphép toánưên bảng kếtquả, ví dụsửdụng phép sắp xếp cáchàng trong bảng kết quả.
3.2.2 Các kiểu dữ liệu
Các thuộc tính trong cơsở dữ liệu quan hệ, hay các cộttrong một bảng của SQL luôn thuộc một kiểu dữ liệu xác định Trong ngôn ngữSQL, thành phàn ngôn ngữđịnh nghĩa dữ liệu (DLL) xây dựng sẵn các kiểudữliệu cơbản Các kiểudữ liệucơ bản của DLL được chỉ ra trong bảng sau:
Kiểu dữ liệu Khai từkhóa dùng trong khai báo
Xâu ký tự CHAR VARCHAR
Số chính xác NUMERIC DECIMAL INTEGER SMALLINT
Interval INTERVAL
Đối tượng lớn CHARACTER LARGE
OBJECT
BINARY LARGEOBJECT
Chi tiết về miền giá trị của các kiểu dữ liệutrong ngônngữ SQLnhư sau:
Kiểu logic: Dữ liệu thuộc kiểu logic thường nhậnmộttronghai giátrị TRUEhoặc FALSE Ngoại trừtrường hợp dữ liệu được mặc định bởi rằng buộc NOTNULL, dữliệukiểu logic còn hỗ trợmột giá trị khác làgiá trị UNKNOWN (không xác định) và được coi như là giá trị trống Kiểu logic frong SQL hỗ trợ các phép toán so sánh và gán, trong đó giá
Trang 22tri TRUE lớn hơn giá trị FALSE, và các phép so sánh bao gồm giá trị UNKNOWN sẽtràvềkếtquả UNKNOWN.
Kiểu xâu ký tự: Dữliệu thuộckiểu xâu ký tự bao gồm một chuỗi các kýtựthuộc nhóm ký tự đã định nghĩa trước, phụ thuộc vào bảng mã
mànhà phát triển ứng dụng SQL lựachọn, thườnglàASCII và EBCDIC Khi định nghĩa một cột trong bảng thuộc kiểu xâu kýtự, có thể chỉ rõsố
ký tự tối đa mà cột đó có thể chứa Một xâu ký tự có thể có độ dài cố định hoặc độ dài động Trong trường hợp sử dụng độ dài cố định, nếungười dùng nhập vào một chuỗiký tựcó độ dài nhỏ hơnsố ký tự tối đa,các ký tự trắng sẽ được thêm vào cuối đểchuỗi đó đạt được kích thướctối đa Ngược lại, trong trường hợp sửdụng độ dài động, nếu người dùngnhập vào một chuỗi ký tự nhỏ hơn số ký tự tối đa,chì các ký tự nhập vào được lưutrữ, do đó tiếtkiệmđượcbộ nhớ sử dụng
Trong ngôn ngữ SQL, kiểu dữ liệu CHAR làkiểu dữ liệucó độ dài
cố định và kiểu dữ liệuVARCHARlàkiểu dữ liệu có độ dàithayđổi
Kiểu nhị phân: Dữ liệu thuộc kiểu nhị phân là mộtdãy tuần tự các bit (binary digits), mỗi bit nhận một trong hai giá trị 0 hoặc 1 Định dạngdùng để khai báo kiểu nhị phân giống với khai báo của kiểu ký tự: BIT [VARYING] (length) Trong đó, length là độ dài tối đa của của kiểu dữ liệu và từ khóa VARYING dùng để chỉ độ dài dữ liệuthuộc kiểu độ dài
cố định hay độdài động
Kiểu sổ chính xác: Là kiểu dữ liệu được sử dụng để định nghĩa các
số một cách chính xác Các số thuộc kiểu này bao gồm một phần số nguyên, có thể có phần thập phân và dấu Mộtkiểu dữ liệu chính xác bao gồm hai thành phần precision và scale Thànhphần presision chì ra tổng
số các chữ số thuộc kiểu và thành phần scale chỉ ra số các số sau dấuphẩy thuộckiểu này Ví dụ, giátrị số -12.345 cóprecision = 5 và scale= 3.Trong các kiểu dữ liệu thuộc nhóm kiểu số chính xác, kiểu NUMERIC và DECIMAL chứa các số thập phân, trong đóphầnscale cógiá trị mặc định là 0 Kiểu INTEGER dùng cho các số nguyên lớn vàSMALLINT dùng cho các số nguyên nhỏ
Trang 23Ví dụ: DECIMAL (7,2), là kiểu dữ liệu có tổngsố ký tự tốiđa là 7, trong đó có thể có 2 ký tự phần thậpphân Dữ liệuđược định nghĩatheođịnh nghĩanàycóthể chứa giátrị tối đa99999,99.
Kiểu số gần đúng: Các kiểu dữliệusố gần đúng được sửdụng đểxác định con số mà không thể có mộtthể hiện chính xác, chẳng hạn như các số thực Số gần đúng sử dụng trong SQL bởi khai báo kiểu sau:FLOAT(precision); REAL; DOUBLE PRECISION
Trong đó, thành phần [precision] (độ chính xác) là một số nằmtrong khoảng [l-^-ốS] qui địnhkích thước bộ nhớdùng để lưutrữ các giátrị số trong kiểu định nghĩa Độ chính xác của kiểu FLOAT do người dùng tự định nghĩa, trong khi độ chính xác của kiểu REAL và DUBLE PRECISION được quy định sẵn bởihệ thống
Kiểu dữ liệu thòi gian: Các kiểu dữ liệuvề thờigian được sửdụng
để xác định các thời gian trong ngày ở một mức độ chính xác nhất định:
Ví dụnhư ngày, giờ, vàthời điểm trong ngày Tiêu chuẩn ISO chia nhỏ
dữ liệu về thời gian thành nhiều kiểu như: YEAR, MONTH, DAY,HOUR, MINUTE, SECOND, TIMEZONE HOUR, và TIMEZONE _MINUTE Trong SQL hỗ frợ các kiểu thời gian sau: DATE; TIME [presicion] [múigiờ];TIMESTAMP[độ chính xác] [múi giờ]
Trong đó, độ chính xác là số lượng các chữ số phần thập phân của giá trị đo thời gian Trong kiểuTIME, độ chính xác ngầm định là0 (đothời gian theo từng giây) và trong kiểu TIMESTAMP, độ chính xácngầm định là 6 (đo thời gian theo một phầntriệu giây) Trong kiểuthời gian, múigiờ mặcđịnhlàmúi giờ củahệ thông
3.2.3 Các lệnh định nghĩa dữ liệu
Thành phần ngôn ngữ định nghĩa dữ liệu (DDL) trong SQL cho phép định nghĩa và hiệu chỉnh các đối tượng trong một cơ sở dữ liệu quan hệ như các lược đồ, cơ sở dữ liệu, bàng (quan hệ), các chỉ mục.Trong phần này, chúng tôi chỉ giới thiệu ngắn gọn cách xây dựng hiệu chỉnh và hủy các bảng trong một cơ sờ dữ liệuquan hệ Các câu lệnh chính được dùng là: CREATE TABLE;ALTER TABLE và DROP TABLE
Trang 24Tạo bảng
Trong quá trình xây dựng cơ sở dữ liệu quan hệ bằng ngôn ngữSQL, một trong những yêu cầu quan trọng nhất là xây dựng các bảngnằm trong cơ sở dữ liệu đó Xây dựng các bảng trong cơ sở dữliệu bao gồm việc chỉ rõ chi tiết thành phần của bảng và mối quan hệ giữa các bảng Trong ngôn ngữ SQL, các bảng và mối quan hệ được định nghĩabởi câulệnhCREATE TABLE
Cú pháp của câu lệnh CREATE TABLE:
CREATE TABLE tênbàng
(
[Cột 1] [kiểu dữ liệu 1] [NOT NULL] [UNIQUE] ,
[Cột 2] [kiểu dữ liệu 2] [NOT NULL] [UNIQUE] ,
[Cộtn] [kiểu dữ liệu n] [NOT NULL] [UNIQUE] ,
[ CONSTRAINT [tên_khóa_chính]
PRIMARY KEY ([Cộtlàm khóa chinhl] [Cột làm khóa chínhn]),]
[ CONSTRAINT[tên_khóa_ngoài]
FOREIGN KEY ([Cột làm khóangoàil], ,[Cột làm khóangoài n])
REFERENCES tên_bảng_tham_chiếu ([tên khóachínhbảngthamchiếu])]
);
Trong đó, các thành phần được in đậm là từ khóa của SQL, các thành phần được viết trong dấu đỏng ngoặc vuông [] là các thành phần có thểcóxuấthiệnhoặckhông
Trang 25Chức năng của câu lệnh CREATE TABLE:
Câu lệnh CREATE TABLE thực hiệnviệctạo mộtbảng cótên [tên bảng] bao gồm một hoặc nhiều thuộc tính (cột) được liệt kê trong dấungoặc đơn tiếp theo Một cột bất kỳ được định nghĩa như sau: [ Cột i][kiểu dữ liệu i] [NOT NULL] [UNIQUE] trong đó kiểu dữ liệu là một trong các kiểudữ liệu cơ sở đượcgiới thiệu tạiphần 3.2.2, từkhóaNOTNULL được dùng để chỉ dữ liệu thuộc cột tương ứng không được để trống, từkhóa UNIQUE được dùng để chỉ dữ liệu thuộc cộttương ứng không được lặp lại trong các hàng khác nhau
Một bàng trongcơ sở dữ liệu có thể có khóa chính hoặc không.Khimuốn liệt kê các thuộc tính được sử dụng làmkhóachính,sửdụngcú pháp:CONSTRAINT [tên_khóa_chính]
PRIMARY KEY ([Cột làmkhóachínhl], ,[Cột làm khóachính n]),Trong đó tên khóa chính có thềcó hoặc không, vàđược chỉ rõ sau
từ khóa CONSTRAINT và danhsáchtên thuộc tínhdùng làm khóa chính được liệt kê sau từ khóa PRIMARY KEY và cách nhau bởi dấu phẩy Cácthuộctính được sử dụng làm khóa chính phải được định nghĩa trước trongdanh sách thuộctínhcủabảng
Chú ý: trong câu lệnh tạo bảng, nếu một thuộc tính được chọn làm khóa chính thì thuộc tính đóphải được định nghĩa NOT NULL
Ví dụ 3.15: Tạobảngmột bảng khôngcó khóa chính
CREATE TABLE Nhanvien
(
Manv char(10),Ho_ten vachar(30),Ngay_sinhdatetime,Luongdecimal(7,2),);
Trang 26Câu lệnh trên thực hiện tạo một bảng có tên Nhan_vien có bốnthuộc tính: Manv thuộc kiểuxâukýtựcóđộdài tốiđa 10 kýtự và khôngđược để trống, Ho_tenthuộc kiểu xâu ký tự có độ dài động, số ký tự tối
đa là 30, Ngay sinh thuộc kiểu thòi gian (ngàytháng), Luong thuộckiểu
số thực có độ dài tối đa 7 chữ số
Một bảng trong cơsở dữ liệu cũng có thể cókhóachính ngoài hoặckhông Khimuốn tạomột khóa ngoài chobảng, sử dụng cú pháp:
[ CONSTRAINT [tên_khóa_ngoài]
FOREIGN KEY ( [Cột làm khóangoàil], ,[Cột làm khóangoài n])
REFERENCES tên bâng tham chiểu ([tên khóachínhbảng thamchiếu])]
Trong đó tênkhóa ngoài có thể có hoặc không, và được chỉ rõ sau
từ khóaCONSTRAINT và danh sáchtên thuộc tínhdùng làm khóa ngoàiđược liệtkê sautừ khóa FOREIGNKEY và cách nhau bởi dấu phẩy Tên bảng tham chiếu bằng khóa ngoài được chỉ rõ sau từ khóa REFERENCES
Trang 27và đi cùng với tên khóa chínhcủa bảng tham chiếu hoặc danh sách các cột được sử dụng làm khóachính của bảng tham chiếu.
Ví dụ 3.17: tạobảng với khóachínhvà khóa ngoài
CREATE TABLE Phong
(
Maphong char(10) NOT NULL UNIQUE,
Ten_phong_ban varchar(30), Dia_diem varchar (300), Truong_phong char(10) NOT NULL, CONSTRAINT pk_phongPRIMARY KEY (Maphong), CONSTRAINT fk_phong_nhan_vien
FOREIGN KEY (Truong phong)
Cú pháp của lệnh ALTER TABLE dùng để thêm hoặc xóa cộtnhư sau:
ALTER TABLE tên_bảng
[ ADD COLUMN Tên_cọtKiểu dữ liệu [NOT NULL] [UNIQUE],] [ DROP COLUMN Tên_cột [RESTRICT][CASCADE]];
Trang 28Trong đó mệnh đềADD COLUMN dùng để chỉ thao tác thêm một cột vào trong bàng, và mệnh đề DROP COLUMN dùng để xóa một cộttrong bảng.
Trong mệnh đề ADD COLUMN, một cột mới được định nghĩa giống như cách định nghĩa cộttrìnhbàytrong lệnh CREATE TABLE.Trong mệnh đề DROPCOLUMN, cóthể chỉ rõ điều kiện thực hiện hành động xóa cột bằng từ khóa RESTRICT và CASCADE Sử dụng từ khóa RESTRICT có nghĩa làcột đó chi được xóa nếu không có cột nàophụ thuộc vào nó Từ khóa CASCADE có nghĩa là cột đó đượcxóa vàmọi cột phụ thuộc vào nócũng bị xóa
Thêm cột cho một bảng dữ liệu:
Ví dụ 3.18: thêm mới mộtcột vào bảngnhan_vien
ALTER TABLE nhan vien
ADDCOLUMN dia_chi varchar(lOO);
Câu lệnh trên thực hiện việc thêm một cộtcổ tên dia_chi có kiểu varchar (kiểu xâu ký tự có độ dài động), độ dài tối đa 100 ký tự, vào trong bảng quanhệ nhan_vien
Hoặc: Thêm mới mộtcột vào bảng nhan vien
ALTER TABLEnhan vien
ADD COLUMN gioi_tinh varchar(lO) NOT NULL;
Câu lệnh trên thực hiệnviệc thêmmột cột có tên gioi_tinh có kiểu varcharcó độ dài tối đa 10 ký tự và không được để trống vào ưong bảngquan hệnhan_vien
Xóa cột khỏi một bảng dữ liệu:
Khikhông muốntiếptục sử dụngmộtcột trong bàng nào đó, ngườidùngcó thể xóa cột đó khỏi bảngbằng lệnh ALTER TABLE và mệnhđềDROP COLUMN
Trang 29Ví dụ 3.19: Xóa mộtcột khỏi bàngnhan vien
ALTER TABLE nhan vien
DROP COLUMNgioi-tinh RESTRICT;
Câu lệnh trên thực hiện việc xóa cột gioi_tinh khỏi bảng dữ liệu nhan vien Chú ý, trong mệnh đề DROP COLUMN chỉ yêu cầu chi ra tên cột mà không cần miêu tả về kiểu dữ liệu của cột Từ khóaRESTRICT được sử dụng nhằm tránh khả năng xóacột gioi_tinhnếu có mộtcột nào đó phụ thuộc vào nó
Ví dụ 3.20: xóa mộtcộtcóphụ thuộc khỏi bảngnhan_vien
ALTER TABLEPhong
DROP COLUMN ManvRESTRICT;
Câu lệnh trên không thể thực hiện việc xóa cộtManv khỏi bảng dữ liệu nhan_vien do có sự phụ thuộc từ bàng Phong vào cột Manv này.Nếuđổi từ khóa RESTRICT trong câu lệnh trên thành từ khóa CASCADE,cột Manv sẽ bị xóa, tuy nhiên các cột dữ liệu phụ thuộc vào nó cũng bịxóa Việc sử dụngtừkhóaCASCADEcầnđượccân nhắc kỹ lưỡng
Đỗi tên bảng
Quá trình xây dựng một cơ sở dữ liệu, SQL cho phép người dùng được đổi tênnhững bảngdữ liệu đã được định nghĩa trước đó băng câu lệnh ALTER TABLE và mệnh đề RENAME TO
ALTER TABLE tên_bảng