1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Lâp trình sql căn bản đoàn thiện ngân

160 26 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 160
Dung lượng 30,39 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Cơ sớ dữ liệu quan hệ là một bộ p h ận cực kỳ quan trọ n g của chuyên ngàn h Công nghệ thông tin và ngôn ngữ SQL là phần tấ t yếu không th ể thiếu được của cơ sở dữ liệu quan hệ... VÍ DỤ

Trang 2

s § ĐOÀN THIỆN NGÂN (Chủ biên)

ĐOÀN THỊ THANH DIEM HOÀNG ĐỨC HẢI

NHÀ XUẤT BẢN LAO ĐỘNG XÃ HỘI

Trang 3

LỜI N Ó I ĐẨU

LỜI NÓI ĐẦ U

Quyển sách này được v iế t ra cho nhữ ng độc giả muốn có m ột kiến thức cơ b ản và tổ n g quan về ngôn ngữ SQL Ngôn ngữ SQL

là m ộ t ngôn ngữ m áy tín h ch u ẩn mực được dùng dể' giao tiếp với các Hệ Quản T rị Cơ Sở Dữ Liệu Quan Hệ Mặc dù các n h à sả n x u ất các Hệ Q uản T rị Cơ Sở Dữ Liệu Q uan Hệ thương m ại cung cấp các phiên bản SQL có n hiều n é t đặc trư n g khác nhau để hỗ trợ choriê n g từ n g sản phẩm của m ình, như ng chúng cũng hỗ trợ hầu h ế t các tiêu chuẩn của ngón ngữ SQL tổ n g quát

Đây là quyển sách r ấ t cần th iế t cho những người p h á t triể n phần mềm cơ sở dữ liệu Cơ sớ dữ liệu quan hệ là một bộ p h ận cực kỳ quan trọ n g của chuyên ngàn h Công nghệ thông tin và ngôn ngữ SQL là phần tấ t yếu không th ể thiếu được của cơ sở dữ liệu quan hệ

N h ằm mục đích m in h hoạ đầy đủ các n é t tổ n g q u át của ngón ngữ SQL, chúng tòi m ạn phép dùng P erso n al Oracle 8i, m ộ t sả n

p h ẩm d à n h riên g cho m áy tín h cá n h â n của công ty chuyên về cơ sở dữ liệu r ấ t nổi tiế n g O racle Mặc dù công ty Oracle đã dưa ra th ị trư ờ n g s ả n p hẩm O racle L ite 9i, nhưng chúng tôi chọn P e rsonal Oracle 8i (viết t ắ t P 0 8 ) vì nhiều lý do:

• P 0 8 th ích hợp với m áy tín h cá n h â n có cấu funh th ấ p (bạn có th ể cài đ ặ t trê n m áy có C PU C eleron 733 với 128 MBRAM , dĩ

n h iê n là nó sẽ chạy hơi chậm ở lần khởi động đầu tiên ), do đó các bạn dễ dàng có môi trường để th ứ nghiệm các cáu lệ n h SQL mô tả tro n g quyển sách này O racle L ite 9i th ì đòi hòi cấu h ìn h m áy m ạnh và nhiều bộ nhở RAM hơn nữa

• P 0 8 có th ể dow nload tự do tr ê n m ạn g I n te rn e t (w ebsite của công ty Oracle www oracle.com) về đ ể sử dụng, hay b ạ n có th ểmua với giá r ấ t rẻ tạ i nhữ ng điểm b án softw are th ô n g dụng

• P 0 8 hỗ trợ đầy đủ các tín h n ă n g th ô n g dụng điển h ìn h của ngôn ngử SQL

• P 0 8 có nhiều điểm m ạ n h của Hệ Quản T rị Cơ Sâ Dữ Liệu thương m ại điển hình

M ặc dù mục tiêu của quyển sách này n h ằ m giới th iệu những tín h c h ấ t cơ bản và tổ n g quan của ngôn ngữ SQL để các b ạn có

th ể d ù n g với b ấ t kỳ Hệ Q uản T rị Cơ Sở Dữ Liệu Quan Hệ khác, nhưng vì đặc tín h cúa các n h à sản x u ất Hệ Q uản T rị Cơ Sở Dữ Liệu

Q uan H ệ thương m ại luôn có kèm th eo nhữ ng chức n ăn g riên g b iệt để người sử dựng có n hiều tiệ n nghi hơn dể hệ th ô n g chạy tố t và

n h a n h h ơ n nên m ộ t sô đoạn code th ử n ghiệm tro n g quyển sách này cũng k h ông ngoài ngoại lệ đó Các bạn nên chú ý về sự k h á c b iệ t

á m ột sô tiểu tiế t dôi với O racle SQL và SQL chuẩn T ốt n h ấ t là bạn dọc qua quyển sách này để có kiến thức cơ b ản tổ n g q uan về

ngôn ng ữ SQL và khi làm việc với m ộ t Hệ Q uản T rị Cơ Sở Dừ Liệu Quan H ệ thương m ại th ì bạn nên th a m khảo th ê m tà i liệu của

c h ín h n h à sán x u ất H ệ Q uản T rị Cơ Sỡ Dữ Liệu Quan Hệ thương m ại này đê’ tậ n dụng th êm các chức n à n g đặc b iệt của nó

S ử dụng O racle cũng có điểm b ấ t tiệ n cúa nổ, th í dụ nh ư do tín h báo m ậ t cao nên O racle đòi hỏi người sử dụng p h ải d ù n g tr ìn h tiệ n ích củ a nó m ới có th ể tạo dược m ột d a ta b a se mới; do đó chúng ta không th ể dễ dàng th ử lệnh SQL chuẩn c r e a te d a ta b a s e n h ư

tro n g các H ệ Q uản T rị Cơ Sở Dữ Liệu Quan Hệ thương m ại khác

Cuối quyển sách, chúng tôi có m ột phụ lục giới th iệu về H ệ Quản T rị Ca Sở Dữ Liệu Quan Hệ mã nguồn mở là MySQL đ ể các

b ạ n có đ iều kiện th ử từ các lệ n h cơ b ản n h ấ t của ngôn ngữ SQL chuẩn MySQL không m ạnh và chưa hỗ trợ h ế t các tiêu ch u ẩn của

SQ L (n h ư chưa hỗ trợ khóa ngoại, .), như ng nó là môi trường r ấ t tố t cho chúng ta th ử lện h cơ bdn của SQL C húng tôi cũng giới th iệ u

tro n g p h ụ lục này các tiệ n ích của M ySQL để các bạn có một phương tiện dùng th ử p b ần m ềm m ã Iiguồn mở không tốn tiề n m ua m à

r ấ t tiệ n n g h i và giao d iện r ấ t dẹp m ắt

H ầ u h ẽ t các ví dụ và bài tậ p được chúng tôi ghi trê n C D -RO M kèm theo sách và chúng tôi dã th ử nghiệm tro n g m ôi trư ờ n g

P erso n al Oracle 8, m ột số th í dụ cùng bài tậ p của chương 3 đã được chạy th ử với MySQL p h iên bản 4.0.15 trê n nền m áy C elero n 733với 256 M B RAM

M ặc dù đã cố g ắn g r ấ t nhiều nh ư n g k h ông th ể không có những th iếu só t và khiếm k h u y ết tro n g quyển sách, m ong r ằ n g các độc giả c h â n th à n h góp ý và chúng tôi xin chân th à n h ghi n h ậ n các đóng góp để có th ể có quyển sách hoàn chỉnh hơn tro n g lầ n tá i

b ân kê tiế p

T h à n h phô’ Hồ C hí M inh, ngày 30 th á n g 8 n ăm 2003

M K P U B mk.pub@ cinet.vnnews.com http://w w w m inhkhai.com vn

LỜI NGỎ

K ín h th ư a quý B ạn dọc gần xa, Ban x u ất bản M K.PUB trước h ế t xin bày tó lòng b iế t ơn và niềm vinh h ạ n h trước n h iệ t tìn h của đông đảo B ạn đọc dôi với tủ sách M K.PUB tro n g thời gian qua

K h ấ u hiệu của chúng tôi là:

* Lao động khoa học nghiêm túc

* C h ất lượng và ngày càng c h ấ t lượng hơn

* T ấ t cả vì Bạn đọc

R ấ t nhiều B ạn đọc đă gửi m ail cho chúng tôi dóng góp nhiều ý kiến quý báu cho tủ sách.

Bían x u ất bán M K.PUB x in được k ín h mời quý Bạn đọc th a m gia cùng n ân g cao ch ấ t lượng tủ sách của chúng ta

T ro n g quá tr ìn h đọc, xin các B ạn ghi chú lại các sai sót (dù nhỏ, lớn) của cuốn sách hoặc các n h ậ n x ét của riên g B ạn Sau đó

x in gửi V'ề địa chỉ:

E -m ail: m k.book@ cinet.vnnew s.com ; m k.pub@ cinet.vnnews.com

Nĩếu Bạn ghi chú trực tiế p lên cuốn sách, rồi gửi cuốn sách đó cho chúng tôi th ì chúng tôi sẽ xin hoàn lại cước p h í bưu đ iệ n vàgửi lại c h o Bạn cuôn sách khác

C h ú n g tôi xin gửi tặ n g m ột cuốn sách của tủ sách MK.PUB tùy chọn lựa của Bạn theo m ột danh mục thích hợp sẽ được gửi tới Bạn

V ứi mục đích ngày càng n ân g cao c h ấ t lượng của tủ sách MK.PUB, chúng tôi râ't m ong n h ậ n dược sự hợp tác của quý B ạn dọcgần xa

M K.PUB và Bạn đọc cùng là m !"

M K P U B

Trang 4

MỤC LỤC

MỤC LỤC

LỜ I N Ó I Đ Ầ U 3

L Ờ I N G Ỏ - 3

M Ụ C L Ụ C 4

CHƯƠNG 1: G IỚ I T H IỆ U VỂ SQ L VÀ c ơ SỞ DỮ L IỆ U QUAN H Ệ 7

1 N gôn ngữ S Q L 7

2 H ệ q u ản tr ị cơ sở dữ liệu q u an h ệ 7

3 K hoá ứng v iên và k h o á c h ín h của quan h ệ 8

4 K hoá ngoại (F o reig n K ey - F K ) 9

5 T o án tử q u an h ệ 10

5.1 T o án tử lựa chọn (S election) 10

5.2 T o á n tử chiếu (P ro je c tio n ) 10

5.3 T o án tử k ế t b ằ n g (E q u ijo in ) 11

6 P h ạ m vi cùa thuộc tín h v à cách th i ế t lậ p 11

7 Quy ước đ ặ t tê n cho đôi tượng C S D L 12

8 Cấu trú c lệ n h SQ L 12

9 Tương tá c với H Q TC SD LQ H O racle b ằ n g S Q L * P lu s 12

10 T ạo b ả n g 13

11 Đ ưa dữ liệu vào b ả n g 1 5 A.Í2 L ệ n h COM M IT và R O LLBA CK 15

13 L ệ n h S E L E C T 17

14 Cơ sơ dữ liệu m ẫ u 18

14.1 C ác b ả n g tr o n g C SD L S p o rtin g G o o d s 18

14.2 R à n g buộc to à n v ẹn th a m chiếu của CSD L S G 19

14.3 R à n g buộc bổ su n g cho CSDL S G 19

15 C ập n h ậ t v à xóa các dòng dữ liệu thuộc b ả n g 20

15.1 L ệ n h U PD A TE b ả n g 20

15.2 L ệ n h D E L E T E v à T R U N C A T E 20

15.3 L ệ n h D RO P T A B L E 22

Bài tậ p có lời g i ả i 22

Bài tậ p bổ s u n g 29

Lời g iải cho b à i tậ p bổ su n g 29

CHƯƠNG 2: TOÁN T Ử QUAN H Ệ TR O N G S Q L 31

1 T o án tử chọn lựa (S e le c tio n ) 31

2 Đ ịn h d a n h cho tiê u đề cộ t 32

3 T oán tử ch iếu (P ro jectio n ) 33

4 T oán tử nôl (J o in ) 33

4.1 P h é p k ế t b ằ n g 34

4.2 Đơn g iả n h ó a câu tru y v ấ n b ằ n g đ ịn h d a n h b ả n g 34

4.3 H iệu c h ỉn h k ế t quả câu tru y v ấ n : 35

4.4 P h é p tự k ế t 35

4.5 P h é p k ế t ngoài (O u ter jo in ) 35

5 Tạo k h o á n g o ạ i 36

5.1 Đ ịn h n g h ĩa k h o á ngoại lúc k hở i tạo b ả n g 36

5.2 Đ ịnh n g h ĩa k h o á ngoại cho b ả n g có s ẵ n 36

6 Đ ịnh n g h ĩa k h o á c h ín h cho b ả n g đ ã tồ n t ạ i 36

7 Giới h ạ n g iá tr ị n h ậ p cho cột b ằ n g rà n g buộc C H E C K 37

8 BỔ sung cột cho b ả n g có s ẵ n 37

9 Hiệu c h ỉn h c ộ t 38

10 Gỡ bỏ rà n g buộc tro n g b ả n g 38

B ài tậ p có lời g i ả i 38

Trang 5

MỤC LỤC 5 m

Bài tập bổ su n g 42

Lời giải cho bài tậ p bổ su n g , 42

C H Ư Ơ N G 3: TO Á N T Ử B O O L E A N VÀ Đ Ô Ì SÁ N H M A U 44

1 Toán tử B oolean 44

1.1 Toán tử A N D 44

1.2 T oán tử O R 44

1.3 T oán tử N O T 45

1.4 T h ứ tự ưu tiê n của các toán tử 46

2 Đũi sá n h m ẫu - Câu lệ n h LIKE và các ký tự đại d iệ n 48

2 1 Dấu gạch dưới _ 49

3 Đối s á n h tr ị với m ột tậ p hợp các giá t r ị 49

3.1 T oán tử B E T W E E N 49

3 2 T oán tử I N ' 50

B ài tập có lời g i ả i 51

B ài tập bố su n g 55

Lời giải cho bài tậ p bổ s u n g 56

CH Ư Ơ N G 4: P H É P T O Á N s ố H Ọ C VÀ CÁC HÀM XÂY D ự N G s ả n t r o n g S Q L GO 1 Các ph ép toán sò’ h ọ c 60

2 Các hàm xây dựng s ẵ n 61

3 Các hàm xử lý s ô 61

3.1 H àin A BS(m ) 62

3.2 H àm M O D (m n) 62

3.3 H àm PO W E R (m ,n) 62

3.4 H àm ROUND (mí, n j ) 63

3.5 H àm T R U N C Ím /n /) 64

3.6 Các hàin lồng n h a u , 64

4 H àm xử lý ký t ự 65

4.1 H ằin chuyển đổi (lạng eliữ hoa, th ư ờ n g 66

4.2 H àm nối c h u ỗ i 66

4.3 H àm đệm và c ắ t c h u ỗ i 67

4.4 ỉlà m th ay t h ế 68

4.5 H àm xác đ ịn h chuỗi c o n 68

4.6 H àm trả về giá tr ị sô’ n g u y ên 69

5 H àm chuyển đ ổ i 70

5.1 T hao tác tr ê n giá tr ị N U L L 70

5.2 ( ’huyển đổi chuỗi và sô" 70

Bài tậ p có lời g iả i 72

Bài tậ p bổ s u n g 77

^ Lời giải cho bài tậ p bố s u n g 78

C H Ư Ơ N G 5: CÁC H À M N H Ó M 82

1 Giới th iệu h àm n h ó m 82

2 H àm SUM (n) và AVG (n) 82

3 H àm MAX(n) và M IN Ơ i) 83

4 H àm COUNTO 83

4.1 H àm COU NTÍ*) 83

4.2 H àm COU NT(ALL n) và COU N T(n) 84

4.3 H àm C O U N T lD ISTIN C T n ) 84

5 K ết hợp hàm đơn v à h àm n h ó m 84

6 H iển th ị th ô n g tin n h ó m 84

6.1 M ộnh đề G RO U P B Y 84

6.2 M ộnh dề H A V IN G 85

Trang 6

MỤC LỤC

Bài tậ p có lời g iá i 86

Bài tậ p bổ su n g 89

Lời g iải cho b à i tậ p bổ su n g 89

CHƯƠNG 6: DỮ L IỆ U T H Ờ I G IA N TR O N G S Q L 91

1 Giới th iệ u về dữ liệu kiểu n g ày và g i ờ 91

2 P h ép tín h sô" học tr ê n dữ liệu kiểu n g à y 91

3 H àm xử lý dữ liệu n g à y 92

3.1 H àm xử lý ngày t h á n g 92

4 Đ ịn h d ạ n g dữ liệu n g à y 93

4.1 H àm TCLDATEO và TO C H A R O 93

4.2 H àm ROUNDO và h à m TRU N CO 94

4.3 C ác h à m GREATEST!) và LEA STO 95

4.4 H àm N EW TIM KO 96

Bài tậ p có lời g i ả i 96

Bài tậ p bổ s u n g 99

Lời giải cho b ài tậ p bổ su n g 99

C H Ư Ơ N G 7: T R U Y V Â N P H Ứ C H Ợ P v à t o á n t ử t ậ p h ợ p ^102

1 Câu tru y v ân lồng n h a u (S u b q u e rie s) 102

1.1 C âu tru y vân con đơn d ò n g 102

2 Câu tru y v ấ n tương quan (C o rrelated Q u eries) .1 0 4 3 T ạo b ả n g b ằ n g câu tru y v ấ n c o n 104

4 C ập n h ậ t b ản g b ằ n g câu tru y v ấn c o n 105

5 C h èn th ô n g tin vào b ả n g b ằ n g câu tru y v ấn c o n 105

6 Xoá dữ liệu b ằ n g câu tru y v ân c o n 106

7 T ậ p hợp to á n t ử 106

7.1 T o án tử IN T E R S E C T 106

7.2 T o án tử M I N U S 107

Bài tậ p có lời g i ả i 107

Bài tậ p bổ s u n g 110

Lời giải cho b ài tậ p bổ su n g 111

CHƯƠNG 8: BẢO M ẬT TRO N G S Q L 112

1 Bảo m ậ t dữ l i ệ u 112

1.1 Xác n h ặ n chủ quyền (A u th e n tic a tio n ) 112

1.2 C ấp q u y ề n 112

2 G iấu dữ liệu b ằ n g v iew 115

2.1 T ạo v ie w 115

2.2 C ập n h ậ t v ie w 115

Bài tậ p có lời g i ả i 116

Bài tậ p bổ s u n g 117

Lời giải cho b à i tậ p bổ su n g 117

P H Ụ L Ụ C A : s ử D Ự N G P E R S O N A L O R A C L E 118

P erso n al O racle là g ì? 118

Khởi động SQ L P lus làm việc với P e rs o n a l O ra c le 119

P H Ụ L Ụ C B: s ơ Đ ồ c ú P H Á P C Ủ A M Ộ T s ố L Ệ N H T R O N G N G Ổ N N G Ữ S Q L 124

P H Ụ L Ụ C C: S ơ Đ ồ T H ự C T H Ể Q U A N H Ệ E -R VÀ CÁ C Đ O Ạ N K ỊC H B Ả N c ơ S Ở DỮ L I Ệ U 135

PHỤ LỤC D: TẠO BÁO B i ể u TRO N G S Q L *P L U S 147

P H Ụ L Ụ C E : s ử D Ụ N G M Y S Q L 153

P H Ụ LỤ C F : s ử D Ụ N G Đ ĨA C D -R O M K È M T H E O 158

Trang 7

Chương 1: G iớ i t h i ệ u v ề S Q L v à cơ sở d ữ li ệ u q u a n h ệ

C huẩn SQL do H iệp Hội Tiêu C huẩn Quốc T ế (IS O viết tắ t của cụm từ In te rn a tio n a l S ta n d a r d s O rganization) và V iện Tiêu

C h u ẩn Quốc G ia H oa Kỳ (A N S I - A m erican N a tio n a l S ta n d a r d In stitu te ) đ ịn h nghía T ên c h ín h thức của chuẩn này là n g ô n n g ữ

c ơ s ở d ữ l i ệ u c h u ẩ n h ó a q u ố c t ế S Q L 1992 (In te rn a tio n a l S ta n d a r d D atabase Language S Q L 1992) P h iê n b á n sau cùng của

c huẩn này được gọi là SQL/92 hay SQL2 T rong p h am vi quyển sách này, chúng tôi gọi c h u ẩn n ày là ch u ẩn SQ L A N SI/ISO h ay n g ấn gọn là chuẩn SQL Vào n h ữ n g năm đầu của th ậ p n iê n 70, ngôn ngữ SQL có tê n gọi là S E Q U E L - S tr u c tu r e d E n g lis h Q u e ry Language Lúc đó SE Q U E L là m ột p h ần trong hệ th ô n g R, đây c h ín h là m ột mô h ìn h H Q TCSD LQ H nguyên m ẫu của h ã n g IBM Sau

đó, từ E n g lish bị lược bỏ d ầ n v à tê n gọi chỉ còn là SQL C ông ty O racle, tiề n th â n là công ty R elatio n S oftw are, đ ã giới th iệ u p h iên

b ản thương m ại đầu tiê n của ngôn ngữ này vào năm 1979

Mặc dù hầu h ế t các n h à cung cấp CSDL đều hổ trợ SQ L/92 n hư ng lại k h ô n g tu â n th ủ h o àn to à n các nguyên tắ c của c h u ẩn này

Vì vậy, trê n th ị trườ ng h iệ n n ay có r ấ t nhiều p h iên b ả n SQL N guyên n h â n c h ín h của việc m ồ rộ n g c h u ẩn là n h ằ m tă n g tí n h thư ơ ng

m ại cho s ả n phẩm ; vì t h ế tro n g quyển sách này, chúng tôi chi á p dụng chuẩn SQ L/92 mỗi k h i có th ể C ác m in h họa sẽ được thự c h iện tro n g Pẹscmal O racle 8i, p h iê n bản m áy tín h cá n h â n của H Q TCSD L O racle Khi gặp n h ữ n g p h ầ n mở rộ n g hay th a y đổi so với ngôn ngữ chuẩn, c h ú n g tôi sẽ tr ìn h bày sự khác b iệ t và tín h riăng riê n g của m ộ t sô p h iê n bản

SQL là ngôn ngữ kh a i báo hay còn gọi là ngôn ngữ p h i th ủ tục X ét th eo quan điểm của các lậ p tr ìn h v iên , diều n ày có

n g h ĩa là: Với SQL họ k h ô n g cần quan tâm đến th ứ tự công việc m áy tín h cần thực h iện T h ay vào đó, họ chỉ đ ịn h k ế t quả cần đ ạ tđược cho HQTCSDL, rồi đ ể H QTCSDL tự quyết đ ịn h cách h iệ n th ự c n h ằ m đ ạ t được k ế t quả m ong m uôn

Các lệ n h trong ngôn ngữ SQL được chia th à n h hai loại ch ín h , gọi là các tiểu tập hạp ngôn ngữ d ữ liệu (d ata sub-languages)

N g ô n n g ữ đ ịr ih n g h ĩa d ữ liệ u 1 (Data D efinition Language - DDL), gồm các lệnh CREATE, ALTER, DROP định nghĩa, th a y dổi và

huý bỏ các đối tượng cơ sở dữ liệu (CSDL) như tab le (bàng), index (chỉ mục), sequences (trìn h tự) và view (k hung n h ìn hay nói cho đúng

n g h ĩa view ch ín h là báng dữ liệu ảo [ảo vì tự bản th â n nó không chứa dữ liệu] liên kết dữ liệu từ các bảng dữ liệu th ậ t theo n hữ ng tiêu chuẩn được đ ặ t ra) T ập hợp ngôn ngữ lệnh còn lại, n g ô n n g ữ v ậ n d ụ n g d ữ liệ u (Data M anipulation Language - D M L), gồm các

lện h SELECT, IN SERT, D ELETE, UPDATE cho phép bạn thao tác trê n đõi tượng dữ liệu, ớ đây điểụ quan trọ n g m à bạn cần ghi nhớ là

tấ t cả đối tượng tạo ra tro n g CSDL dều dược lưu tro n g t ừ đ iể n d ữ liệ u (data dictionary) hay tro n g d a n h m ụ c (catalog).

B ạn có th ê sủ d ụ n g ngôn ngữ SQL ở d ạn g tương ta c hay d ạ n g n húng S Q L d ạ n g tư ơ n g t á c cho p h ép b ạn gùri trực tiế p câu

lệ n h đến HQ TCSD L và n h a n h chóng n h ậ n k ế t quả tr ả về Đối với S Q L d ạ n g n h ú n g , các câu lện h SQ L được chứa tro n g chương

tr ìn h v iết b ằ n g ngôn ngữ cấp cao đ a n ă n g n h ư c , C++, hay COBOL Mục dích c h ín h cúa việc dùn g ngôn ngữ SQ L d ạ n g n h ú n g là n h ằm

tậ n dụng các tín h n ăn g lậ p tr ìn h không được SQL hỗ trợ N ếu dùn g SQL d ạn g n h úng, b ạn k h ô n g trực tiế p n h ậ n k ố t quả tr ồ về từ câu lện h SQL T h a y vào đó, k ế t quả được tru y ền vào các b iến hay th a m sô của th ú tục

M ột cách tổ n g q u át, n hữ ng lệ n h SQL có k h ả n ă n g sử d ụ n g ở d ạ n g tương tá c đều có th ể dược dùn g tro n g các tr ìn h ứng dụng Tuy n h iên tro n g m ộ t số trư ờ n g hợp, cú p h á p của h a i d ạn g n ày có p h ầ n nào k h ác b iệt, b ạn cần lưu ý k h i sử dụng T ro n g tậ p sách này, chúng tôi chỉ tr ìn h bày câu SQ L ở d ạn g tương tác

Vì SQL chỉ áp dụn g tro n g các HQTCSDL quan h ệ, do đó b ạn cần có k h ái n iệm cơ b ả n về CSDL q u an h ệ đ ể th ấ u h iểu dược mọitín h n ă n g của ngôn ngữ này

2 HỆ QUẢN TRỊ c ơ SỞ DỮ LIỆU QUAN HỆ

H ệ q u ă n t r ị c ơ s ở d ữ liệ u (từ đây về sau chúng tôi v iế t t ắ t là HQTCSDL) là p h ần m ềm cho p h ép b ạ n đ ịn h n g h ĩa, khởi tạo,

báo tr ì cơ sở dữ liệu và cung câp các tru y x u ất điều k h iể n đến d ữ liệu T h ô n g thư ờ ng, th u ậ t ngữ c ơ s ở d ữ l iệ u ám chỉ kho dữ liệu

được lưu trữ; tuy n h iê n tro n g các hệ CSDL tin học hóa, CSDL còn bao gồm n h iều th à n h p h ầ n k h ác n h ư p h ầ n cứng, p h ẩ n m ềin, v à cả người sử dụng T rong các hệ th ô n g này, dữ liệu được tru y x u ấ t th ô n g qua các tr ìn h ứng dụn g hoặc giao d iệ n do H Q TC SD L cung câ”p Người sử dụng chĩ giao tiế p được với HQTCSDL sau k h i đ ă n g n h ậ p (log in) với m ột tê n người sử dụ n g (use rn a m e) và m ậ t khẩu

(p assw ord) hợp lệ Sau k h i đ ăn g n h ập th à n h công, người dùng b ắ t đầu m ột p h i ê n là m v iệ c (session) P h iê n làm việc k ế t thúc khi

người này th o á t khỏi h ệ th ố n g (log o u t) hay ngừng k ế t nối (d isc o n n e c t) với CSDL B ạn h ãy xem cách thứ c d ă n g n h ậ p vào CSDL

p h iên bản O racle P e rso n a l 8i ở p h ần phụ lục A cuối sách

T ập hợp các sự k iệ n được tr ìn h bày tro n g CSDL được gọi là hệ th ố n g các d iễ n g iả i (universe o f discourse - UOD) UOD chí

bao gồm các sự kiện c h ặ t chẽ và phù hợp cho người sử dụng Vì vậy CSDL p h ải được th i ế t kế, xây dựng và p h á t tr iể n dựa tr ê n yêu cầu của n hữ ng người sử dụn g đặc th ù và mục đích sử dụng cụ th ể

H ệ Q u á n t r ị c ơ s ở d ữ l i ệ u q u a n h ệ (H Q TCSDLQ H ) là hệ quản tr ị dữ liệu dựa tr ê n mô h ìn h dữ liệu q u an hệ Đối với loại

*CSDL này, m ọi th ô n g tin tạ o n ên UOD được gọi là q u a n h ệ (re la tio n s) T h u ậ t ngữ quan hệ được sử d ụ n g tro n g r ấ t n h iều lin h vực;

tuy n h iê n dưđi góc n h ìn CSDL tro n g quyển sách này, quan h ệ là m ộ t b ả n g dữ liệu h ai chiều T ro n g CSDL, b ả n g và qu an h ệ đều là các dôi tượng lưu tr ữ dữ liệu H ai th u ậ t ngữ này có n g h ĩa tương tự n h au , có th ể -sử dụn g h o án đổi cho n h au Mỗi quan h ệ bao gồm tê n và

tậ p hợp các c ộ t (hay còn gọi là th u ộ c tín h ) Dữ liệu x u ất h iệ n tro n g b ả n g là tậ p hợp các h à n g (hay còn gọi là b ộ d ữ liệ u ) T ổng số

thuộc tín h chứa tro n g q u an h ệ th ể h iện m ứ c đ ộ lớ n (b ậ c ) c ủ a q u a n h ệ (degree), còn tổ n g sô' h à n g có tro n g q u an hệ là c h í n h sô

c ù a q u a n h ệ (cardinality).

1 Theo chuẩn A NSI, ngôn ngữ đ ịn h n g h ĩa dữ liệu - DDL còn được gọi là ngôn ngữ đ ịn h n g h ĩa g ián dồ (S chem a D efin itio n Language)

Trang 8

m 8 C h ư ơ n g 1: Giới thiệu về S(ịL và cư sư dữ Ill'Ll quan hệTheo chuẩn ANSI/ISO, trong quan hệ mỏi cột dược dịnh nghĩa bới tên cột, thoa tín h duy n h á t trong phạm vi bang du' liệu

N ghĩa là các cột thuộc óng bảng khĩng ih é trú n ịí tịn Ngối ra, SQL chuấn khơng đưa ra b ất kỳ giới h ạn nào cho tổ n g số cột hay

tổ n g sơ’ h àn g mà m ột b an g được phép chứa N hung thịng thường các nhã sá n xuất qui đ ịnh giới h ạ n cho số cột, cịn sị’ h àn g th i khơng Điều n ày cho p h ép b an g dử liệu khĩng chứa híing nao cá (báng rỗng) nhưng b ắt buộc phái cĩ ít, n h ấ t m ột cột

B ạn h ãy xem cách tr ìn h bàv quan hệ CUSTOM ER ORDER ớ dạng báng hai chiêu tro n g h ình 1-1

Hình 1-1 Quan hệ CUSTOM ER O R D ER ớ dạng báng hai chiều.

N h ìn vào h ìn h 1-1, ta th ấ y quan hệ C U S T O M E R _ O R D E R gồm bốn thuộc tín h : Id , Datc_O redcrcd Date sh ip p e d ,

P aym ent_Type và ba h à n g dữ liệu N hư vậy, quan hệ này cĩ mức độ lớn (sơ cột) bhng 4 và chính số (sơ’ địng) là 3.

C húng tĩi giả sử rằ n g mỗi mục n h ậ p của quan hệ chỉ chứa tối đa m ột giấ trị N g h ĩa là, tạ i giao điểm của mỗi cột và mối hàng,chỉ cĩ m ột giá tr ị đơn.2 Với quan hệ r cho trước cĩ thuộc tín h A và bộ dữ liệu t, chúng tịi dùng ký hiệu t(A ) biếu d iễn giá tri cùa bộ dử

liệu t tạ i vị tr í cột A N hư vậy, t(A ) chính là giá trị tạ i giao điểm cua cột A và hang t.

VI DỤ 1.2

Trong quan hệ CUSTO M ER_O RDER ở Hình 1-1, nếu t là bộ dữ liệu đầu tiên và A là thuộc lính bất kỳ cùa quan hộ thì t(A) gồm nhũlig g ij Irị Iiào?

Nếu gọi t là bộ dữ liệu dầu ticn, thì:

M iền giá trị của m ột thuộc tín h là tậ p hợp tấ t cà giá trị cĩ th é x u ất h iện (rong thuộc tín h này cùa quan hệ Cho quan hệ r cĩ

thuộc tín h A với mỗi bộ dữ liệu t của quan hệ r, t(A) p h ải là m ột p h ần tứ cúa m iền giá tr ị A: t(A) e Doniain(A).

VÍ DỤ 1.3

Xác định miền giá trị cùa các thuộc tính trong quan hệ CUSTOMER ORDER ở hình 1 -1.

T rong trường hợp này, chúng tơi giả sử:

M iền giá tr ị của thuộc tín h Id là tập hợp các số nguyên dương Miền giá tri cúa thuộc tín h Date Ordered và Date sh ip p e d là tập

hợp các giá tr ị ngày hợp lệ Thuộc tín h cuối cùng, Paym ent_Type cĩ miền giá trị là tập hợp các chuỗi ký tự sau: leash, credit, money order, check, purchase order, credit card, debit card, unkuownl Miền giá trị cúa các thúộc tín h được biểu diễn bkng kí hiệu n h ư sau:

D o m a in (id ) = T ập hợp các số nguyên dương

D o m a in (P a y m e n t_ ty p e ) = leash, credit, m oney order, check, purchase order, cred it card, d eb it card, unknow n I

D o m a in (D a te _ O rd e re d ) = D o m ain (D ate_ S h ip p ed ) = tậ p hợp các giá trị ngày hợp lệ

Chú ý, tro n g b ản g CUSTOM ER_ORDER, ứng với mỗi h àn g t và thuộc tín h A t(A) là m ột p h ẩn tử thuộc m iền giá tri cúa thuộc tín h A tương ứng

3 KHỐ ỨNG VIÊN VÀ KHỐ CHÍNH CỦA QUAN HỆ

K h o á là khái niệm cơ b ản của mơ h ìn h quan hệ, nĩ cung cấp cơ chê cơ bản cho việc th u th ậ p các bộ dữ liệu tro n g CSDL Giả

sử quan hệ r gồm các thuộc tín h Ai, Aí, A3, An, tậ p hợp con K của các thuộc tín h này được xác địn h bởi: K = {Ai, A -ir A,} được gọi

là khố ứng viên nếu K th o ả h ai điều k iện sau:

Với h ai bộ dữ liệu t l và t2 p h ân b iệt tro n g quan hệ r, p h ái tồn tạ i m ột thuộc tín h B của K sao cho t,(B ) * t a(B ) N ghĩa là r

k hơng được chứa h a i bộ dữ liệu cĩ cùng giá tr ị tr ê n mọi thuộc tín h của K Đây là điều k iện về t í n h d u y n h ấ t cúa khố (Uniqueness

p roperty o f th e key).

K hơng cĩ tậ p con K’ nào của K th o ả tín h duy n h ấ t của khố Nĩi cách khác, khi ta loại bỏ m ột p h ần tử b ấ t kỳ tro n ? K thì tậ p

n ày p h ả i m ấ t đi tín h duy n h ấ t Đây là điều k iệ n về t í n h tố i t h i ể u c ủ a k h o á (m in im a lity property o f the hey), đảm bao số lượng

thuộc tín h tạo n ê n khố là nhỏ n h ấ t

Vì tro n g r cĩ th ể cĩ n h iều khố ứng viên, m ột tro n g các khố ứng viên này sẽ được chí đ ịn h làm k h o á c h í n h (P r im a r y K e y

■ P K ) của quan hệ Giá tr ị của khố chín h được dùng như cơ chê định địa chỉ quan hệ M ột khi khố chính được chọn, cát k hcá ứngviên cịn lại, nếu tồ n tạ i, dược gọi là k h o á lự a c h ọ n (alternative key) HQTCSDLQH chí cho phép mỗi b ăn g cĩ duy n h ấ t m ột khốchính K hố c h ín h cĩ th ể là m ột thuộc tín h đơn (single p rim a ry key) hay do nhiều thuộc tín h tạo nên (com posite p r in a r y key)

T rong p h ạm vi quyển sách này, đ ể dễ p h â n biệt, chúng tơi gạch dưới nhữ ng thuộc tín h là khố chính Ớ ví dụ 1.1 nêu t r ê i , quan hệ CUSTOM ER_ORDER cĩ khố c h ín h là Id, do đĩ b ảng này khơng th ể chứa hai đơn h à n g cĩ cùng giá trị Idiĩ

Vì khố c h ín h cĩ tá c dụng n h ậ n d ạn g tín h duy n h ấ t của bộ dữ liệu tro n g quan hệ, nên các thuộc tín h tạo khố chinh khơng được p h ép chứa giá tr ị NULL Đây là m ột rà n g buộc đơi với khố chính được gọi là r à n g b u ộ c to à n v ẹ n (in teg rity constraint) Giá

2 Điều này đảm bảo cho quan hệ ở d ạn g chuẩn 1

Trang 9

C h ư ơ n g ' 1: G iớ i t h i ệ u v ề S Q L v à cơ s ở d ữ liệ u q u a n h ệ

tr ị N'IỈI.1 biểu diễn dữ liệu bị khuyêt k h ông ro hay không thích hợp Bạn đọc hãy nhớ ràniỉ NULL không phãi là giá trị 0 cũng

kh ông bii-u đ icn m ột giá trị đặc biêt nào tro n g m áy tín h :1

VÍ DỤ 1.4

Rnn h.ìv nuan hnnp DEPT và các hànp dừliôu dưới đ«ĩv sau dó rho hiêt In ró thô rhòn r.ic h.ìnp n.ìv vàn h-ỉnp DFPT khônp tni snn?

10 R esearch New York 1500000 -Hàng này không th ể chèn vào được vì vi phạm tín h duy n h ấ t cúa khoa

chính T rong báng DEPT đã tồn tạ i phòng ban có Id là 10

A ccounting A tla n ta 1200000 - H àng này không thề’ chèn vào được vì vi phạm rà n g buộc to àn vẹn tr ê

khoá chính: Id cùa phòng ban không thế' là giá tr ị NULL

15 C om puting M iam i 1500000 - H àng này có th ê chèn vào báng DEPT vì không vi phạm rà n g buộc nào cả

4 KHOÁ NGOẠI (FOREIGN KEY - FK)

K h u á n g o ạ i là khái niệm miêu tá các cột cỏ củng m iền dừ liệu, dùng._dể liên k ế t các bang tro n g CSDL với nhạy N hờ vào

khoá ngoại, các h à n g của 2 quan hệ hay các h à n g tro n g cùng m ột quan hệ có th ê liễn kết, nhau m à vân bảo đám tín h th ố n g n h ấ t

G iả sứ cơ sớ dữ liệu A có 2 quan hệ ri và r2 '\ tậ p hợp các thuộc tín h FK cùa quan hệ ri dược gọi là lỉhoá ngoại (foreign key)

của n (tro n g quan hệ với ra) nếu t.ập này th o ả hai diều kiện sau:

• C ac thuộc tín h FK p h ải có cùng m iền dử liệu cơ bản với tậ p hợp các thuộc tín h được đ ịnh nghĩa là khoá chính - PK - cùa ra Cácthuộc tín h FK được xem là th am chiếu đến thuộc tín h PK cùa quan hệ r2

• G iá trị của các thuộc tín h FK tro n g bộ dữ liệu b ấ t kỳ cúa quan hệ ri hoặc chứa giá tr ị NULL hoặc phải thuộc m iền dừ liệu cũa cácthuộc tín h PK tro n g quan hệ r 2

T rong thưc tế, k h ái niệm khoá ngoại đ ảm bảo cho các bộ dữ liệu cùa quan hệ r l chí th a m chiếu đến các bộ dữ liệu t h ậ t sự tồn

tạ i tro n g quan h |% 2 Giới h ạn n ày đôi với khoá ngoai gọi là r à n g b u ộ c to à n v ẹ n th a m c h i ế u (referential integrity constraint)

M ột sỗ tác giả gọi b ản g chứa khoá ngoại là b ả n g c o n (child table), còn báng chứa thuộc tín h được th ain chiếu đến (PK) gọi là b á n g

c h a (parent (able) N hư vậy, giá trị FK tro n g mỗi bộ dữ liệu của báng con chi có th ể là NULL hoặc phái thuộc m iền giá tr ị của khoá

c h ín h hay trư ờ n g dữ liệu có tín h duy n h ấ t của b ản g cha

N hận th ấy khỏng có phòng ban nào có id=30 khi ta n h ìn vào b ả n g DEPARTM ENT N hư vậy, h àn g này vi phạm rà n g buộc toàn vẹn th am chiếu cùa khoá ngoại n ên không thế’ chèn vào được

H àng này chèn vào được vì không vi phạm rà n g buộc nào cá

N U L L ‘S -Vì cột EM P_D EPT được phép chứa giá trị NULL nén h à n g này có th ể chèn

vào được G iá trị NULL cho biết n h ân viên này không thuộc phòng ban nào cả

40

3 T ro n g SQL, k ế t quả so s á n h NULL với các giá trị khác là không xác đ ịnh được

4 T heo định n g h ĩa cùa khóa ngoại, ri và r 2 có th ể trù n g nhau

5 T h u ậ t Iigữ “ t ừ k h ó a ” m iêu tả nh ữ n g từ có tê n theo quy đ ịnh trước và có ý nghĩa dặc trư n g tro n g hệ thống

Trang 10

C h ư ơ n g I : Giới thiệu về SQL và cơ sở dữ liệu quan hệ

5 TOÁN TỬ QUAN HỆ

T o á n t ử q u a n h ệ là tậ p hơp những toán tử cho phép người dùng thao tác trên các bảng tro n g CSDL Mọi to án tử quan hệ

dều th o ả m ãn t í n h b a o đ ó n g (closure property), vì chúng thao tác trên quan hệ đẽ tạo ra quan hệ inới Khi m ột to á n tử th ao táctrê n quan hộ, ta nói to á n tử này đã được "cài đ ặt” vào quan hệ Trong phần này, chúng tôi chí đề cập đến p h é p lự a c h ọ n (Selection),

p h é p c h i ê u (projectio n), và p h é p k ế t bằng (equijoin) P h ần cài đ ặ t các phép toán trong SQL sẽ được tr ìn h bày ở chương hai.

5 Í T o á n tử lự a c h ọ n ( S e le c tio n ) G

K hi cài đ ặ t to á n tử lựa chọn vào quan hệ r, quan hệ mới tạo được gồm những bộ dữ liệu thuộc r th o ả điều k iện cho trước Q uan

hệ k ế t quả này và r có chu n g các thuộc tính Ta có th ể định nghĩa toán tư này như sau:

Cho quan hệ r có thuộc tín h A, a là phẩn tứ thuộc domain(A)', phép toán lựa chọn tré n thuộc tín h A của r là tậ p hợp các bộ dữ

liệu t có t(A) = a và được ký hiệu n h ư sau: ƠA = „(/■>.

Lưu ý to án tử lựa chọn là toán từ một ngôi (unary operator), nghĩa là tại một thời điểm nó chí được áp dụng cho m ộ t quan hệ

m à thôi Sau dây là ví dụ m in h họ a cách hiện thực cùa phép lựa chọn

VÍ DỤ 1.6

Xét lại Iquan hệ EM PLO YEE cùa ví dụ trước, tim thông lin cúa các nhân viên làm việc lại phòng ban có mã 10.

Để th u th ậ p th ô n g tin về các nhãn viên trong phòng ban có m ả 10, bạn xác định phép chọn ƠEMP_DE/1T = io (E M P L O Y E E ) N hư

vậy, điều k iện để tìm r a bộ dữ liệu th ích hợp trong quan hệ EMPLOYEE là t(EMP_DEPT) = 10 Sau đày là k ế t quả.

ƠEMP DEPT = ^ (EM PLO YEE) '

5.2 T o á n tử c h iế u (P r o je c tio n )

T oán tử chiếu cũng là to án tứ m ột ngôi Trong khi toán tứ lựa chọn thu thập tập hợp con các h à n g dữ liệu của quan hệ th ì to án

;ử chiếu lại lựa chọn m ột tậ p hợ p con các cột dữ liệu Toán tử này được định nghĩa như sau:

Cho quan h ệ r và tậ p hợp X chứa các thuộc tín h cúa r, thực hiện phép chiêu trê n tập X của quan h ệ r, kí hiệu là Itx(r h ta được Ịuan hệ mới là tậ p con của quan hệ r Quan hệ này tạo được bằng cách loại bó những thuộc tín h thuộc r nhưng k h ô n g thuộc X, và

ỉồ n g thờ i bỏ đi nhữ ng bộ dữ liệu trùng lặp

t í DỤ 1 7

DEPA RTM EN T

klocatìonC DEPARTMENT)

LOCATIONNew YorkLos AngelesMiami

Q uan hệ k ế t quả tr ê n 'chì có m ột thuộc tín h LOCATION chứa tên khu vực, trong đó, hai giá tr ị N e w York và M ia m i x u ãt hiện

duy n h ấ t m ộ t lần

K ết quả này k h ô n g ch.0 biết tổng sô khu vực khác biệt h iện có trong bảng DEPARTM ENT, vì các giá tr ị tr ù n g lắ p đã bị loại

bỏ Do đó, k ế t quả chí gồm t a khu vực, trong khi quan hệ DEPARTMENT lại có tấ t cả năm khu vực

VÍ DỤ 1.8

Vần dùng bảng D EP A R TM EN T của ví dụ trước, bạn hăy tìm các bộ dữ liệu (phòng ban, khu vực) khác nhau trong bảng này.

TĨname location( DEPARTM ENT)

Q uan hệ k ế t qu.ắ Ikhiômg chứa giá trị trùng lắp vì mỗi kết hợp giừa tên và khu vực đều là duy n h â t Hai dòng (M anufacturing,

M iam i) và (Sales, M ianui) lài hai bộ dừ liệu khác nhau Tương tự, trường hợp hai phòng ban A ccounting và C om puting cùng có văn

p h ò n g tạ i N e w Y o rk cũnig llà những bộ dữ liệu khác nhau

0 T o án tử hựa chọn còn Cíó ttêm gọi là toán tứ giới h ạn (R estrict), ớ dây, chúng tôi không (lùng từ Select n h ằm giúp b ạn đọc trá n h lẫn lộn gTÍữa ttoáín tứ này với ilệinh Select cù.a SQL

Trang 11

Chươn)í 1: G iớ i t h i ệ u v ề S Q L v à cơ sở d ữ l iệ u q u a n h ệ 1] m

5.3 T o á n tử k ế t b ằ n g (E q u ijo in )

T oán tử k ế t bằng Equijoin' là toán tử hai ngôi, k ế t hợp hai quan hệ kliỏng n h â t th iế t phái khác nhau Viêc k ế t nôi được thực

h iện th ô n g qua thuộc tín h chung giữa hai quan hệ N ghĩa là, quan hệ k êt quá sẽ gồm các bộ dữ liệu của quan hệ th ứ n h ấ t nôi với các

bộ cùa quan hệ th ứ hai nếu trong mỗi bộ, giá trị tạ i thuộc tín h X của hai quan hệ là b ằn g nhau Lưu ý các thuộc tín h chung không cần

p hải có tê n giống nhau, nhưng ph ải có cùng m iền dữ liệu và cùng ý nghĩa

Cho quan hệ r có tậ p thuộc tín h R và quan hệ s có tậ p thuộc tín h 5 Giá sử R và s có chung m ột sô thuộc tín h , X là tậ p hợp chứa Iihơng thuộc tín h chung giữa R và s, X = R n s P hép nối [join ) r và s, biểu diễn là r nôi s, là m ột quan hệ mới gổm các thuộc

tín h là p h ần tử của R u S T rong đó, mỗi bộ dữ liệu t của quan hệ r nôi s, phái thoả ba điều kiện sau:

(1) t(R) = t r tro n g bộ dữ liệu t r của quan hệ r,

(2) t(S) = ts tro n g bộ dữ liệu t s của quan hệ s,

nôi e m p l o y e e, được biếu diễn tro n g báng sau

d e p a r t m e n t i d D E P T N AM E L O C A T IO N E M P L O Y E E ID E M P L O Y E E N AM E T IT L E

Ilai b án g D EPA RTM EN T và EM PLOYEE k hông t.hẽ nôi nhau thông qua thuộc tín h ID, bới vì thuộc tín h ID trong hai bảng có

n g h ĩa khác nhau T rong b ản g D EPA RTM ENT, ID là m ã phòng ban, còn trong báng EM PLOYEE, ID là mã n h ân viên N hư vậy, để

nối hai bảng với nhau, các thuộc tín h chung phải có cùng m iền giá tr ị và phái cùng ý nghĩa

C húng tôi sẽ tr ìn h bày kỹ hơn các to án tử quan hệ ở chương 2, phần h iện thực to án tứ tro n g ngôn ngữ SQL

N hư đã tr ìn h bày, phạm vi xác đ ịnh đặc điểm của các giá tr ị chứa trong thuộc tín h T rong HQTCSDLQH b ấ t kỳ, phạm vi của thuộc tín h được th iế t lập bởi kiểu dữ liệu Ngón ngữ SQL chuấn đ ặ t tê n và địn h n g h ĩa m ột tậ p hợp các kiểu dữ liệu cơ bản Mặc dù hầu h ế t các HQTCSDLQH đểu hỗ trợ các kiểu dữ liệu này, như ng lại h iện thực khác n hau Vì vậy, đê xác địn h đúng kiểu dữ liệu, bạn

n ê n th a m khảo trực tiếp tà i liệu của HQTCSDL d an g sử dụng Bảng 1-1 trìn h bày các kiểu dừ liệu SQL cơ bản cùng với kiểu thực tê'

C h a r a c t e r ( n ) n là số ký tự C h a r ( n ) - chứa tôi đa 255

ký tự

T e x t - chứa tôi đa 255 ký tự C h a r a c t e r ( n )

G iống C har(n) trong Oracle

F lo a t ( p ) , p là tổ n g số con sô’ N u m b e r - Giới h ạ n từ

l.O x lO 130 đến 38 con sô’ 9

th eo sau bởi 88 con sô’ 0

S in g le hay D o u b le - phụthuộc vào giới h ạ n cùa giá trị

I n t e g e r hay L o n g I n t e g e r phụ thuộc vào giới h ạ n của giá

-t r i dữ liêu

I n t e g e r - giống kiểu

N um ber(38) tro n g Oracle

Băng 1-1 Cúc kiểu dữ liệu S Q L ca băn cùng vái kiểu thực tế trong IỈQ T C SD L

Kiểu dữ liệu C h a r a c t e r ( n ) và C h a r a c t e r v a r y i n g ( n ) , với n là sỏ ký tự tối đa m à cột có th ế lưu trữ, được dùng khi cần lưu trữ các chuỗi ký tự hay chuỗi sô không cần thực hiện tín h to án Ví dụ tê n , dịa chỉ, sò” báo hiếm , và sô' điện thoại là nhữ ng dừ liệu thuộc

k iểu này

C h a r a c te r ( n ) và C h a r a c te r v a r y in g ( n ) chỉ khác nhau khi lưu trữ các chuỗi ký tự có kích thước nhỏ hơn kích thước tối đa

của cột Đ<Vi với kiểu C haracter(n), khi chuỗi có ít hơn n ký tự, HQTCSDL tự động chèn khoáng tr ắ n g vào cuối chuỗi nhằm tạo chuỗi

7 P h é p kết b ằ n g còn đươc gọi là phép k ế t tự nhiên

Trang 12

C h ư ơ n g 1: Giới th iệu về SQL và cơ sớ dữ liệu quan hệ

có đ ú n g n ký tự Ngược lại, đối với kiểu Character varyingín), HQTCSDL giừ nguyên chuỗi gốc khòng th ê m vào b ấ t kỳ kho.ãr.g trắ n g

nào Vì lẽ đó, nếu nội dung cột có kích thước th ay đổi, bạn nén khai báo kiểu dữ liệu là C haracter varying.

Dữ liệu văn b ả n dù lưu ỡ dạng Character(n) hay Character varyiiìg(n) cùng đêu p h â n b iệ t chữ hoa hay thường C h ăn g h ạn

chuỗi “abc" khác với chuỗi “a S c ”, chuỗi “ xyz" và "xyz" cũng khác nhau vì chuỗi đầu tiên b ắ t đầu bằng hai k hoảng trắn g

Kiểu F l o a t ( n ) với n là tổ n g sô’ chữ sỗ”, biểu diễn những sô' chứa giá tr ị lớn hay các p h é p tín h khoa học Ví dụ, c h ú n g tôi dùng kiểu flo at đế’ biểu d iễn giới h ạ n số từ 1.0 X 10-10 đến 1.0 X 10*’10

K iểu D e c im a K p , s) biểu diễn số th ậ p p h án cố định T rong đó, P là tổ n g số chữ số ở bên p h ải và bên trá i dâu chấm th ậ p

p h â n P h ầ n tỉ lệ s, là sô’ chữ sô’ p h ần th ậ p p h ân , nằm bên phải dấu chấm Với sô’ nguyên, p h ầ n tỉ lệ là không Ví dụ, 123.23 được biểu

d iễ n là DecimaKõ 2) còn 125 là Decimal(3, 0).

M ặc dù k h ô n g được liệ t kê tro n g b ản g 1-1, kiểu Date (ngày th án g ) cũng r ấ t th ô n g dụng tro n g các HQTCSDLQH Đ ây là kiểu

dữ liệu lưu tr ừ các th ô n g tin th ờ i gian nh ư ngày, giờ theo dạng m ặc đ ịnh DD-MM-YY, với DD là ngày, MM là th á n g , YY là nàm

T ro n g chương 6 ch ú n g tôi sẽ hướng dẫn bạn cách sứ dụng xư lý th ô n g tin ngãy/gid

7 QUY ƯỚC ĐẶT TÊN CHO Đ ố i TƯỢNG CSDL

Đói tượng CSD L, gồm b ản g và thuộc tín h , p h ải tu ân th eo quy tắc đ ặ t tê n cùa từng H Q TC SD L cụ th ể Nếu bạn vi p h ạ m các quyước này, hệ th ô n g sẽ p h á t sin h lỗi Sau đây là hai nguyên tắc đ ặ t tê n chung cần lưu ý:

• T ê n đôi tượng có kích thước từ 1 đến 30 ký tự (tro n g Access là 64) Tuy n h iê n , tên CSDL chí chứa tô i đa 8 ký tự, cụ th ể là trong trư ờ n g hợp của CSDL Oracle

• T ên p h ải b ắ t đầu b ằn g chữ cái (hoa hay thường), các ký tự còn lại có th ế là chữ hoa hay chữ thường, sô hay ký tự gạch dưđi

8 CẤU TRÚC LỆNH SQL

C âu lện h SQ L do nhiều m ệnh đẻ k ế t hợp th à n h , trong đó mỗi m ệnh đề b ắ t đầu b ằ n g từ khoá riê n g biệt H ình 1-2 dưới đây làcâu lệ n h ví dụ, tạ m th ờ i, bạn không cần chú ý đến cách h o ạt động m à chỉ cần quan s á t cáu trú c của câu lệnh

S E L EC T tên-rột-1, tẽn-rộl-2 tốn-cột-N FROM tôn-b.ìng

W H E R E ( I in i- k iệ n - B oolean

ORDER BY tôn-côt lASC I D E S C ll, lên CỘI [ASC I D E S C I I ; Hình 1-2 Từ khoá và mệnh để trong câu lệnh SQ L.

C âu lệ n h SQ L trê n gồm 4 m ệnh đổ, bât đầu bhng các từ khoá 8 S E L E C T , F R O M , W H E R E và O RD ER BY N h ư đã định

n g h ĩa , từ khoá là từ có ý nghĩa đặc trưng, nếu bạn dùng t,ừ khoá không đúng ngữ cản h hệ th õ n g sẽ p h á t sin h lỗi

T ro n g câu lệ n h trê n , hai m ệnh đề (S E L E C T & F R O M ) là b ắ t buộc còn h a i m ệnh đề (W H E R E và O RD ER B Y) là tuỳ chọn

Lưu ý, k h i tr ìn h bày câu lện h SQL, chúng tôi qui ước các từ khoá và m ệnh đề tviỳ chọn dược bao bọc tro n g dấu ngoặc vuông Với quyước n ày , chú n g tôi v iế t lại câu lện h trê n như sau:

S E L E C T tôn-rộl-1, tôn-cột-2, lOn-cộl-N FROM tôn-báng

IVVHERE diều-kiộn-Booleanl IORDER BY lên-cộl [ASC I DESC] I, tên-cột [ASC I D E S C ] ]J ; Hình 1-3 Mộnh đề bắt buộc và không bắt buộc trong câu lệnh SQ L

T rong m ệnh dề O RDER B Y, từ A S C và D E SC đ ặt trong ngoặc vuông và ngăn cách băng dâu “ I” Đây là ký tự n găn cách các

chọn lựa khác nhau K hi viết câu lệnh SQL, bạn chí được chọn duy n h ấ t m ột giá tr ị trong mỗi tậ p hợp chọn lựa Từ ASC được gạch dưới vì

nó là giá tr ị m ặc đ ịn h của hệ thông Khi bạn không chỉ dịnh giá tr ị cụ th ế cho tập lựa chọn H QTCSDLQH sẽ dùng giá tr ị m ặc định

K hi v iế t câu lệ n h SQL, tố t n h ấ t bạn n ên tu ân th ủ các quy tắc sau để câu lệ n h dễ đọc và dễ hiệu chỉnh:

• C âu lệ n h SQL k h ô n g p h ân b iệ t chữ hoa thường Tuy n h iên , dể dễ đọc, bạn n ê n v iết hoa từ khoá b ắ t dầu m ện h đề

• C âu lệ n h SQL có th ế’ v iế t trê n m ột hay nhiều dòng, nhưng b ạn nên v iết mỗi dòng m ộ t m ệ n h dề

• K hông th ể tá c h từ khoá tr ê n nhiều dòng Đồng thời, không v iết t ắ t từ khoá, ngoại tr ừ m ộ t sô’ r ấ t ít

• C âu lệ n h SQL k ế t thúc b ằn g dấu chấm phẩy (;), nó th eo sau m ện h đề cuôi cùng tro n g câu lện h , như n g không b ắ t buộc phải thuộc cùng dòng với m ệ n h đề này

9 TƯƠNG TÁC VỚI HQTCSDLQH ORACLE BANG SQL*PLUS

N hư dã nói ở p h ần trên , trong quyển sách này chúng tôi chủ yếu trìn h bày câu lện h SQL dạng tương tác trong HTQTCSDLQH

O racle p h iên bẳn 8i (P 0 8 ) Personal Oracle là phiên bản trong HQTCSDLQH Oracle dành cho m áy tín h cá nhân Chúng tôi chọn P 0 8 vì

O racle được ứng dụng rộng rãi trong các ngành công nghiệp cũng như trong các học viện T hêm vào đó, bạn có th ể tài m iễn p h í P 0 8 từ

w ebsite của O racle tạ i địa chỉ www.oracle.com Bạn xem hướng dẫn cách đăng n h ập vào P 0 8 ớ phần phụ lục A cuối sách H ầu h ết các

k h ái niệm trong cuốn sách này, trừ phụ lục E, đều thông dụng và được áp dụng rộng rãi trong hầu h ế t các phiên bản cùa SQL

SQL* P lu s là cóng cụ của HQTCSDLQH Oracle cho phép người dùng tương tác với P 0 8 C ông cụ này có chức n ă n g n h ậ n d iện

và thự c th i các câu lệ n h SQL SQL* Plus k h ông phải là p h ầ n mớ rộng cũng k h ông p h ái là tậ p hợp cha của SQL Tuy n h iê n , SQL*

P lus lại bao gồm các câu lện h bố’ sung n h ằm kiểm so át các th iế t lập về môi trường, tru y x u ấ t CSDL từ xa, cùng với các chức n ă n g tổ n g

q u á t giúp việc đ ịn h d ạ n g k ế t quả tru y x u ất và báo cáo được dễ dàng H ình 1-4 h iến th ị cách SQL* Plus tương tác với P 08

Về cú p h áp , giữa SQL và SQL* Plus không có sự khác biệt Tuy n h iên , m ột sô điểm k h ác n h au tro n g quá trìn h thực th i sẽ giúp

b ạ n p h â n b iệ t h ai d ạ n g lện h này T ấ t cả cảu lện h SQL người dùng n h ậ p vào đều được đưa vào v ù n g đ ệ m S Q L (S Q L buffer) Ngược

lại, đôi với SQL* P lu s, k h ông m ột dòng lện h nào dược lưu tro n g vùng đệm này, B ạn có th ể d ù n g lện h l i s t hay v iết tắ t là l cúa SQL*

P lu s để xem nội du n g của vùng đệm SQL T ại mỗi thời điếm chí có m ột câu lện h SQL được lưu tr ữ tro n g vùng đệm SQL, câu lệ n h này

sẽ tồ n tạ i tro n g vùng đệm cho đến khi bạn n h ậ p câu lện h mới Đối với SQL* Plus, các cáu lện h không cần k ế t thúc bằng dâu chấm

8 B ạn xem d an h sách từ khóa tro n g phần phụ lục B

Trang 13

C hương 1: G iớ i t h i ệ u v ề S Q L v à cơ s à d ữ liệ u q u a n h ệ 13 1 SC3ZE

p h ẩy nh ư tro n g trườ ng hợp của SQL Sau khi n h ập xong m ột lệnh, người dùng chi cần n h ấn phím E n te r để thực th i Với SQL, vì dấu châm phắy tro n g m ệ n h đề cuối cùng r ấ t dễ bị lãn g quên, bạn có thê cho thực th i câu lện h tro n g vùng đệm b à n g cách n h â n p h im sô’

ph ái (/), sau đó n h ã n E n ter

T rừ m ột vài trư ờ n g hợp, tâ t cá các đôi tượng CSDL tro n g sách nay đều được tạo bằng SQL* Plus và P 08

-Hình 1-4 Tương tác với Oracle thông qua SQ L* Plus.

10 TẠO BẢNG

T rong H QTCSDLQH , b ả n g (table) là dơn vị lưu trừ dừ liệu cơ bản n h ất B áng lưu giữ tấ t cá dữ liệu m à ngưừi sử dụng tru y

xuất Khi tạo bảng, tên b ả n g thuộc tín li là hai yấu tô' quan trọ n g mà bạn cần xác định Ngoài ra, với mỗi thuộc tín h bạn p h ải k h ai

báo kiểu dữ liệu và các rà n g buộc nếu cần T ê n báng nhằm chỉ đ ịnh đây là đôì tượng duy n h ấ t tro n g HQTCSDLQH, còn tê n thuộc tín h dùng dể phân b iệ t các thuộc tín h tro n g b ả n g với nhau Do đó, tê n thuộc tín h phải th o ả m ãn tín h duy n h á t, k h ô n g được tr ù n g lập tro n g phạm vi bảng T h ô n g qua k h ái n iệm kiểu dữ liệu, m iền dữ liệu của thuộc tín h dược xác định Để chi địn h điều k iện m à các giá trị tro n g cột p h ải th o ả m ãn , b ạn á p d ụ n g các rà n g buộc trê n cột

T rong SQL, đ ể tạo b án g ta d ù n g lệ n h C R E A T E T A B L E , bạn xem cú pháp cơ bán của lện h này ở h in h 1-5 C h ú n g tòi sẽ giới

th iệu chi tiế t hơn các chức n â n g bô' su n g của lện h CREATE TABLE tro n g chương 2 P hụ lục c tr ìn h bày sơ đồ cú p h á p cùa m ộ t sô’ [ệnh SQL Bạn n ên đọc p h ầ n phụ lục này đ ể hiểu th êm về SQL và các th à n h p h ần tro n g câu lện h SQL T rong p h ầ n này, chúng tô i giả

ỉử rằ ilg khi tạo b àn g mới, Lên bảng k h ô n g trù n g với các bảng k hác thuộc cùng giản dồ cơ sờ dừ liệu của người sứ dụng T heo th u ậ t ngữ

;ủa cơ sớ (lữ liệu, các b án g dữ liệu do người dùng tạo sẽ thuộc về giần đổ co sớ dữ liệu cùa người dùng đó

>;

Iràng-buộcl

Hình 1-5 Cú pháp cơ bản của lệnh C R EA T E TABLE

Theo cú p h áp của lện h C REA TE TA BLE, mỗi cột được đ ịnh nghĩa th ô n g qua dòng khai báo sau:

với các tuỳ chọn óưọc đ ặ t tro n g dâu ngoặc vuông

N hư vậy, mỗi dòng đ ịn h n g h ĩa cột b ắ t buộc ch á i có tê n cột và kiêu dữ liệu, còn rà n g buộc là tuỳ chọn T hông thường, k h i dùng

ệ n h CREATE TABLE, b ạn n ên đ ặ t m ỗi dòng d ịn h nghĩa cột trê n m ột dòng cho dễ đọc Các dòng n g ăn cách n h a u bởi dâu p hẩy, tr ừ

iò n g cuối cùng th eo sau bởi dấu đóng ngoặc Sau cùng là dấu chấm phấy k ế t thúc lệnh

Khi tạo r à n g buộc, SQL chuẩn yêu cầu rà n g buộc phải được đ ặ t tên T ên này có th ể được k h ai báo tường m in h lúc tạo h ay hiệu :h'ính bảng hoặc được H QTCSD LQ H đ ặ t tự động Tên rà n g buộc do người sử dụng đ ặ t gọi là ràng buộc hữ u d a n h , còn tê n do

ÍQ T D C SD L Q H cấp gọi là rà n g buộc vô d a n h Đôi với ràn g buộc hữu danh, bạn có th ể áp dụng qui tắc đ ặ t tê n ở p h ầ n 1.7, h ay tu ân

■heo đ ịnh d ạn g sau:

CONSTRAINT tên-bảng-tên-cột-hậu tô’

tro n g dó CO N STRA IN T là từ k h o á c h ín h b ắ t buộc còn hậu tô là từ gồm m ột hay hai chữ cái cho b iế t kiểu r à n g buộc

B ảng 1-2 liệ t kê d an h sách các h ậu tó th ô n g dụng tro n g quyển sách này Đối với rà n g buộc vô d an h , bạn k h ô n g chỉ đ ịn h từ choá CON STRA INT di kèm

Trang 14

C h ư ơ n g 1: Giới th iệu về SQL và cơ sỡ dữ liệu quan hệ

B ảng 1-3 bên dưới là m ột sô' rà n g buộc cơ bản trê n cột và bảng R à n g b u ộ c c ộ t, ràn g buộc khai báo tro n g p h ần địn h nghĩa

cột, áp d ặ t điều kiện đơn trê n cột m à nó được định nghĩa Còn rang buộc búng, ràn g buộc được khai báo tro n g p h ần địn h nghĩa bảng.

U N IQ U E (**) Cột không chứa các giá trị trù n g lấp

PRIMARY KEY (***) Yêu cầu các giá tr i n h ậ p phài duy n h ấ t và khác N ULL

B ả n g 1-3 M ộ t s ố r à n g b u ộ c c ơ b ả n tr ẽ n b ả n g và c ộ t.

VÍ DỤ 1.10

Bạn hãy tạo bảng Calling_Card với các thuộc tính: Com panyN am e, Card_Number, Starting_Value, Value_Left, và Pin JNumber Đồng thời chọn kiểu

dữ liệu thích hợp cho từhg thuộc tính.

9Giã sử thuộc tín h C om pany_N am e chứa tối đa 25 ký tự, Vcilue_Lcft và S ta r tin g _Valưe được tín h bằng dollar và xu,

C a rd_N um ber chứa tôi đa 15 chữ sô", còn P in_N um ber chứa chuỗi có độ dài cô định 12 ký tự Câu lện h SQL tạo bảng như sau:

T huộc tín h Com pany_N am e có kiểu VARCHAR2(25) vì không phái lúc nào tên còng ty nào cũng dài đúng 25 ky tự.

T huộc tín h C ard_N um ber và P in_N um ber cũng có kiểu ký tự vi chúng không th a m gia vào các phép tín h

Tương tự n hư thuộc tín h C om pany_Nam e, C ard_N um ber chứa các giá trị có kích thước th a y đổi tro n g kh o ản g 15 ký tự nèn

có kiểu dữ liệu là VARCHAR2(15)

Ngược lại, kiểu dữ liệu của Pin_N um ber là CHAR(12), vi cột này có kích thước cô định.

S ta r tin g _Value và Value_Left là các giá tr ị sô có tôi đa bôn chữ sô với hai sô lẻ th ậ p phân C húng tôi dùng dâu gạch dưới _

tro n g các tê n thuộc tín h chí n h ằ m tă n g tín h dễ đọc cho thuộc tín h m à thôi

V Í DỤ 1.11

Bạn hãy viết lại lệnh CR EA TE TABLE cho ví dụ trước với các ràng buộc vô danh sau: Card Number là khoá chính và Pin Number thoả tính duy nhất.

T ro n g trường hợp này, bạn có th ể dùng ràng.buộc cột đế’ địn h nghĩa C ard_N um ber là khoá chính N hư vậy, C ard_N uniber

h iể n n h iê n th o ả tín h duy n h ấ t U NIQ UE nên không cần đ ịnh nghĩa th êm Còn thuộc tín h P in_N um bcr chỉ th o ả m ãn tín h duy n h ấ t.

B ạn nên chú ý, hai loại rà n g buộc này chỉ khác nhau ch ú t ít Đôi với rà n g buộc khoá ch ín h , giá trị của thuộc tín h th o á tín h duy n h ấ t và không chứa giá tr ị NULL Còn rà n g buộc UNIQUE trê n cột P in_N um ber không chứa các giá trị trù n g lặp nhưng lại cho

Bạn hãy viết lại câu truy vấn trên, nhưhg lần này hãy sử dùng ràng buộc hũu danh.

T heo quy ước d ặ t tê n rà n g buộc hữu d an h và hậu tô trong b ản g 1-2, tê n rà n g buộc của thuộc tín h C a r d u m b er và

P in _ N u m b e r là calling_card_card_num ber_PK và calling_card_pin_num ber_u

L ệ n h CREATE TABLE mới n h ư sau:

N h ằ m dáp ứng nhu cầu xem th ô n g tin và câu trúc bảng, SQL* PLU S cung cãp lện h D E S C R IB E hiển th ị tê n , kiểu dữ liệu và

rà n g buộc của các thuộc tín h chứa tro n g bảng Cú pháp lện h D ESCRIBE nh ư sau:

D E SC R IB E tên-bảng ;

9 * rà n g buộc cột

** rà n g buộc cột hay rà n g buộc b ản g tuỳ thuộc vào sỗ lượng cột m à rà n g buộc có tác dụng là m ột hay nhiều hơn m ột

*** rà n g buộc cột khi địn h n ghĩa khoá c h ín h đơn và rà n g buộc bảng khi địn h nghĩa khoá chính tổ n g hợp

Trang 15

C hương 1: G iớ i t h i ệ u v ề S Q L v à cơ s ở d ữ li ệ u q u a n h ệ 15 E

ví D Ụ 1.13

Mô tả cấu trúc báng Calling Card

Câu lệnh h iển th ị câu trú c b á n g Calling_C ard như sau:

K ế t quá của lện h D E S C R I B E C a llin g _ C a r d gốm ba cột: N am e, N ull?, Type Cột N a m e chứa tê n các thuộc tín h khác n hau

tro n g bảng C ột N ull? cho b iết thuộc tín h chã"p n h ậ n giá tr ị NULL Cuối cùng cột Type, mô tá kiểu dữ liệu của các thuộc tín h

11 ĐƯA DỮ LIỆU VÀO BẢNG

Sau khi tạo bảng, bạn ch èn th ê m m ẩu tin vào b ản g bằng lện h IN S E R T IN TO Quá tr in h th êm dữ liệu vào b ản g lầ n đẩu tiê n gọi là quá tr in h tạo dữ liệu cho bảng Ớ d ạ n g dơn giản, h in h 1-6 lện h này chi cho phép n h ậ p vào b án g mỗi lần m ột m ấu tin Đ áp án1.27 áp dụng m ộ t d ạn g k h ác của lệ n h IN SE R T INTO T rong chương 7, chúng tôi sẽ tr ìn h bày th êm dạng lện h IN SER T IN TO cho

p h ép n h ậ p nhiều dòng dữ liệu từ m ộ t b án g sa n g bảng khác

IN SER T IN TO tênrbảng (cột-1, cộl-2, CỘI-N)

VA LU ES (giá-trị-1, giá-trị-2, giá-lrị-N);

Hình 1-6 Dạng cơ bàn của lệnh IN SERT

T rong h ìn h 1-6, cột-1, cột-2, cột-N là các tê n cột, còn giá-trị-1, giá-trị-2 g iá -trị-N là giá trị n h ập cho cột tương ứng B ạn

h ã y nh<5 rằ n g giá tr ị n h ậ p vào p h ải cùng kiểu với kiểu dữ liệu của cột Đồng thời ở m ệnh dề Values, b ạn phải th iế t lặp đầy đủ giá trị

cho các cột có tro n g d a n h sách cột

VÍ DỤ 1.14

Nhập < hèn nhũìig dữliộu sau vào bảng Calling^Card.

Company Name Card_Number Starting_Value Value_Left Pin_Number

Vĩ d ạn g cơ bản cùa lện h IN SE R T IN TO chỉ cho phép n h ập mỗi lần m ột dòng dừ liệu, nên bạn phái dùng hai lệ n h IN S E R T

IN TO liên tiếp để chèn hai bộ dữ liệu tr ê n vào b ản g C alling_Card Lưu ý, dữ liệu ở d ạng chuỗi kí tự phái dược chứa tro n g cặp dâu

L ện h C O M M IT th eo sau câu lện h I N S E R T IN T O th ứ hai nhằm xác định tín h hiệu lực cho các th a y đổi trê n bảng L ệnh n ày

sẽ được hướng d ẫ n chi ti ế t hơn tro n g p h ần tiếp theo

Q uan s á t câu IN S E R T IN TO tr ê n , ta th â y th ứ tự các cột th eo sau m ệnh đề IN SERT INTO là tương ứng với th ứ tự các giá tr ị tro n g m ện h đề VALUES N h ư vậy, b ạn không cần quan tâm đến th ứ tự n h ập dữ liệu m à chỉ cần cột và giá tr ị tương ứng n h a u là đủ

VÍ DỤ 1.15

Thêm các dòng sau vào bảng Calling_Card theo thứ tự các cột sau: PinN um b er, Card Number, Company Name, Starting_Value, Value _Left

Company_Nam e Card_Number Starting_Value Value Left Pin Number

với từ khoá W O R K là m ột chọn lựa.

T h ậ t ra trước k h i thự c h iện lệ n h COMMIT, mọi tác động trê n bàng được lưu tro n g vùng đệin CSDL hay vùng nhớ làm việc tro n g bộ nhớ c h ín h N ếu vì lý do nào đó, bạn th o á t khỏi CSDL trước khi xác n h ậ n th a y đối, th ì dữ liệu sẽ không được ghi vào CSDL

và nhữ n g th a y đổi hoàn to à n k h ông có hiệu lực T rong môi trường đa người dùng, nếu bạn th ay dổi m ột số dòng của báng dữ liệu dùng chung th ì nhữ ng người d ù n g k hác tro n g hệ thôìig không th ế n h ậ n biết sự th a y dổi cho đến khi bạn dùng lện h COMMIT Khi đó, bạn

là người duy n h ấ t có quyền tru y x u ấ t nhữ ng dòng dữ liệu này N ghĩa là những người sử dụng khác không thế’ xem nội dung h iệ n tạ i của dòng dữ liệu đ a n g được hiệu c h in h hay còn gọi là các dòng dữ liệu bị khoá Sau k h i xác n h ậ n b ằn g lện h COM MIT, các dòng được lưu vào CSDL và được m ở khoá Kể từ thời điểm này, nhữ ng người dùng khác mới quan s á t được sự th a y dổi của dữ liệu

Trang 16

m 16 Chươnịí 1: Giới thiệu về SQL và cư sớ dư liệu quan h

G iả sứ n h ữ n g th a y đổi trẽ n bảng (IN SERT, UPDATE DELETE) dhifa được xác nhặn, để huỵ bo những th ay đổi nay bạ

dùng- lệ n h R O L L B A C K hay kết thúc p h iê n làm việc Khi đó incọi thay dóỉi ItrêII các dối tượng CSDL kẽ' từ thời điểm xác n h ận CUI

cùng hoặc từ lúc ngưùi sứ dụng b ẩt đầu p h iế n làm việc (lều bị HQlrCSDLQIH huý bò

N h ư vậy, lện h R O L L B A C K có tác dụng huý bỏ hay 1'gừmg tr a n s a c tio n (giao dịch) hiện thời Transaction (giao dịch) 1

m ột đơn vị công việc luận lý, gồm một sỗ thao tác tr>ên CSDL T ran satijn thánh cõng hay th ấ t bại phụ thuộc vào k ết quả cùa từn

th ao tá c tro n g tra n sa c tio n Nói cách khác, nếu một thíao tác thát hại, g:ae dịch xem như th â t bại Theo địn h nghĩa này, tra n sa c tio n ]

kh ô n g th ê p h á n chia (atomic) Ngoài ra transation cũng rất b in vũng (durable), bới vì một khi tran satio n được xác n h ặn , nhom

th a y dối tr ê n dữ liệu đảm bảo dược ghi vào CSDL, Dgpay cá khi hệ thống trục trặc T ransaction b ắt đầu tạ i câu lệnh SQL đầu tiê n sa lện h C O M M IT R O L L B A C K , hay một kêt nối với CSỈDL Transaction kết thúc sau lệnh COM MIT, R O LLBAC K , hay sau khi k ẽ t ni

với CSD L k ế t thúc Tuy n h iê n , bạn cân lưu ý khi dìimg lệnh định ngliìa dữ liệu DDL vì hầu h ết các HQTCSDL ngẩm đưa ra lện COM M IT ẫ n sau k h i thực h iện càu lệnh này

N h ư chúng tôi đả hướng dẫn, khi muiốn huý bói thay đối vừa thực hiẹn, bạn dùng lệnh Rollback để quay về tran g th á i ban đế

của giao dịch N hưng tro n g quá trìn h tương tác, gia Siứ bạn thực hién r ấ t nhiếu thay đôi trên báng nhưng chưa xác n h ặ n b ằn g lện

C om m it Sau đó b ạ n p h á t hiện m ột sô sai Siót và muốn huy bo chúrg Tại thời diêm này nếu bạn dùng lện h Rollback, mọi th ay đ

tr ê n b ả n g sẽ bị huỷ bỏ, kể cá những th ay đổi đúng Thiực sư, bạn muôn quay lại trạn g th ái trước khi thực h iện các th ay dôi không ph hợp tr ê n vùng đệm CSDL Từ nhu cầu trên , SQL dưa ira câu lệnh S A V E P O IN T

L ện h S A V E P O I N T xác định vị trí cần quay hại trong giao dịch khi giao dịch chưa đưực xác nhận Với ý nghĩa này, savepoii

là th ẻ đ á n h dãu tro n g vùng dệm CSDL, cho phép bạm huý bó m ột phần tác vụ cúa giao dịch hiện tạ i bằng cách quay về tr ạ n g th á i (

th ể trước đổ

SAVEPOINT tên-savi'|)oinl ;

với tên-savcpoint là tê n duy nhât không trùmg lặp trong giao dịch Thông thường tên savepoint là những chữ cái đơn, nhưr

đôi k h i cũng có th ể gốm n h iều ký tự Khi dó, tên savepoint phải tuân theo quy ước đ ặ t tên cho dối tượng CSDL Savepoint r â t hi

h iệu tr o n g SQL d ạ n g tương tác vì chúng cung cấp khả nâng kiểm soát quá trìn h thực th i chương trìn h Dề trớ lại trạ n g th á i nior muôn tr ê n vùng đệm CSDL, bạn dùng lệnh sau:

ROLLBACK lên-savcpoinl ;

H ìn h 1-7 m inh họa cách k ết hợp lện h SAVEPO IN T và ROLLBACK T rong ví dụ này, người sử dụng bắt đầu với lệr

SA V E PO IN T A, sau đó chèn m ột bộ dừ liệu mới vào bảng và tạo SAVEPOINT B T iếp tục, Iigười này xóa bộ dữ liệu đầu tiên và ti

SA V E PO IN T c Cuối cùng, anh ta ROLLBACK trớ về SAVEPOINT A Càu lệnh R O L L B A C K TO S A V E P O IN T A có tác dụng di

CSDL quay về tr ạ n g th á i lúc người dùng tạo SAVEPOINT A, như thè’ mọi t,hav dổi sau savepoint A đều bị huỷ bỏ

Ví dụ này giả sử răn g người sử dụng khôn# Hung lệnh COV.MIT giữa điếm savepoint A và savepoint c Nêu người này X

n h ậ n các th a y đổi sau điểm savepoint c , an h ta không thê’ quay lại savepoint A hay B dược nữa Điều quan trọ n g khác cần lưu ý

sau k h i quay về tr ạ n g th á i trước đó, người dùng cùng không thê thav đối ý kiên, quay lại các điểm thực th i p h ía sau N ghĩa là m ột k

đă trở về savepoint A , người rtày khóng th ế quay ngược lại savepoint B hay c

T ro n g m ộ t giao dịch, tê n savepoint phái thoá tính duy nhất Nêu bạn tạo savepoint t.rung tên với savepoint trước đó, t sav e p o in t trước sẽ bị xóa đi Sau khi các th ay đôi ttược xác nhận, giao dịch mới b ắ t dầu, bạn có thề’ tái sử d ạn g các tên sav ep o in t \

điều k iện chúng p h ải là duy n h ấ t trong giao dịch mới

N hư chúng tôi dã trìn h bày, khi người dùng thực thi lệnh ROLLBACK không có mệnh đề SAVEPOINT, phạm vi của lệnh này

Trang 17

hư ơ ng 1: G iớ i t h i ệ u v ề S Q L và cư sờ (lừ liệu q u a n hộ 17

3 LỆNH SELECT

L ện h SELEC T là câu lệnh SQL dược sứ dụng nhiều nhát, có chức nâng truy vấn và thu tihậ p dừ liệu từ CSDL Vì vậy, lệnh

ỈL E C T còn được gọi là c â u lệ n h tr u y vấn H nh 1-8 bên dưới là cú pháp cơ ban cùa lệnh SELE'CT', -húng tôi sẽ tr ìn h bày các tín h

in g bổ su n g cho lện h này ớ những chương sau.

S E L EC T c ộ l-t, cộl-2, cột-3 cộl-N

FROM being-1 bàng-N IVVHERE điều-kiện I

[ORDER BY cột 1 IASC I D ESC I l.cộl-2 i ASC I DESC1Ị.,.

L ện h SELEC T có hai m ện h đề bắt buộc là S E L E C T và FROM , còn W H EU E và ORDER BY là n h ữ n g chọn lựa th ê m N hư ,ọi lện h SQL khác, lệnh SE LE C T cũng kết thúc bàng dấu chám phẩy Sau đây là chức năng của từnig m ệ n h đề tro n g câu lệ n h Select:

M ệnh dề S E L E C T liệt kê tê n các cột cần h iển th ị Những thuộc tín h được liệt kê trong mện.h (đề nàv ch ín h là tê n các cột tro n g quan hệ k ế t quả

M ệnh dề F R O M liệt kê tê n các bảng nguồn, nơi dữ liệu được thu thập N hư vậy, các cột xuât hiiện tro n g m ệ n h đề S E L E C T phái

là các cột thuộc bảng n g u ồ n

M ện h đề W H E R E đ;nh điềm kiện mà các bộ dữ liệu của báng nguồn phái thoà

M ện h đề O R D E R BY định th ứ tự sắp xếp các hàng dữ liệu đã thoả điều kiện ớ m ệnh đé W HERE M ệnh để n ày chỉ có h iệu lực

k h i h iể n th ị dữ liệu thu thậ.p được, chứ không tác dụng trực tiếp lên các hàng bên trong báng

N hăm giúp bạn dễ dàng mhớ cấu trúc cơ bản của lệnh SELECT, chúng tôi tóm tấ t chức nàng ciủa các m ệnh đề tro n g p h á t biểu sau:

“B ạn C H Ọ N (SELECT) các cột TỪ (FROM) các bảng SAO CH O (WHERE) các hàng dử liệu thoẳ điều k iện nào dó, và k ế t quả ược S Ắ P X Ế P T H E O (ORDER' BY) thứ tư của cột chỉ định “

T ro n g câu lện h Select, m iệnh đề VVHEKE quyết định giá trị cúa quan hệ kết, quá Giả sứ ta có hai câu lện h S elect có cùng bảng guốn T ậ p dữ liệu k ế t quà của i2 câu lệnh này sẽ khác nhau nếu điều kiện chỉ định trong mệnh điề W H E R E của m ỗi câu lệ n h là khác hau Ví dụ, bạn muốn in tê n cúia nhừng người ờ khu vực có mã bưu điện A, hay bạn muốn xem têm củ a các n h à n v iên làm việc cho bộ

h ậ n B c h ẳ n g h ạn Khi đó điềiu kiện đi kèm với m ệnh đề WHERE định nghĩa các tiêu chuân cần p h ải th o ả Sau đây là cách định iều k iện tro n g m ện h dề WHERtE:

Tên-cột toán-tứ-so-sánh giá-trị-dơn

T ro n g đó, tẽn-cột là tèn c.ủa cột thuộc bảng nguồn Toán-tứ-so-sánh là toán tử được liệt kê trong bảng 1-4 Cuối cùng, giá-trị-đon là

lộ t số hay m ột chuỗi ký tự Tromg chương 3 chúng tôi sẽ giới thiệu chi tiế t hơn các câu truy vân phức tạp có sứ dụng diều kiện tổng hợp

iử dụng bàng EM PLO YEE ở ví dụ 1.9, bạn hãy hiển thị tên và chức vụ của tất cà nhân viên I

C âu lệ n h SQL th u th ậ p dữ liệu của báng EMPLOYEE như sau:

iE L E C T n a m e , t i t l e , d e p t - Các cột cần hiển th ị

I trong tộ phận k.ế l.oán (Accounting).

PROM e m p l o y e e

-ỈHERE d e p t = ' A c c o u n t i n g ' ; Tên báng nguồn chứa dữ liệu

Điểu kiện phái thoá

T ro n g b ản g k ế t quá, tê n các thuộc tính và giá trị tương ứng được hiển th ị theo đúng thứ tự liệ t kê tro n g m ệ n h đề SELEC T Vlọi bộ dữ liệu th u th ậ p được đều thoả diều kiện dưa ra trong m ệnh dề WHERE Nghĩa là, với bộ dữ liệu t b ấ t kỳ của quan h ệ k ế t quả,

'.(DEPT) = A ccounting Tuy n h iên các bộ dữ liệu này không được sắp xếp theo th ứ tự alphabet Nếu b ạ n m uốn h iể n th ị b ản g k ế t quả ỉói các tê n th eo th ứ tự alp h ab et, hãy xem ví dụ 1.17 Trong m ệnh đề SELECT, tên các thuộc tính kliông p h ân b iệ t chữ hoa thường,

nhưng diều k iện tro n g m ệnh đề WHERE lại phải tuân thủ một sô giới hạn Vì dept là cột thuộc kiểu kỹ tự , nên p h ả i dược chứa tro n g :ặp dấu n h á y dơn Ngoài ra, kiểu dữ liệu ký tự cũng phân biệt chữ hoa thường Do đó nêu diều kiện của m ệ n h đề W H E R E là D E P T =

A C C O U N T IN G ’, th ì không có bộ dữ liệu nào của bảng employee thoả điều kiện này cả vì chuỗi ‘A cc o u n tin g ’ và ‘A C C O U N T IN G ’ là

hai chuỗi k h ác nhau

VÍ DỤ 1.17

Hãy hiển thị uất quả cùa câu truy vân trên theo thứ tự alphabet của lên nhân viên.

Đ ể h iể n th ị k ết quả th eo th ứ tự alphabet của thuộc tính N AM E, bạn phải đưa thuộc tính này vào m ệ n h dề ORDER BY Theo

m ặc đ ịn h , các h à n g được sắp xếp theo thứ tự tăng dần của cột chỉ định, cột NAM E D ư ớ i dây là câu lệruh S E L E C T cùng với k ê t quả

SE L E C T n a m e , t i t l e , d e p t

FROM e m p l o y e e

WHERE d e p t = ' A c c o u n t i n g '

TRUNG TAM TH Ò N G TIN THƯ VỈẼN

V Do I

Trang 18

M 1 8 C h ư ơ n g 1: Giới th iệu về SQL và c a sở dữ liệu quan hệ

Với câu lện h SQL trê n , các h à n g của quan hệ k ế t quà dược sắp xếp theo th ứ tự tă n g dần của tê n n h â n viên

14 C ơ S ơ DỮ LIỆU MẨU

T ro n g p h ầ n còn lại của chương này, chúng tô i sử 'dụng CSDL Sporting Goods (S G ) làm CSDL m ẫu cho các ví dụ và b ài tập

B ạ n xem các đoạn sc rip t tạo CSDL này ở p h ầ n phụ lục D cuối sách Đáy là CSDL ví dụ thường được dùng trong các k h o á đào tạo của

h ã n g O racle, m ọi th a y đổi tr ê n S p o rtin g Goods phải được Oracle dồng ý.

S p o rtin g Goods là m ột công ty thương m ại quốc tế , chuyên cung cấp sản phẩm th ể th a o cho các cửa hiệu b á n !ẻ K hách h àn g

của họ gồm cả tro n g nước lẫ n ngoài nước Với mỗi kliácli hàng, công ty cung cấp cho họ m ã n h ậ n d ạng riêng, và lưu tr ữ tè n cửa hiệu, sô' đ iệ n th o ại Đ ây là nhữ ng th ô n g tin b ắ t buộc của k h ách hàng Ngoài nhừng th ô n g tin trê n , công ty còn luu lại đ ịa chỉ, th à n h phô',

bang, quốc gia, m ã bưu điện, tà i kho ản tín dụng cùng với một sô' ghi chú về khách hàng T hông thường, kh ách h à n g đ ặ t h à n g th ô n g qua đ iện th o ạ i h ay fax K hi đó tro n g đơn đ ặ t h à n g công ty lưu lại mã khách hàng, ngày đ ặ t h à n g và h ìn h thức th a n h to án Ngoài ra,

n g ày giao h à n g cho k h ách cũng được ghi lại tro n g CSDL

Đ ể xử lý đơn h à n g được n h a n h chóng, công ty chia khách hàng theo k h u vực lưu trú H iện tạ i có tấ t cả s á u khu vực: T rung

M ỹ/V ùng b iển C aribbe, Bắc Mỹ, N am Mỹ, C hâu P h i/ T ru n g Đông, Châu Á và C hâu Âu Mỗi khu vực có tê n và m ã x á c đ ịn h th o ả m ãn tín h duy n h ấ t

T ạ i m ỗi khu vực, công ty có nhà kho chứa sản phẩm phân phối cho khách hàng T hông tin về kho gồm có m ã kho, địa chỉ,

t h à n h phố, bang, quôc gia, m ã bưu điện, người quản lý, sô điện thoại Công ty cung cáp m ột lo ạt các sá n phẩm M ỗi sản p h ẩ m có mã

n h ậ n d ạ n g và tê n duy n h ấ t N goài ra, th ô n g tin chú th ích cho sán phẩm , giá đề nghị, đơn vị b án cũng được lưu lại

Với từ n g kho và các sả n p h ẩ m tro n g kho, SG lưu bản kiểm kê gồm số ìượng tồn kho của từ n g sả n phẩm , th ờ i gian yêu cầu cung cấp th ê m , sô’ lượng tồ n kho lớn n h ấ t tạ i m ột th ờ i điểm nào dó, thời gian bổ sung th êm , chú th ích k h i không có h à n g tro n g kho

C ông ty có m ột số n h ă n viên hay đạ i d iệ n thương mại phục vụ yêu cầu khách hàng M ột n h â n viên có t h ể thuộc m ột hay

n h iề u k h u vực Với n h â n viên, công ty lưu giữ tên , họ, m ã nhận dạng, mã sử dụng m áy tín h N goài nh ữ n g th ô n g ti n tr ê n , công ty còn lưu lạ i n g ày b ắ t đầu làm vịệc, chú thích, chức vụ, lương bổng, phần tră m hoa hồng B ảng 1-5 đến b ản g 1-13 mô tả th u ộ c tín h của các

b ả n g thuộc CSDL S p o rtin g Goods (SG) và rà n g buộc trê n các thuộc tính.

14.1 C á c b ả n g tr o n g C SD L S p o r tin g G ood s

Bảng 1-5 C âc thuộc tính của bàng s customer

T ê n c ộ t D iễ n g iả i / K iể u d ữ liệ u

Id M ă n h ậ n d an g duy n h ất của khách hàng, có tối đa 3 ký tư

N am e T ên kh ách hàng, dài tối đa 20 ký tư

P hone Số diện th o ại của khách hàng, tối đa 20 ký tư

A ddress Địa chỉ khách hàng, tối đa 20 ký tư

C ity T h à n h p h ố nơi khách hãng cư trủ Tối đa 20 ký tư

S ta te T iểu b an g nơi khách hàng cư trú Tối đa 15 ký tư

C ountry Quốc gia nơi khách hàng cư trú Tối đa 20 ký tư

Zip_code M ã bưu điện của khrtch hàng Tối đa 15 ký tự

C re d it_ ra tin g K hoản tín dụng cùa khách hàng Tối da 9 ký tự

Sales_rep_id Mã đại diện thương mai của khách hàng, dài tối đ a 3 ký tư

Region_id M ã khu vực của quốc gia m à khách h àn g đ an g cư trú Tối đa 3 ký tự

C om m ents Sở th íc h về sả n phẩm của khách hàng Tối đa 255 ký tư

Bảng 1-6 C á c Ihuộc tính của bảng s_dept

T ê n c ộ t D iễ n g iả i / K iể u d ữ liệ u

Id Mã n h ậ n d ạn g duy n h ất của từng bộ p hận, có tôi đ a 3 ký tự

N am e T ên bộ p h ận Tối đa 20 ký tư

Region_id Mã khu vực của bộ phận, dài tối đa 3 ký tư

Bảng 1-7 Các thuộc tinh của bảng s_em p

Id M ã n h ậ n d ạn g duy n h ấ t của từ ng n h ân viên Tối da 3 ký tư

S ta r t d a te Ngày n h â n viên b ắ t đầu làm việc tạ i công ty Kiểu dữ liệu ngày

D ept_id M ã bộ p h ậ n m à n h â n viên trực thuộc Tõ’i da 3 ký tự

S alary Mức lương của n h ân viên, gồm 11 chữ sô tro n g đó có 2 số th â p phân

C om m ission_pct P h ầ n tră m hoa hồng n h ân v iên dược hường, gồm 4 chữ sô’ tro n g đó có 2 sô’ th ậ p p h ân

Bảng 1-8 C ác thuộc tính của bảnR S_region

T ê n c ộ t D iễ n g iả i / K iể u d ữ liệ u

Id Mã n h ậ n d ạn g duy n h ất của từng khu vưc Tôi đa 3 ký tư

N am e T ên duy n h ấ t của khu vực T ối đa 20 ký tư

Trang 19

C hương 1: G iớ i t h i ệ u v ề S Q L v à cơ sở d ữ li ệ u q u a n h ệ 19 m

Bảng 1-9 C ác thuộc tính của table SJnventory

T ê n c ộ t D iễ n g iả i / K iể u d ữ li ệ u

P roduct ]d M ã n h ậ n dạng duy n h á t của sán phẩm Tôi đa 7 ký tự

A m ount in stock Sô lương h àn g còn tồn kho Tô"i đa 9 con sô”

R ecorder p o in t Sô' lượng h àn g tồn kho nhó n h ấ t trước khi đ ặ t h àn g thêm Tôi đa 9 con số

M ax in sto ck Sô lương h àn g tồn kho lớn n h ât Tôi đa là 9 con số

O ut_of_stock_explanation Lý do không có h àn g tro n g kho Tô”i đa 25 ký tự

R estock d a te N gày bổ sung th êm h àn g vào kho Kiểu dữ liệu ngày

Bảng 1-10 C á c thuộc tính cùa bảng s_item

Product_id Mã sả n phẩm của muc hàng, cho b iế t muc h àn g thuộc sán phẩin gì Tốì da 9 con sô’

Q u a n tity _ sh ip p e d Sô' lương h àn g h iện ta i đã giao Tôi đa 9 chữ số

Bảng 1-11 C á c thuộc tính của bảng S_product

T ê n c ộ t D iễ n g i ả i / K iể u d ữ li ệ u

Id M ã n h ậ n d an g duy n h â t của từng să n phẩm Tôi da 7 ký tư

S h o rt_ d esc D iễn giải về sản phẩm Tôi đa 25 ký tư

S uggested w hlsd_price G iá bán đề nghi của sản phẩm Tối đa là 11 chữ sô trong đó có 2 sô th ậ p phân

W hls] u n its Đơn vi b án của sản phẩm Tối đa là 10 con số

Bảng 1-12 C á c thuộc tính của bảng S_warehouse

T ê n c ộ t D iễ n g iả i / K iể u d ữ l i ệ u

Id Mã n h ậ n dang duy n h ấ t của mỗi kho Tô’i da 7 ký tự

R egion_id M ã khu vưc nơi đ ă t kho Tôi đa 3 ký tự

A ddress Đia chí kho Tòi đa 20 ký tự

C ity T h à n h phô” nơi đ ă t kho Tối da 20 ký tự

S ta te Tiểu bang nơi d ă t kho Tôi đ a 16 ký tự

Zip_code Mã bưu diện của th à n h phố nơi đ ặ t kho Tối đa 15 ký tự

C ountry Mã quốc gia nơi d ặ t kho Tối da 20 ký tự

Phone Số điện thoai kho Tôi đa 20 ký tự

M anager_id Mã người quản lý kho Tối đa 3 ký tự

Bảng 1 -13 C ác thuộc tính của bảng S_ord

T ê n c ộ t D iễ n g iả i / K iể u d ữ l iệ u

D a te _ sh ip p e d N gày vãn chuyển hàng Kiểu dữ liệu ngày

S a les_ rep J d M ã người đai diên thương m ai phu trá c h đơn hàng Tôi đa 3 ký tư

T o ta l T ổng giá tr i cúa dơn hàng Tối đa là 11 chữ số, trong đó có 2 số th ậ p phân

P a y m e n t_ ty p e H ìn h thức th a n h toán Tôi đa 6 ký tư

O rd er_ filled C ho b iế t đơn h àn g đã đươc đáp ứng hay chưa Tô'i đa 1 ký tư

14.2 R à n g b u ộ c to à n v ẹ n th a m c h iế u c ủ a C SDL SG

B ả n g 1.14 chứa nhữ n g rà n g buộc toàn vẹn th a m chiếu giữa các b ản g trong CSDL SG.

_ Bảng 1.14 Ràng buộc toàn vẹn trên C SD L SG.

T ê n ta b l e K h o á n g o ạ i T h u ộ c t í n h t h a m c h iế u / T a b le

s EMP dept_id M ã của bảnR S_DEPT

s CUSTOMER region_id M ã của b án g S_REGION

s ORD sales_rep_id M ã của bảng S_EM P

14.3 H à n g b u ộ c b ổ s u n g c h o C SD L SG

CSD L SG có các rà n g buộc sau:

Trang 20

C h ư ơ n g 1: Giới thiệu về SQL và cơ sở dữ liệu q u an hệ

• T ài khoản tín dụng cùa kháich hiàng c.hỉ là một trong ba giií trị EX C E LLE N T GOOD POOR.

• Giá tr ị k ế t hợp c ủ a n a m e V'ới rtĩgiom_id là duy nhât trong h á n g s DEPT Diều này dám bảo các bộ p h ậ n luôn duy n h â t trongkhu vực

• P h ầ n tră m hoa h ồ a g củia nh.âii' viên là m ột trong các giá trị sau 1 0, 12.5, 15, 17.5, và 20

• Sự k ế t hợp của h ai thuộic tínih product id và warehouse j d là duy nhát trong báng S _ IN V E N T O R Y

15 CẬP NHẬT VÀ XỔA CÁC DÒNG DỮ LIỆU THUỘC BẢNG

T heo dõi chỉ d ẫ n troing n.hữ:ng: p h in trước, b ạ n đã biết cách tạo hảng và nhập thông tin Tuy n h iê n , nếu dữ liệu n h ậ p vào saihoặc cần th a y đổi th ì p h ả i làm th ế nào Câu lệnh SQL sau sẽ giúp bạn h:ệu chỉnh giá trị trong CSDL

tro n g đó cột-1, c ộ t-N là ĩtẽn cột và giá-trị-1, giá-trị-N ià những giá trị mới sẽ được lưu vào các cột tương ứng M ệnh đề

W H ER E xác đ ịn h các bộ dữ íiệiu c ần cập n h ật Bạn xem cách sử dụng liệnh này trong ví dụ sau

v t DỤ 1.18

C iả sử cửa hàng BJ Athletics chtuyển địa điểm về Melbourne, Florida với địa chỉ, mà buu điện, số điện thoại mới là 2905 Havens Avenue, 32901, và 407-345-1265 Bạn hãy viết l'ệmh cập nihật thông tin trên vào bảng S CUSTOMiER cùa CSDL SG.

Để th a y đổi th ô n g tin trêin, bạn phải cập n h ậ t mẩu tin chứa dữ liệu của khách h àn g B J A th le tic s tro n g b ảng S_CUSTOM ER

Đề phòng trường hợp b ạji khiôrug nhớ câu trúc của bảng S_CUSTOMER, chúng tòi tr ìn h bày câu trúc chi ti ế t của b àn g n ày dưới đây

L ện h U PDA TE b in ig ;S_CUSTOMER nh ư sau:

WHERE name - 'BJ Ath.le ti.ca' ;

B ạn cố th ể k iểm t r a sự chính xác cùa dữ liệu th a y dổi bằng câiu truy vân:

SELECT phone, addrass, city,, State, zip_code

FROM »_customer

WHERE name = 'BJ AthJ.atii.es' ;

Với lện h U PD A TE, biạit pihải t h ậ t cẩn th ậ n vì nếu sơ sót, dữ' liệu sẽ chẳng th ay đổi n hư b ạ n m ong m uốn B ạn xem câu lện h

U PDA TE b ản g CUSTOME.R isaui:

Câu lện h cập n h ậ t Itrẽn thiiếu ưiệnh đề điều kiện WHERE vì 'vậv thay vì chỉ thay đổi th ô n g tin của kh ách h à n g 'B J A th le tic s ’

n h ư yêu cầu, câu lện h nà y 'thiay đổi th õ n g tin cùa tấ t cả khách hàng chứa trong bảng S_custom er Để khắc phục lỗi này, bạn cần tạo

S A V E P O IN T A trước k h i thiực th i lệnh UPDATE Sau đó nếu phát hiện lỗi, bạn chì cần dùng lện h R O L L B A C K TO A để phục hồi

lạ i tr ạ n g th á i cũ cho bảnìg Nĩhưívậy, tố t n h ấ t trước khi cập nhật bảng dữ liệu bất kỳ, bạn nên dùng lệ n h S A V E P O IN T tạo điểm quay

về phòng ngừa lỗi xảy ra

15 2 L ệ n h D E L E T E v à TRUNCATE

Giả sử m ột kháclh lhàmg của cóng ty phá sản h ay nhân viên nào dó troug công ty nghỉ việc, điều b ạn cần là xóa bỏ các đô"i

tư ợ n g k h ông còn liên lạc: wới cõng ty nữa Đ ể dáp ứng yẽu cầu trên, SQL cung cấp câu lệnh D ELETE xóa các h à n g dữ liệu th o ả điều

k iệ n cho trước Cú p h á p llệmhi Delete như sau:

DELETE tên-báng WHERE diều-kiện;

Nếu b ạn muôn xóia ìnụọi dòng dữ liệu thuộc báng tlhì dùng cú piháp sau:

DELETE lêni-báng;

T y p e

VARCHAR2(3) VARCHAR2 (20)

VARCHAR2 ( 2 0 )

VARCHAR2 (20) VARCHAR2(20)

VARCHAR2 ( 1 5 )

VARCHAR2(20) VARCHAR2(15) VARCHAR2(9) VARCHAR2 (3)

VARCHAR2 ( 3 )

VARCHAR2(255)

Trang 21

Chương L: G iớ i t h i ệ u v ề SQL v à cơ s ở d ữ li ệ u q u a n h ệ 21 ES

v í DỤ 1.19

Già sử nhà cung cấp không còn sản xuất sản phẩm có mã là 32779 Bạn hãy viết câu lệnh loại bỏ sản phẩm này khỏi bảng S_IN VENTORY.

Câu lện h loại bỏ m ẩu tin có m ã sả n phẩm là 32779 khỏi b ản g S_IN VENTO RY nh ư sau:

D ELETE FROM s _ i n v e n t o r y

WHERE p r o d u c t _ i d = ' 3 2 7 7 9 ' ;

Khi sử dụng lện h D EL E TE , b ạn cần lưu ý m ện h dề W H ER E để tr á n h xóa n h ầm dữ liệu Ví dụ, nếu bạn bỏ sót m ệnh đề

W HERE tro n g câu tru y v ấn tr ê n , mọi th ô n g tin tror.g b ản g S_INVENTORY sẽ m ấ t hết

Tuy n h ién , tro n g m ộ t số trường hợp bạn k h ông th ế xóa dữ liệu của bảng, xem ví dụ 1.20 dưđi đây:

VÍ DỤ 1.20

Giả sử khách hàng One Sporl vừa phá sản, bạn hãy xóa khách hàng này khỏi bảng S_CUSTOM ER.

L ện h D EL E TE xóa kh ách h à n g One S p o rt n h ư sau:

D ELETE FROM s _ c u s t o m e r WHERE n a m e — 'O n e S p o r t ' ;

Do khách h à n g One S p o rt dược th a m chiếu bởi khoá ngoại của b ản g k h ác n ên câu lệnh trê n không thực th i được Đây là lỗi

vi phạm tín h to àn vẹn dữ liệu Khi đó, m àn h ìn h h iể n th ị th ô n g diệp lỗi:

I - Mã lỗi nội bộ của n h à sản xuât

ERROR AAAA integrity constraint (table_name_column_name_fJO

Violated - child record found.

Để xóa k h ách h à n g One Spo rt, bạn phải xóa hay cập n h ậ t khoá ngoại tựơng ứng C húng tôi sẽ trìn h bày cách thao tác trên

k hoá ngoại FK tro n g chương sau

Với lện h TRU N CA TE, việc xóa mọi dữ liệu của b á n g dễ d àn g và dơn g iản hơn:

Tuy n h iê n , b ạn cần lưu ý m ộ t số giới h ạn khi sử dụng lện h này T hứ n h ấ t, bạn không th ể cắ t xén những h àn g có ràn g buộc

to àn vẹn th am chiếu T hứ h ai, bạn k h ô n g th ể roll back sau k h i thực h iệ n lệ n h TRUN CA TE

VÍ DỤ 1.21

Bạn hãy thực thi tập tin SG _N O _C O \ST R A IN T S.sq l (xem phụ lục D) rồi thực hiện nhũhg thao tác sau:

1 Hiến thj các chức danh trong bảng S_TITLE.

2 Tạo savepoint tên before_update.

3 Chèn vào bảng S_TITLE chức vụ mói "W arehouse Inspector" , và không xác nhện thay đổi này.

4 Hiển thj các chức danh trong bàng S_TITLE.

5 Boll back về điểm savepoint before_update.

6 Hiến thị các chức danh trong bảng s TITLE.

7 ĩạ o savepoint before truncate.

8 Xóa dữ liệu cùa bàng S_T IT LE bằng lệnh TRU N CATE.

9 ('hèn chức vụ mới “ W arehouse Inspector" vào bàng S _T IT LE, không xác nhận thay đổi này.

I Ọ Roll bàck về diễm savepoint beíoretruncate.

Sau dây là k ế t quả:

SQL> SELECT title réoM s_title; <

Trang 22

M 22 C h ư ơ n g 1: Giới thiệu về SQL và cơ sở dữ liệu q u an hệ

H QTCSDLQH b á o liỗi diiểm savepoint before_truncate k h ông tồ n tạ i dù b ạn đã tạo nó trước k hi thực h iện lệ n h TRUN CA TE

Lỗi x u ấ t h iện bởi vì TRU N CA TE TABLE là lệnh DDL nên H QTCSD LQH đã ngấm thực th i lện h COM MIT sau câu lệ n h này, do đó

b ạ n k h ô n g th ể rollback v ể điểím savepoint trước đó nữa

K h i cần h u ỷ bỏ bảing V'à .dữ liệ u trong nó, bạn sử dụng lệnh:

DROP TABLE tên-bảng [C A S C A D E CO N STRAIN TS] ;

B ạn chọn tuỳ chọm (CAS'CADE C O N S T R A IN T S khi b á n g cần xóa có rà n g buộc to àn vẹn th am chiếu khoá chính hay thuộc

tí n h duy n h â t N ghĩa là, nếu bạ.n xóa báng được các băng khác th a m chiếu đến m à k h ô n g dung tuỳ chọn CASCADE C O N STRA IN TS

đ ể xóa rà n g buộc đi kèmi t;hì HIQTCSDL sẽ báo lỗi Trong CSDL, để’ t r á n h lỗi do tạo b ản g trù n g tên , b ạn n ên dù n g lện h D R O P

T A B L E tẽ n -b ả n g - m ớ i (CASCADE CONSTRAINTS xóa bảng trước k hi tạo b án g m ới b ằn g lệnh C R E A T E T A B L E tê n -b á n g - m ớ i.

BÀI TẬP CÓ LỜK €IẨ I

1

T ê n t h u ộ c tí n h Mô tà /K iể u d ữ liệ u /R à n g b u ộ c

E m pN o Mẫ Giía lập trìn h viên, th o à tín h duy n h ấ t, chứa tố i đa 3 ký tự

P ro ject Tên dư án mà lập trìn h v iên th a m gia Tối đa 3 ký tự

T askN o Sô lương cóng việc trong m ộ t dự án K iểu dữ liệu kiểu sô’, tôi đa 2 chữ sô”

L ast_ N am e Ho cùa láp trìn h viên Tối đa 25 ký tự, là trư ờ n g dữ liệu b ắ t buộc

C leara n ce Mức độ bảo m ật mà lập tr ìn h v iên cần tu â n th ủ Tôi đa 25 ký tự

L ệ n h CREA TE TABìLlE ttạo báng như sau:

D R O P TABLE p ro g :rau im m e.T CASCADE CONSTRAINTS

CREA TE TABLE P r'o g jrta m n u e r

N h ư đ ã giới thúệịu Itrcong phần lý thuyết, chúng tôi đặt lện h D R O P T A B L E p ro g ra m m er C A SC A D E C O N S T R A IN T S trước

lệ n h CREATE T/ABiLIE iđể loại bỏ báng dữ liệu trùng tên có sầ n tro n g CSDL T heo quy ước đ ặ t tê n ở p h ầ n 1.7, các k hoảng

V;artchiar2 (3) PRIMARY KEY, V,'arrcbiar2 (25)

Víartchiar2 (25) ,

D ;a t:e „Víarrchar2 (3) ,Víartchar2 (15),

N ium lber (2 ) ,

V/arrchar2 (25)

Trang 23

th ư ơ n g 1: G iớ i t h i ệ u v ề SQL v à cơ s ở d ữ li ệ u q u a n h ệ 23 B

tr ắ n g tro n g tê n thuộc tín h được th a y b ằn g dấu gạch dưới Thuộc tín h ErnpNo là khoá chính cua bảng, còn thuộc tín h

L a st^N a m e là trườ ng dữ liệu b ắ t buộc n ên có rà n g buộc NOT NULL

ì H ãy tạo đoạn kịch b ản (script) n h ậ p các dữ liệu tr ê n vào b ả n g PROGRAMMER

Thực ra đoạn sc rip t chỉ đơn giản là tậ p tin v án bán p ro g ra m m er.sql chứa các lện h IN SE R T INTO chèn dữ liệu vào bảng

Nếu tậ p tin n ày được lưu tro n g ố d ĩa A, tạ i dấu n h ắ c SQL>, b ạ n gõ lện h ® “A : p r o g r a m m e r s q l” để’ thực th i đoạn scrip t.

Vì lện h IN S E R T INTO chỉ cho p h ép n h ậ p mỗi lần m ột bộ dữ liệu n ên bạn p h ải v iế t bảy câu lện h IN SERT INTO đ ể n h ậ p h ế t

đữ liệu của b ả n g trê n Theo m ặc đ ịn h , đ ịn h d ạ n g kiểu ngày là “DD-MMM-YY” với DD là n g ày tro n g th á n g (1-31), MMM là chữ

v iế t t ắ t tê n th á n g (JAN , FEB DEC), và YY là hai chữ số cuối cùng của nâm Do đó, để tr á n h xáy ra lỗi, bạn phải chuyển đ ịn h dạn g dừ liệu tro n g thuộc tín h H IR E J D A T E th à n h DD-MMM-YY Ví dụ, ngày 1 / 1 / 9 5 được chuyển th à n h ‘1-JA N -9 5 ’ (giá trị

ngày p h ải được chứa tro n g cặp dâu n h á y đơn)

ỉ Bạn h ãy sửa thuộc tín h clearance tro n g b ả n g PROG RAM M ER của lậ p trìn h viên có m ã 345 từ N U L L san g Secret.

N hư vậy tro n g bài tậ p này, m ã n h â n v iên b ằ n g 345 là điều k iện xác định bộ dữ liệu cần cập n h ật:

u p d a t e p r o g r a m m e r

SF.T c l ^ a r a n c ^ í — ' S a r r e t '

WHERE e m p n o = 13 4 5 1 ;

4 Bạn hãy ch è n h a i dòng dữ liệu sau vào b ả n g PROGRAM M ER, rồi h iển th ị họ, tê n , clea ran ce, ngày b ắ t đầu làm việc cùa t ấ t cả

6 B ạn hây th ự c th i tậ p tin S G sq l để làm mới dữ liệu tro n g CSDL S p o rtin g Goods Sau đó v iế t lện h cho b iê t độ lớn và chí nh

sô (tồng s ố các dòng d ữ liệu) của b ả n g S_EM P.

Độ lán là s ố lượng thuộc tín h chứa tro n g b ảng, còn ch ín h số là số bộ dừ liệu lưu tro n g báng Để b iế t độ lớn cúa bảng, b ạn

dùng lện h D E S C R I B E s _ e m p

Trang 24

V A R C H A R 2 ( 3 )

N U M B E R ( 1 1, 2 )

B ảng S_EM P CÓ 11 thuộc tín h , như vậy độ lớn cúa biãng là 11.

K ế đên, chú n g tô i dùng lện h SELECT liệt kê hết dữ liệu chứa trong b án g để xác đ ịn h c h ín h số của băng:

SE LE CT i d , l a s t _ n a n > e , f i r s t _ n a m e , u s e r i d ,

s t a r t _ d a t a , c o m m e n t s , 3 a a j i a g e r _ i d , t i t l e , d e p t _ i d , s a l a r y , c o m i n i s s i o n _ p c t

FROM s _ e m p ;

K êt quả có 25 dòng dữ liệu, vậy chính số là 25 Trottg Oracle, sau khi h iển th ị h ế t dữ liệu, tố n g sô dòng được ghi ớ h à n g cuôì

cùng Đ ây là th-ông tin plỉán hồi (feedback), theo mặc dịnh, quan hệ k ế t quả chứa n h iều hơn 6 h à n g th ì mới h iển th ị

feedback Tuy n h iê n , ban có th ể thay đồi th iế t lập này hăng lệnh sau tạ i dâu n h ắc SQL:

SET feedlback số-dòng-dữ-liệu với sô-dòng-dữ-liệu là s.ô nguyên, chỉ định sô dòng kết quá tối thiểu cần có để h iể n th ị feedback.

Trong b ả n g S _E M P, có bao nhiêu n h ân viên làm việc tạj bộ phận có m ã 41 và họ là nh ữ n g ai ?

C húng tôi d ù n g lện h SELECT kèm theo điều kiện d e p t j d = ‘4 1 ’ đẽ' xác địn h họ, tê n và ID của các n h â n viên làm tại bộ

Bạn h ãy nêu cácih h iển th ị toàn bộ thông tin báng mà không cần liệt kê tê n của từ n g thuộc tín h

B ạn dùng ký hi.ệui tắ t (*) trong câu lệnh SELECT theo cú pháp bên dưới Tuy n h iê n , với kiểu v iế t này, k ế t quả h iển th ị sẽ lộn

xộn hơn so với ciáclh liệ t k.ê từng thuộc tính

SELECT *

FROM tê n -Ề ẳ n S

[WHERE đ iề u - k iệ n ]

[ORDER B Y ] ;

H ãy h iể n th ị k ế t qiuả ở bài tậ p 1.7 theo thứ tự alphabet cửa họ nhân viên.

Để h iể n th ị quain hệ k ết quả theo th ứ tự họ nhân viê n bạn dùng th êm m ệ n h đề ORDER BY:

ORDER BY las t nauntì;

C húng ta dược kiết quả:

h iển th ị th eo th ú ỉ t;ự của họ n h ân viên, vởì các nhân viên trùng họ th ì h iể n th ị th eo th ứ tự của tên

SE LE CT i d , l a S ! t _ n a u u e , f i r s t _ n a m e

fro m s emp Kết quá liệt kê theo thứ tự của họ, với nh ữ n g người tr ù n g họ th ì sắp xếp th eo tên WHERE d e p t _ i d - -Như vậy, th ứ tự liệt kê thuộc tín h tro n g m ệnh đề ORD ER BY là r ấ t quan trọng

ORDER BY l a s t _ n ẩ Ể S ẽ ^ f i r s t _ n a m e ;

So với câu tru y víấn ở ví dụ trước, m ệnh đề ORDER BY của câu t.ruy v ấn tr ê n có th ê m thuộc tín h first_ n a m e th eo sau thuộc

tín h la.st_na.me Nỉhuívậy kết quả của câu truy vấn sẽ dược hiển th ị theo th ứ tự của họ và têfi n h â n viên:

Hai người này trù n g họ n ên được sắp xếp theo tê n

Giả sử bản.g ,s_<ermp có thêm cột m iddle_name và ban muốn sắp xếp k ế t quả theo th ứ tự cùa họ, tê n và chữ lót th ì m ệnh dề

ORDER BY plnảii đỉưalc viết như sau:

Trang 25

C hương 1: G iớ i t h i ệ u v ề SQL v à cơ s ở d ữ l i ệ u q u a n h ệ 25 E

1 1 V iết doạn s c rip t tạ o bảng Product cho cửa h à n g b án lẻ \Vaues-R-Us với các thuộc tín h liệt kê dưới đây Dùng ràng buộc hữu

d an h khi cần, sau đó kiểm tra xem b á n g vừa tạo có đú n g yôu cầu không

ID Mã m ặ t hàng, là trườ ng dữ liệu b á t buộc và th o á tín h duy n h ất, chứa tối da 5 ký tự

D ISCOU NT PE R C E N T A G E P h ầ n tr à m c h iế t k h ấu d à n h cho khách quen Tối da 1 chử sõ

PR IC E Giá b á n lé cùa tư ng m á t hàng, gồm 6 chữ sò tro n g đó có 2 chữ sõ th ậ p phân

12 L ệnh D E S C R IB E p r o d u c t cho b iế t câu trúc b ản g nhưng không tr ìn h bày các rà n g buộc trôn thuộc tín h Bạn có cách nào

xem rà n g buộc không?

Đề kiểm tr a r à n g buộc của b ản g P roduct, bạn xem góc n h ìn từ điến dừ liệu U S E R _ C O N S T R A lN T S chứa thòng tin rà n g

buộc của các bảng

Sau đây là d ạ n g tổ n g q u át của câu tru y vân xem rà n g buộc:

S E L E C T constraint name, constrain! type , , _ ,

CON s TRA IN T_NAME c TABLE_NAME

P R O D U C T S _ ID _ P K p PRODUCT

C ột co n stra in t_ ty p e, tê n hiển th ị là c , gồm các giá trị:

C: R àn g buộc loại C heck (H Q TCSDLQ H k h ô n g cho p h ép thuộc tín h có giá tr ị NULL)

P: R àn g buộc khoá chính (P rim a ry key)

U: R àn g buộc duy n h ấ t (U nique)

R: R àn g buộc khoá ngoại (F oR eign key)

13 Cho b iế t tê n và ý nghĩa của các cột thuộc góc n h ìn từ điển dữ liệu U S E R _ C O N S T R A IN T S ?

TABLE NAME T ên b á n g inà rà n g buôc đươc đ in h nphĩa

Trang 26

m 26 C h ư ơ n g 1: Giới thiệu về SQL và cơ sở dữ iệu uan hệSEA R C H _C O N D ITI ON Chuỗi văn bản của diều kiện tìm kiếm cho rà n g buộc CHECK.

R_OW NER Người đùng tạo b ản g cha m à b án g này th a m chiếu tới

R C O N STRA IN T NAM E Tên của thuộc tír.h PK hay UNIQUE tro n g báng cha m à b ả n g này th am chiếu tới

D E L E TE _R U L E Tác động tr ê n các FK khi thuộc tín h PK hay U nique của các khoá ngoại FK này bị xóa đi T uộc

tín h này chi chứa 2 giá tr ị CASCADE và NO ACTION

LAST_CHANGE Ngày hiệu c h ỉn h mới n h ấ t của rà n g buộc

1 4 Với m ộ t b ả n g dữ liệu cho trước, hãy liệ t kê các cột có địn h nghĩa ràn g buộc?

Đế’ tìm th ô n g tin về rà n g buộc tr ê n cột, b ạn xem góc n h ìn từ điển dữ liệu USER_CONS_COLUM NS Câu trú c cia gt: n h ìn này n h ư sau:

PRO D U CT S_N A M E_N N NAME

15 Là người sử dụng, làm cách nào để quan s á t các b án g m à chúng tôi đã tạo hoặc có quyền tru y xuât?

Trang 27

Phương 1: G iớ i t h i ệ u v ề SQL v à cơ sờ d ữ li ệ u q u a n h ệ 27 n

2 0 H ãy v iế t câu lện h tă n g thêm 1000$ tiề n lương cho những n h â n viên thuộc bộ p h ận có m ã 41 Nếu th ô n g tin tà n g lương tr ê n là

n h ầ m lầ n , bạn làm cách nào dế’ huý bỏ những th ay đối này?

B ạn dùng lện h UPDATE tă n g lương cho các n h â n viên ở bộ phận có m ã 41 Tuy nhiên , dề an toàn, b ạn n ên tạo sav ep o in t

trước k h i cập n h ậ t dữ liệu Khi đó, nếu yêu cầu sửa đổi dữ liệu là n hầm lẫn , bạn chỉ việc quay về điếm sav e p o in t dã tạo trước

Trang 28

I S 28 C h ư ơ n g 1: Giới thiệu về S Q L và cơ sỡ dữ liệu quan hệ

T rong Oracle, làm cách nào để lưu các lện h ở m ột phiên làm việc tương tác vào tậ p tin?

Đ ể lưu m ột lệnli tương tác vào tậ p tin bạn dùng lện h SQL*Plus sau:

SAVE tên-tập-tin

Ngược lại, nếu bẹn muốn lưu nhiều lệnh vào cùng tậ p tin th ì dùng lệnh:

SAVE tên-tập tin R EPLA CE

B ạn n ên đ ặ t đường d ẫn trước tê n tậ p tin , nếu không tậ p tin sẽ được lưu vào th ư mục mặc định Tương tự cho p h ầ n mở rộng của tậ p tin , nếu bạn không chỉ định, p h ần mở rộng là “.sq l”.

Làm cách nào đế thực th i câu truy vấn dã được lưu vào tậ p tin b ằn g lện h SAVE?

B ạn dùng lệnh SQL sau:

START tên-tập-tin

với điều kiện tên-tập-tin phái chứa cá đường dẫn đến tập tin và p h ần mở rộng.

Thực th i đoạn scrip t ở bài tậ p 1.2 để làm mới lại b án g PROGRAMMER Giả sử sau khi hoàn th à n h dự án KCW, mọi th à n h viên th a m gia dự án này đều được chuyến về trụ sớ chính cùa công ty Bạn hãy xóa n hữ ng n h â n viên này khỏi bản g PROGRAMM ER

Đ ể xóa các nhân viên này, bạn dùng lệnh:

D E L E T E FROM p r o g r a m m e r WHERE p r o j e c t = 'K C W '; I

S E L E C T l a s t n a m e , p r o j e c t c l e a r a n c e

FROM p r o g r a m m e r

WHERE c l e a r a n c e = 1 S e c r e t ' ;

K ết quá n hư sau:

C a m p b e l l N PR S e c r e t

3 r o w s s e l e c t e d

T heo yêu cầu công việc, mọi n h â n viên thuộc bảng PROGRAMM ER có clearance là Secret sẽ được chuyển th à n h T op Secret

B ạn hãy v iế t lện h SQL th ể hiện sự th ay dổi này

Thuộc tín h Id không bị giới h ạn sô chữ số p h ần nguyên và phần lẻ th ậ p phân Thuộc tín h M a n u fa ctu rer_id chỉ chứa tôi đa 5

sô’ nguyên, giá t r ị n h ậ p vào có p h ần lẻ sẽ được làm trò n Cuối cùng thuộc tín h Price chứa tôi đa 5 chữ sô, tro n g đó có 2 số lẻ

(Id, M a n u fa c tu re rJ d , Price) VALUES (98765, 98765, 98765);

K hông thực h iệ n được vì sô’ chữ sò’ vươt quá giới han

2 7 K hi n h ậ p dữ liệu cho bảng, tôi có cần liệ t kê tê n thuộc tín h tro n g m ện h đề IN SERT INTO không?

Trang 29

C hương 1: G iớ i t h i ệ u v ề S Q L v à cơ sở d ữ li ệ u q u a n h ệ 29

Bạn k h ông cần liệt kê tê n cột, chi cần đ ặ t các giá tr ị trong m ệnh đề VALUES tương ứng với th ứ tự liệt, kê thuộc tín h cùa lện h C REA TE TABLE C húng tôi sẽ dùng ba lệnh IN SERT INTO dầu tiê n cùa bài tậ p trê n dê m in h họa điều này C hú ý th ứ

tự các thuộc tín h nh ư sau: Id M anufacturer_id, Price

L ện h IN SERT INTO không liệ t kê tê n cột

t

IN S E R T IN T O t o o l VALUES ( ^ 8 7 , 9 8 7 , 9 8 7 ) ;

G iá tr ị ứng với thuộc tín h M a n u f a c tu re r jd /

/Giá tr ị ứng với thuộc tín h PriceTương tự, hai lện h IN S E R T INTO tiếp theo được v iế t lại như sau:

28 V iêt lện h SQL tạo b ả n g gồm 5 trường chứa th õ n g tin vế thời tiế t với nhữ ng ràn g buộc sau:

(1) thuộc tín h City là b ắ t buộc và có tôi đa 13 ký tự.

(2) thuộc tín h Sam ple_D ate thuộc kiểu ngày và không chứa giá trị NULL.

(3) Noon và M id n ig h t chứa dữ liệu kiểu sô, gồm 3 chữ sô tro n g dó có 1 sô ở phần th ậ p phân

(4) P recipitation là dữ liệu kiểu số với tôi da 5 chữ sô, trong đó có 1 chử sô p hần th ậ p phân.

29 T ạo b ản g STA FF có các thuộc tín h và rà n g buộc sau Bạn đ ặ t kiểu dữ liệu, định kích thước và d ặ t tê n rà n g buộc nêu cần cho

S alary Thuộc kiểu sô, chứa tối đa 6 chữ sô trong đó có 2 sô phần th ậ p phàn

ỈO L ện h D EL E T E và DROP TABLE đều có tác dụng xóa dừ liệu trong báng, bạn hãy cho b iết sự khác nhau giữa hai câu lện h này?

ỉ l G iả sử ta có đ ịn h n g h ĩa bảng trynuni như sau:

12 B ạn chạy tậ p tin W orld_Cities.sql rồi hiển th ị mọi th ô n g tin chưa trong báng W orldCities theo th ứ tự alp h ab e t giám d ần của

thuộc tín h continent, th ứ tự tă n g dần của country và th ứ tự giảm dần cúa city.

13 L iệ t kê tê n các th à n h phô không thuộc Châu Á chứa tro n g bàng W orld_City theo th ứ tự cùa lục địa Với các th à n h phô’ thuộc

cùng lục đ ịa th ì xếp th ứ tự theo quõc gia, rồi th eo th ứ tự cùa tên th à n h phố

14 L iệ t kê tê n và th ô n g tin về vĩ độ và k in h dộ của t ấ t cả th à n h phô ớ C háu Âu chứa tro n g bảng W orld_Citỵ theo th ứ tự a lp h a b e t

giảm dần của tên th à n h phô'

15 B ạn thực th i tậ p tin SG sq l rồi liệ t kê họ, user ID và ngày b ắ t đầu làm việc cùa những n h â n viên được tuyến dụng vào ngày 8

th á n g 3 n ăm 1990

16 H iể n th ị họ, tên , m ã phòng ban của các n h â n viên không thuộc bộ p h ận có mà 44

17 Mô tẫ góc n h ìn từ điển dữ liệu U SER _O BJEC TS và h iển th ị tên của các b án g do người dùng tạo

(8 H iể n th ị họ, tê n và mức lương của các th ư ký kho h àn g tstock clerk) theo th ứ tự tă n g d ần của mức lương

19 H iể n th ị họ, tê n , ngày b ắ t đầu làm việc của những n h â n viên được tuyến dụng sau ngày 31 th á n g 8 năm 1991

10 H iể n th ị họ, tê n và mức lương của nhữ ng n h â n viên có mức lương th ấ p hơn 1200 USD

11 H ãy cho b iế t điều gì sẽ xảy ra nếu bạn dùng lện h DROP TABLE để xoá báng S_EM P?

LỜI GIẢI CHO BÀI TẬP BỔ SUNG

18

c r e a t e t a b u : c l i m a t e (

C i t y V a r c h a r 2 ( 1 3 ) n o t n u l l ,

S a m p l e _ D a t e DATE n o t n u l l ,

Trang 30

IS 30 C h ư ơ n g 1: Giới thiệu về SQL và cơ sở dữ liệu quan

3 0 Sự khác nhau của hai lện h D ELETE và DROP: lện h D E L E T E F R O M xóa các bộ dữ liệu cùa b ản g dựa vào điều k iện WHERE

nhưng vẫn giữ nguyên cấu trúc bàng, còn lệnh D R O P T A B L E xóa báng cùng với toàn bộ nội dung Nếu lện h D RO P TABLB

th à n h công, bảng bị xóa không còn tồn tại tro n g CSDL nữa

3 1 Sau lện h IN SERT IN TO đầu tiên , b án g trynuìn chứa các giá trị sau:

F I R S T SECOND T H IR D

Giá tr ị ở cột S E C O N D và T H IR D là 0 vì chúng đâ được làm tròn.

L ệnh IN SERT INTO th ứ hai gây lỗi vi giá trị của thuộc tín h th ứ ba nằm ngoài giới h ạ n dữ liệu định nghĩa

L ệnh IN SERT INTO th ứ ba cũng phạm lỗi tương tự

DESCRIBE U SER _O BJEC TS;

K ết quả câu lệnh trê n tuỳ thuộc vào các báng dữ liệu bạn dã tạo Để liệ t kê tên các bảng, bạn dùng câu tru y v ân sau:

4 1 N ếu bạn xóa bảng S_EM P th ì HQTCSDL sẽ báo lỗi “Unique I p rim a ry keys in table referenced by foreign k e y s ” vì bảng nà

được th a m chiếu bởi khoá ngoại FK của các b ản g khác Đế’ xóa báng này, bạn dùng th êm tuỳ chọn C ASC AD 1

C O N S T R A I N T S huỷ bỏ các rà n g buộc kèm theo bảng:

DROP TABLE s _ e m p CASCADE C O N S T R A IN T S ;

Trang 31

C REA TE TA B LE, SE LE C T cùng với các câu lện h DDL thực th i rà n g buộc toàn vẹn và thao tác trê n câu trúc bảng.

1 TOÁN TỬ CHỌN LựA (SELECTION)

K ết quả thực th i to án tử chọn lựa trê n quan hệ r là inột quan hệ mới gồin đầy đủ những thuộc tín h của r, chứa các dòng dữ liệu thuộc r th o ã m ãn điều kiện cho trước T rong SQL, phép toán này được thực th i th ô n g qua câu lện h SELECT

VÍ DỤ 2.1

Hiển thị thông tin vể bộ phận Operations chứa trong bảng S_D EPT thuộc cơ sở dữ liệu Sporting Goods.

Với yêu cầu h iển th ị các m ẩu tin của bảng S_D EPT th o ả diều kiện N A M E = ‘O perations’, bạn v iế t câu lện h SELECT như sau:

Q uan s á t k ế t quá, ta th ấ y tên các cột được v iết ớ d ạng v iết hoa và dược liệ t kê theo trìn h tự tro n g m ệnh dề SELECT.

Đôi với cột region_id, m ặc dù câu select chí định tiêu đề cột là cà từ region_id nhưng bảng k ế t quả chỉ h iển th ị ba ký tự đầu

của tê n cột, reg, m à thôi Nguyên n h â n là do cột này được khai báo kiểu VAROIIAR2(3) Theo m ặc đ ịn h , HQTCSDLQH O racle chi

h iể n th ị nội dung các cột th eo đúng sô ký tự khai báo tro n g p h ần định nghĩa cột, bạn quan s á t cấu trúc cùa báng S_DEPT dưới dây

Hiển thị thông tin về bộ phận Operations chứa trong bảng S_D EPT thuộc cơ sở dữ liệu Sporting Goods mà không cẩn chỉ định đầy dù tên các CỘI.

B ạn có th ể sử dụng dâu * tro n g m ện h đề S elect th a y vì liệ t kê h ế t tấ t cả thuộc tín h :

Tuy n h iê n so với ví dụ trước, tr ìn h tự h iển th ị các cột ở ví dụ này có p h ầ n nào khác biệt

N ếu bạn dùng dấu * tro n g câu tru y vân, Oracle h iển th ị tê n cột theo th ứ tự đ ịn h n ghĩa tro n g câu lệnh tạo b ản g C REA TE

TA B LE Q uan s á t cấu trú c b ản g S_DEPT, ta th ấ y cột ID được định n ghĩa trước tiên , k ế đến là N A M E và cuối cùng là R E G IO N _ID.

Do đó câu tru y vấn tr ê n h iển th ị k ế t quả th eo đúng th ứ tự từ tr á i san g p h ái của các cột tro n g báng

Đ ể h iể n th ị tấ t cả các cột và h à n g tro n g bán ?, bạn dùng câu truy vân sau:

S E L E C T *

FROM tên-bảng;

C âu lện h tr ê n ứng vđi phép selection không có điều k iện W H ERE đi kèm (mọi dòng tro n g bảng đều thoả) Bạn xem ví dụ sau:

VÍ DỤ 2.3

Hiển thị toàn bộ dữ liệu của bảng S_D EPT.

Sau đây là câu tru y v ân và k ế t quả:

Trang 32

C h ư ơ n g 2: Toán tứ quan hộ tr o n g SQL

2 ĐỊNH DANH CHO TIÊU ĐE CỘT

T ro n g các câu truy vấn trên HQTCSDLQIỈ hiển th ị kết quá theo các giá trị mặc đ ịn h C hăng h ạn , ở ví dụ 2.1, tiêu đề cột

regỉon_id chí h iển th ị 3 ký tự đầu nên không th ể hiện rõ nghĩa cho thuộc tín h Giá sứ vì lý do báo m ặt bạn không muốn câu tru y vấn

h iể n th ị tiêu đề cột Khi đó, bạn phái thay th ế tiêu đề bàng m ột tên khác, chúng tòi gọi các tê n th ay th ế là đ ị n h d a n h cộ t.

B ạn hãy lưu ý: địn h danh chi có tác dụng làm rõ nghĩa cho nội dung cột hiến th ị chứ không th a y dổi tê n cột thực sự của bàng

Đ ịn h d a n h được định nghĩa trong mệnh dề SELECT cùa câu truy vấn Sau dây là hai phương p háp tạo đ ịn h danh cột Cách

th ứ nh â’t, bạn đ ặ t từ khoá AS và tên định danh theo sau tên cột Bạn lưu ý, định danh p h ái được chứa tro n g cặp dấu n h áy kép Cách

th ứ h ai, k h ông dùng từ khoá AS chì khai báo tên định danh ngay sau tên cột Hai cách này là tương đương n h au , như ng cách dùng từ

k h o á AS giúp p h ần địn h nghía dinh danh rõ ràng và dễ dọc hơn

B ạn nên đ ặ t đ ịn h danh trong cặp dấu nháy kép dù I1Ó chí là m ột từ đơn Tuy nhiên, nêu dịn h d an h gồm cả chữ thường, chữhoa, k h o án g trắ n g ngăn cách, và ky tự đặc biệt nh ư $ hay #, th ì bạn b ấ t buộc phái d ặ t dịnh d an h trong dâu n h áy kép

T rường hợp tiêu dề bạn muốn hiến thị có kích thước lớn hơn sô ký tự định nghĩa tro n g lệnh CREATE TABLE, bạti dùng lệnh

SQ L*Plus C O L U M N định dạng lại cách hiển thị cột

Ví dụ sau sẽ m in h họa cách dùng dịnh danh và lệnh COLUMN

V Í DỤ 2.4

Hiển thị họ, tên và mức lương của lất cá nhân viên trong cơ sớ dữliộu Sporting Goods với 'iêu đề cột là Last Name, First Name, và Salary.

L ast N a m e và F irst Name là hai tiêu đề chứa khoáng trắ n g p hán cách, do đó chúng phải được chứa tro n g cặp dâu n háy kép

Câu lệnh SQL* Plus COLUMN khôug chi định nghĩa lại giá trị mặc định cho tiêu đé cột m à còn dịnh dạng cách trìn h bày dữ liệu:

COLUMN tên-cột H E A D IN G tên-tiêu-để-mới FORMAT (mẫt-nạ-định-dạng]

với m ặt-nạ-dịnh-dạng chi định cách Irình bày dữ liệu chứa trong cột Báng 2-1 dưới đây giới thiệu m ột số m ặ t nạ địn h dạng

sử dụ n g tro n g quyển sách này

A n H iển th ị cột với kích thuớc 11 ký tự A10 H iến th i 10 ký tự, nhữ ng ký tự dư sẽ bị cát bó

9 Đại d iện cho ky só cần hiển thị 999 Tượng trư n g cho 3 chữ sô’ Nếu sô 0 b ấ t đầu th ì th a y thê

b a n s khoảng trắn g

0 H iền th ị m ột số 0 tại vị trí đảu hay m ột giá trị 0

tạ i vị tr í hiện tai

0999 Nêu các sô' m à 9 đại diện đều là 0, h iển th ị số 0 tạ i vị

tr í dầu hay tạ i vị tr í hiện tại

» H iển th ị m ột dấu phẩy tại vi trí tương ứng. 9,999 Số 2456 dược h iến th ị là 2,456.

H iển th ị m ột dấu châm tai vi trí tương ứng 9.999.99 Sô’ 2456 dược h iển th ị là 2,456.00

$ H iến th ị dâu $ tại vị tr í tương ứng $999.99 Số 25 dược hiển th ị là $25.00

VÍ DỤ 2.5

Hiển thị khu vực cư trú, tên và mã nhân viên của tất cà nhân viên trong bộ phận

Department Id.

Yêu cầu của ví dụ này tương tự như ví dụ 2.1 chi khác á tiêu đề

d ò n g đầu tiê n của quan hệ kết quả:

COLUMN r e g i o n _ i d HEADING " R e g i o n I N u m b e r " FORMAT A 1 0

COLUMN i d HEADING " D e p a r t m e n t I I d " FORMAT A 1 0

Operations với tiêu đề cột là Region Number, Department Name, và

cột hiển th ị Sau đây là nội dung câu tru y vấn kèm t.heo hai

O p e r a t i o n s

O p e r a t i o n s

41 42

5 r o w s s e l e c t e d

Ký tự ngăn cách I chia tiêu đề thành hai dòng Ớ ví dụ này, chúng tôi dùng lệnh COLUMN đế địn h d ạn g tiêu dề m à không

dù n g đ ịn h d an h vì HQTCSDL chi hiến thị tên cột hay dịnh đanh theo dúng chiều dài cột lúc đ ịn h nghĩa và tiêu đề sẽ bị c ấ t bớt m ột

số ký tự giông như tro n g ví dụ 2.1.

Đ ịnh d ạn g cột xác định bới lệnh COLUMN vần tồn tại chu dén khi cột được định d ạ n g lại bằng lệnh COLUMN mới hay tiêu

đề cột bị xóa bởi lện h CLEAR Ngược lại, định danh theo sau từ khoá AS trong m ệnh đề SELEC T chỉ có tác dụng hiển th ị tiêu đề cột

tạ m th ờ i C húng sẽ m ấ t đi sau khi lệnh SELECT được thực th i

Đ ể xóa tiêu đề cột, ban dùng lệnh CLEAR cùa SQL*Plus:

Trang 33

3 TOÁN TỬ CHIẾU (PROJECTION)

K ết quả thực th i to án tứ cliiếu trẽ n tậ p thuộc tín h X của quan hệ r tạo ra m ột quan hệ mới gồm những thuộc tín h X và k h ông

chứa các m ấu tin bị trù n g lặp Đê t.hực th i toán tứ này, bạn th ê m từ khoá D IS T IN C T vào m ệ n h đề SE L E C T (xem h ìn h 2-1) Từ khoá

n ày có tác (lung loại bỏ nh ữ n g dòng dữ liệu trù n g lắp T hõng thường, khi bạn không chỉ đ ịn h gia tr ị này, câu truy vân sử d ụ n g giá tr ị

m ặc địn h A L L cho phép h iển th ị mọi m ấu tin thuộc bẵng, kể cá những m ấu tin trù n g lặp

Thuộc tín h tro n g p h ép chiêu cúa bàng dược liệt kẽ tro n g m ệnh dế SELEC T như bìn h thường. _

S E L E C T (ALL I DISTINCT! cộl-1, côt-2, cột-'ỉ CỘI-N FROM bảng -) báng-N

IW H E R E diểu-kiộnl

ÍORDER BY cộl_1 IASC I onscl I, cột 2 IA.SC I DESCỊ II;

Hình 2-1 Cú pháp câu lệnh S E L E C T với chọn lựa D ISTIN CT và giá trị mặc định ALL

VÍ DỤ 2.6

H.ìy cho biết có bao nhiêu bộ phận trong bảng s_ DEPT

Bạn dù n g từ khoá D ISTIN C T tro n g m ệnh để SELECT đế’ loại bỏ các bộ phận trù n g lặp

Quail hệ k ế t quả tr ê n không chứa m ẩu tin trù n g lặp, nh ư vậv bảng s ^ d e p t gồm 4 bộ p h ận k hác nhau

Khi b ạn áp dụng phép chiếu trê n nhiều thuộc tín h cùa quan hệ th ì tín h duy n h â t của bộ dữ liệu sẽ phụ thuộc vào giá tr ị của t ấ t

cả các cột dó B ạn hãy xem ví dụ sau:

U N IT E D S T A TES NORTH A M ERICA

2 2 r o w s s e l e c t e d

K ết quá tr ê n gồm 22 quốc gia khác nhau

N hư đã tr ìn h bày, phép chiếu trê n 2 thuộc tín h country và continent trá về m ấu tin chứa tê n quốc gia và châu lục th o ả tín h

duy n h ấ t; n ghĩa là chí cần giá tr ị kê't hợp giừa quốc gia và châu lục thũá tín h duy n h ấ t còn ở từ n g thuộc tín h riên g lẻ, tín h c h â t này là không cần th iế t

Ví dụ ở cột C O N TIN EN T, m ặc dù.'từ EU R O PE lặp lại nhiều lần nhưng quan hệ k ế t quả vẫn k h ô n g tổn tại m ẩu tin trù n g nhau

T ác d ụ n g của từ khoá D ISTIN C T tro n g câu tru y ‘vân này r ấ t đ án g kể N hờ vào từ khoá này, k ế t quả chỉ gồm 22 m ẩu tin th a y vì 32 Nếu b ạn k hông dùng DISTINCT, câu truy vấn trê n sẽ không thực th i cho phép chiếu tr ê n h ai cột country và continent.

4 TOÁN TỬ NÔÌ (JOIN)

P hép nôi gộp dừ liệu của hai hay nhiều báng vào cùng m ột bảng Các bảng th a m gia vào p h é p nối sẽ kêt nôi với n h a u th ô n g

qua các thuộc tín h chung chi đ ịn h trong m ện h đề W H ERE T hông thường, nhử ng thuộc tín h chung này thuộc quan hệ klioá - khoá

Trang 34

C h ư ơ n g 2: Toán tử q u a n hệ tr o n g SQL

ngoại P h ép nôi được p h ân loại dựa vào điều kiện k ế t nôi (k ết b ằn g hay k h ông bàng), sõ lượng b áng (m ột hay nhiều b ảng) và loại m ẩu

tin tru y xuâ't (có dữ liệu tương ứng ở b ản g khác hay không) T ro n g p h ạ m vi chương này ch ú n g tôi chi giới th iệu nhữ n g d ạ n g p h ép nôi liệ t kê tro n g b ản g 2-2

(p h ép tự k ế t hay phép nối nội)

P h ép nôi giữa m ột báng với c h ín h nó

P hép kế t bằng E quịịoindiay còn gọi p h é p nối bàng) là p h é p nôi hai b ả n g th ô n g qua các giá trị chung b ằn g nhau Cú p háp

lệ n h S E L E C T thực th i lện h n ày được tr ìn h bày tro n g h ìn h 2-2 B ạn có th ề dùng lệ n h này đ ể k ế t nôi cùng lúc nhiều b ả n g dừ liệu

Hình 2-2: Dạng tống quát của lệnh S E L E C T nối hai bảng dữ liệu qua phép kết bàng.

S E L E C T bàng-1.cột1 bảng-1 cộtN , bãng-2 cộl1, ,b<ỉng-2 cộtN FROM bàng-1, bảng-2

W H E R E bãnR-1 cột-chung = bảnR-2.cột-chung;

T ro n g câu lệ n h SELEC T trê n , việc đ ặ t tê n b ản g trước mỗi tê n cột là cần th iế t vì h a i b ả n g có th ế có cột trù n g tên N ếu hai b ản g

k h ô n g chứa cột trù n g tê n , bạn chỉ cần ghi tê n cột là đủ Tuy n h iê n , đ ể cải th iệ n h iệu suâ’t làm việc của hệ thông, bạn n ê n v iế t đđy đủ

tê n b ả n g và tê n cột

VÍ DỤ 2-8

Hiển thị họ, tên, và tên phòng ban của tất cả các nhân viên trong bàng S_D EP T

Đ ể thự c h iệ n yêu cầu trê n , bạn gộp dữ liệu của h ai bảng S_D EPT và S_E M P vào m ộ t báng, tro n g dó thuộc tín h họ và tê n được

tr íc h từ b ản g S_EM P còn tê n phòng ban th ì rú t ra từ b ản g S_D EPT H ai b ản g này k ế t nốì nhau th ô n g qua thuộc tí n h chung là m ã

p h ò n g ban: d ep t_ id của b ảng S_EM P và id của bảng S_DEPT Điều k iện tro n g m ện h dề W H ER E của p h é p k ế t b ằn g n h ư sau:

s_emp.dept_id = s_dept.id

d ep t_ id là khoá ngoại của b ảng S_EM P, th a m chiếu đến k h o á ch ín h id cùa b ản g S_DEPT.

L ện h SELEC T thực h iện p h ép k ế t b ằn g trê n n h ư sau:

SELECT s_emp.last_nama, s_amp.first_name, s_dept.name AS "Department"

FRCM s_emp, s_dept

WHERE 3_emp dept_id — s_dept.id;

T ro n g câu tru y vấn trê n , chúng tôi vẫn chỉ d ịn h tê n b ả n g cho thuộc tín h m ặc dù h ai b ản g này k h ông chứa cộ t dữ liệu trù n g

tê n N ếu k h ô n g muôn chỉ đ ịn h tê n bảng, bạn v iế t lại câu tru y vấn tr ê n n h ư sau:

SELECT last_name, fìrst_name, name AS "Department"

FROM s _ « m p , s _ d e p t

WHERE s_omp.dept_id « s_dept.id;

Sau d ây là k ế t quả:

25 rows selected.

4.2 Đ ơ n g iả n h ó a c â u tr u y v ấ n b ằ n g đ ịn h d a n h b ả n g

Với cách v iết câu trtiy vấn à p h ần trước, nếu tê n bảng quá dài, việc xác đ ịn h b ản g cho thuộc tín h tôn n hiều th ờ i g ian lại dễ

gây lỗi Do đó, dể đơn g iản b ạn dùng địn h d a n h th a y cho tê n bảng Đ ịn h d a n h b ă n g là tê n tạm cho bảng, theo sau tê n b ản g tro n g

m ệ n h đề FROM của câu lện h SELECT Sau k h i lện h SELEC T được thực th i, đ ịn h d a n h k h ô n g còn tồ n tạ i nữa Để ti ế t kiệm th ờ i gian

v iế t câu tru y vấn, b ạn n ên chọn địn h d an h t h ậ t n g án gọn K hi b ạn dã gán đ ịn h d a n h cho tê n b án g tro n g m ện h đề FRO M , đ ịn h d an h

dó p h ả i dược dùng xuyên suốt cả câu lện h SELECT

VÍ DỤ 2.9

Sử dụng định danh, bạn hãy hiển thị họ, tên và tên phòng ban của tất cả nhân viên trong cơ sở dữ liệu SportingCoods.

Câu tru y vấn này tương tự như câu truy vấn trong ví dụ 2.8 Đ ể tiện so sán h , bạn xem câu truy vấn không sử dụng đ ịn h d an h trước:

SELECT s_emp.last_name, s_emp.first_name, s_dept.name

FROM 3_emp, 3_dept

WHERE s_emp.dept_id « s_dept.id;

Dưới dây là câu tru y vấn có dùng d ịn h d a n h (chữ in đậm):

SELECT A.last_name, A.first_name, B.name

FROM s_em p A , s _ d e p t B ^ _Đ ịnh d an h dược d ặ t tro n g m ệ n h đề FROM , sau tê n báng Đ ịnh d a n h của b á n g s_em p là AWHERE A d e p t _ í d = B i d ; v à b ả n g s _ d e p t l à B

C hú ý vị t r í của d ịnh d an h là ngay sau tê n b ản g tro n g m ện h dề FROM Ớ đây ch ú n g tôi đ ặ t đ ịn h d an h cho b ả n g s_enip là A,

còn đ ịn h d a n h cho b ản g s_dept là B Khi đó, bạn dùng A th ay cho s_em p và B th a y cho s_ d ep t trong su ố t câu truy vấn.

Đ ịn h d an h b ản g có chiều dài tôi đa 30 ký tự Tuy nh iên , nếu đ ịn h d an h quá dài sẽ m ấ t di cóng dụng giảm th iể u sự phức tạ p cùa câu tru y vân Theo quan điểm của chúng tôi, đ ịnh d an h càng n g ắn gọn càng tô’t

Trang 35

C hương 2: Toán tử quan hệ trong SQL 35 B

4.3 H iệ u c h ỉn h k ế t q u ả c â u tr u y v ấ n :

Đ ịnh d a n h cột chỉ kiểm so át việc h iể n th ị tiêu đề cúa quan hệ k ế t quá chứ không địn h dạng dữ liệu

Để' hiệu ch ỉn h k ế t quá tru y vấn b ạn có th ế dùng toán tứ gliép nối, I I , k ế t hợp các cột vđi các chuỗi ký tự dể tạo n ê n biểu

thức ký tự Chuỗi ký tự là m ột dãy ký tự đ ặ t tro n g dâu n h á y đơn Ngoài ra dề m á rộng k ết quả h iển th ị, bạn có th ể dùng to án tử g h ép nôi I I k ế t nối giá tr ị cột với chuỗi ký tự, biểu thức và sô’ tro n g càu lện h SELECT

Ví dụ sau m in h họa cách dùng to á n tứ g h é p nối hiệu c h ín h k ế t quá câu truy vân

VÍ DỤ 2.10

Hiển thị họ, tên, chức vụ của các nhân viên trong bảng S_EM P

Câu lộ n h SE LE C T sau tr ìn h bày cách nôi tê n cột vđi các chuỗi ký tự dể tạo nên biểu thức ký tự Biểu thức này được xem là

m ột cột dữ liệu n ên bạn có th ể dùng đ ịn h d a n h đ ể đối tê n cột ơ đây chúng tôi dùng th êm k hoảng tr ắ n g ngăn cách các giá t r ị cột Iihằin tă n g tín h dễ đọc cho k ế t quả h iển th ị:

P h é p t ự k ê t s e ft j o i n (còn gọi là p h ép nôi nội) là p h ép nôi m ột bảng với chính nó Để dễ làm việc, bạn d ặ t h ai đ ịn h d a n h

kh ác n h a u cho b ản g và xem n h ư đang thự c h iệ n p h ép nối cho hai b ản g khác nhau

V Í DỤ 2.11

Hiển thị tên nhân viên và người quản lý tương útig của nhân viên này trong cơ sở dữ liệu Sporting Goods.

Để thực h iệ n yêu cầu tr ê n , bạn k ế t b ả n g S _F M P với c h ín h nó b ằn g cách đ ặ t hai đ ịn h d an h khác nhau cho b ản g này

Cụ th ể tro n g ví dụ sau đây, chúng tôi g án cho b ả n g S_E M P đ ịn h d an h E (tượng trư n g cho Em ployee) và M (tượng trư n g cho

H ìn h 2-3a và 2-3b dưđi đây là cú p h á p của to á n tử nỏ'i ngoài (o u ter join)

S E L E C T bàngl cột 1, bảngl cộtN, bảng2.cột1, bảng2.cộtN FROM b án g l, bảng2

W H E R E bảngl tẻn-cột (+) = bàng2.tên-cộl;

Hình 2-3a Phép nôì ngoài hiển thị thông tin của những bộ dữ liệu thuộc bảng hai bất chấp những bộ này có giá trị tương ứng òr bảng một hay không.

S E L E C T bảngl cột 1, bảngl cộtN, bàng2.cột1, bàng2.cộlN FROM bán g ), báng2

W H E R E bảngl tên-cột = bảng2.tên-cột (+) ; Hình 2-3b Phép nối ngoài hiển thj thông tin của nhũtig bộ dữ liệu thuộc bảng một bất chấp nhữhg bộ này có giá trị tương ứhg bảng hai hay không.

T oán tử nối ngoài được ký hiệu là dấu cộng đ ặ t tro n g ngoặc đơn (+)

T ro n g m ện h đề W H ER E toán tử n à y th e o sau cột có th ể chứa giá tr ị N ULL tương ứng với các giá tr ị không N ULL tro n g b ả n g còn lại Vì vậy, th eo cú p h áp tr ê n , dấu (+) chỉ có th ể đ ặ t tạ i m ộ t v ế của điều k iện W HERE

VÍ DỤ 2.12

Liệt kê tất cả nhân viên trong bảng s emp cùng với người quản lý của họ, cả nhũtig nhân viên không có người quản lý.

Dưới d â y là câu tru y vân và m ộ t p h ần k ế t quà:

S E L E C T M l a s t _ n a m e I I ' ' I I 'w o r k s f o r ' I I ' ' I I

E l a s t _ n a m e I I 1 1 I I E f i r s t _ n a m e A S " M a n a g e r a n d t h e i r e m p l o y e e s "

FROM s _ e m p M , s _ e m p E

WHERE E i d ( + ) = M m a n a g e r _ i d ;

Trang 36

C h ư ơ n g 2: Toan tử quan hệ iro n g SQL

Câu tru y vấn này gần giống câu truy vân ơ ví dụ trước, ngoại trừ sự hiện diện cùa toán tứ nòi ngoài (+) ở m ệ n h dề W H ERE

T o án tử này cho p h ép m ẩu tin cúa m ột báng kết nối với mẩu till rỗng cùa bang còn lại

Xem quan hệ k ế t quả trê n , ta th ấv tấ t cả nhân viên và người quan lý tương ứng đều dược h iển th ị k ế ca n h ữ n g th à n h v i ê n

k h ô n g có người quản lý như M artin Carmen.

5 TẠO KHOÁ NGOẠI

T rong chương m ột, chúng tôi dã giới thiệu lệnh CREATE TABLE cũng như cách địn h n g h ĩa khoa chính cùng với c á t ríiiiK buộc

N O T NU LL và U N IQ U E, ơ p h â n này, bạn sẽ hoc cách cài đặt các ràn g buộc to an vẹn N hư đã đé cập ơ p h án 1.4, khoá ngoai giup duy

t r ì tín h n h â t quán giữa các m ầu tin của hai quan hệ hoậc giừa cac mấu tin trong cùng m ột quan hộ Bạn có th ẽ đ ịn h nghỉa khoa ngoại lúc k h ở i tạo b ản g hay sau đó dều đươc cả

Khoá ngoại có th ể được định nghĩa trén cột hay trên toãn bộ bang, ơ chương một, bạn dã b iế t rằ n g tr ê n mỗi cột chi có duy

n h ấ t m ộ t ràn g buộc ở cấp độ cột mà thôi Tuy nhiên một bảng th ì cò ihê cỏ nhiều thuộc tin h đươc đ ịn h nghỉa là khoá ngoai (FK) Lưu

ý, k h i tạ o khoá ngoại, bạn cán xác định cột dữ liệu được tham chiéu trong bang cha có là khoá chính hoặc th o a tín h duy n h á t hay không

column-name-N kiểu-(Jữ-liộu-N |r,')ng-buộc|

Câu lện h tạo b ản g Iihư sau:

CREATE TABLE customer(

Để tạo khoá ngoại nàjv, thuộc tính C reditSíanding trong băng C rcdilType phái là khoá c h ín h hoặc th o á tín h UNIQUE.

6 ĐỊNH NGHĨA KHOÁ CHÍNH CHO BẢNG ĐÃ T ổN TẠI

Để địn h nghĩa khoá clhímh hay bộ khoá chính cho bảng có sẩn, bạn áp dụng cú pháp sau của lệnh ALTER TABLE:

Tên báng cha

s o c i a t e l d ) ,

Trang 37

Bạn hãy Ihêm ràng buộc khoá chính cho thuộc tính Year.

Câu lện h th iế t lập rà n g buộc khoá chính cho thuộc tín h Y ear như sau:

PRIM ARY KEY ( C o u n t r y _ N a m e , Y e a r ) ;

Vì khoá c h ín h gồm h ai thuộc tín h nên bạn cần liệ t kệ tê n của hai thuộc tín h này tro n g m ện h đề PRIMARY KEY

7 GIỚI HẠN GIÁ TRỊ NHẬP CHO CỘT BANG RÀNG BUỘC CHECK

T ro n g các ví dụ trước, chúng tòi giả sử ràn g dữ liệu íib ậ p vào các b ả n g đều dũng kích thước, giới h ạn , và kiểu dữ liệu

Tuy n h iê n , trong thực tê, do sơ sót, ngườusáKđụng có th ê p h ạm lỗi khi n h ậ p liệu C h ẵ n g h ạn , tro n g lúc n h ận đơn h à n g , n h â n

v iên n h ậ p liệu lỡ n h ậ p quá giới h ạn khoán nợ cho m ột khách h à n g nào đó Đế’ tr á n h trư ờ n g hợp này tỗ t n h â t bạn nên n g â n ch ặ n lỗi ngay tro n g quá tr in h n h ậ p bằng cách đ ặ t rà n g buộc C H E C K trê n các thuộc tín h của bảng Mặc dù rà n g buộc CHECK có th ể dược bổ sung sau k h i khởi tạo báng, bạn nên chỉ đ ịn h rà n g buộc này ngay k h i định n g h ĩa báng đế các lỗi n h ậ p liệu được p h á t h iện sớm

T ro n g câu tru y vân trê n , chúng tôi dùng rà n g buộc C H EC K giới h ạn giá tr ị n h ậ p vào cột zip_code Chuỗi biểu thứ c th eo sau

to án tử IN liệ t kê các giá tr ị được phép n h ậ p vào cột dữ liệu Các giá tr ị này được đ ặ t tro n g cặp dâu n h á y đơn vì cột cột zip_code

thuộc k iểu dữ liệu ký tự B ạn xem th ê m p h ầ n tr ìn h bày toán tứ IN tro n g chương 3, p h ầ n 3.3.2

D e p t N u m N u m b e r CHECK ( D e p tN u m BETWEEN 1 0 AND 5 0 ) ) ;

C h ú n g tô i dùng to á n tử B ETW EEN địn h k hoảng giá tr ị hợp lệ cho thuộc tín h D ep tN u m Đế hiểu rõ hơn về to á n tử

B E T W E E N A N D , bạn xem chương 3, p h ần 3.3.1.

8 BỔ SƯNG CỘT CHO BẢNG CÓ SAN

T ro n g m ộ t số trườ ng hợp, b ạn cần th êm cột mới vào b ản g dữ liệu đã tồ n tại Đ ể thực h iệ n n h u cầu này, bạn dùng th ê m chọn lựa ADD của lệ n h ALTER TABLE với cú p h áp nh ư sau:

A LT ER T A B LE tên-bàng

A D D cột-mói kiểu-dữ-liệu ICONSTRAINT] [kiểu-ràng-buộc];

Sau k h i th ê m cột mới, giá tr ị khởi tạo tạ i cột này tro n g mỗi m ẩu tin là NULL Do dó ban chí có thề đ ặ t rà n g buộc NOT

N U LL cho cột mới khi b ản g chưa chứa m ẩu tin nào cẳ (báng trông)

V í dụ 2.19

Trang 38

M O D IF Y tên-cột [ CO N STRAIN T tên-ràng-buộc] [kiểu-ràng-buộc] ;

Câu lệ n h trê n chỉ th a y dổi m ột sô' đặc tín h của cột như: Kiểu dữ liệu, kích thước, giá tr ị m ặc đ ịn h , và r à n g buộc NOT NULL

T ro n g m ện h đế MODIFY, bạn chỉ cần xác đ ịn h tê n cột và đặc tín h cần hiệu chỉnh, k h ông cần p h ả i liệ t kê t ấ t cả đặc tín h Sau

đ ây là m ộ t số điểm cần lưu ý k hi hiệu chỉnh cột:

• C hỉ đổi kiểu dữ liệu của cột từ CHAR san g VARCHAR2 và ngược lại khi giá tr ị tạ i cột này của t ấ t cả m ẩu ti n đều là NULL

• C h ỉ đổi kiểu dữ liệu và giảm kích thưđc cột nếu tạ i cột này t ấ t cá m ẩu tin đều chứa NULL

• R à n g buộc duy n h ấ t có th ể bổ sung là rà n g buộc NOT NULL, rà n g buộc không cho phép cột chứa g iá tr ị NULL

• T ro n g giới h ạ n tối đa của kiểu dữ liệu, k hông h ạ n c h ế k h á n àn g tà n g kích thước chuỗi ký tự và sô lượng sô th ậ p phân cho cột dữliệu kiểu sô

V Í DỤ 2.20

Bạn hãy tăng kích thước cột name cùa bảng Department sao cho có thế nhập phòng ban mới " Operations Research and Marketing Analysis".

C âu lện h A LTER TABLE như sau:

A L T E R TABLE d e p a r t m e n t M ODIFY n a m e V A R C H A R (45) ;

10 GỠ B ỏ RÀNG BUỘC TRONG BANG

Đ ể gỡ bỏ rà n g buộc b ạn dùng chọn lựa DROP của lện h ALTER TABLE Tuy n h iê n , cú p h áp lệ n h dùng cho rà n g buộc hữu d an h

và vô d a n h là khác nhau

Để gỡ bỏ khoá c h ín h của bảng, bạn dùng lện h sau:

A L T E R T A B LE tên-bàng DROP PRIMARY K EY ICASCAD E] ;

Đ ể gỡ bỏ rà n g buộc vô d an h được đ ịn h n g h ĩa U NIQ U E, bạn dùng lệnh:

A L T E R T A B LE tên-bảng DROP

UN IQ U E ( cột I, cột [, CỘI I ] ) [CA SCA D E];

Sau cùng là cú p h áp gỡ bỏ rà n g buộc hữu danh:

A L T E R T A B LE tên-bảng DROP CONSTRAINT tên-ràng-buộc ICA SCA D EI ;

T ro n g các câu lện h tr ê n , m ệnh đề CASCADE gỡ bỏ nhữ ng rà n g buộc phụ thuộc vào rà n g buộc to àn vẹn bị gỡ bỏ Nếu bạn

k h ô n g dù n g tù y chọn này gỡ bỏ các khoá ngoại th a m chiếu, th ì bạn không th ể xóa rà n g buộc khoá ch ín h hay unique Lưu ý, không có chọn lự a nào cho p h ép gỡ bỏ rà n g buộc CH EC K và NOT NULL Tuy n h iê n , chúng ta có cú p h á p gỡ bỏ rà n g buộc hữu danh Vì vậy để

xó a r à n g buộc CH EC K và NOT NULL, bạn p h ải đ ặ t tê n cho chúng khi đ ịn h nghía

V Í D Ụ 2~21

Hãy gở bỏ ràng buộc NOT NULL định nghĩa trên thuộc tính name cùa bảng Department trong ví dụ 2.18.

Câu lện h A LTER TABLE bỏ rà n g buộc tr ê n nh ư sau:

A LT ER TABLE d e p a r t m e n t DROP C O N STR A IN T d e p a r t m e n t _ n a m e _ n n ;

T ro n g ví dụ này, để gỡ bỏ rà n g buộc b ạn chỉ cần chỉ đ ịn h tê n rà n g buộc m à không cần phải liệ t kê h ế t các th à n h p h ần tro n g

r à n g buộc Đ ây là m ột ưu điểm của rà n g buộc hữu danh

BAI TẬP CÓ LỜI GIẢI

C h ú ý: Bạn nên thực th i lại tập tin SG sql làm mới lại nội dung cơ sỡ dữ liệu Sporting Goods trước khi tr ă lời các câu hỏi sau.

1 Sử dụ n g b ản g s_ord, b ạn hãy h iể n th ị m ã hóa dơn, tổ n g sô' tiền chứa tro n g các hóa đơn của k h ách h à n g có m ã là 204 Đồng

th ờ i cho b iế t câu tru y vấn thực th i cho to án tử quan hệ nào ?

C âu lệ n h h iể n th ị th ô n g tin hó a đơn n h ư sau:

SELECT id, total, datẹ_ordered

C âu tru y vấn tr ê n áp dụng phép chiếu tr ê n tậ p thuộc tín h id, total, date_ordered của bảng s_ord.

2 V iết lại câu tru y vấn tr ê n để tiêu đề của quan hệ k ế t quả là: O rder Id , Total O rdered và O rder Date đều dược h iển th ị trê n

h a i dòng Đ ồng th ờ i giá tr ị tổng số p h ải được tr ìn h bày th eo d ạn g d d d d d d o o (với d tượng trư n g cho m ộ t chữ số).

C h ú n g tô i sử dụng lệ n h COLUMN đ ịn h d ạn g tiêu đề cột và giá tr ị tổ n g cộng:

COLUMN id HEADING "Ordered I Id" FORMAT A7

COLUMN total HEADING "Total I Ordered" FORMAT 999,999.00

COLUMN date_ordard HEADING "Order I Date"

SELECT id, total, date_ordered

Trang 39

Chương 2: Toán tử quan hệ trong SQL 39 E

3 H iển th ị n h ữ n g m ã sô khách h àn g khác n h au tro n g bảng S_ORD với liêu đề cột là C ustom ers who have placed an order

chứa tr ê n h ai dòng Đ ồng thời bạn hãy cho b iết câu tru y vấn này áp dụng toán tứ quan hệ nào?

Trước tiê n , bạn địn h d ạn g tiêu để cột qua m ệnh đề COLUMN như sau:

COLUMN c u s t o m e r _ i d HEADING " C u s t o m e r s w h o h a v e I p l a c e d a n o r d e r " FORMAT A2Ũ

Sau đó v iết câu tru y v ân áp dụng to án tử chiêu SELECT DISTINCT n hư sau:

4 K hông chỉ đ ịn h tê n cột bạn hày h iển th ị tấ t cá th ô n g tin chứa trong báng s , REGION

Dưới đây là câu truy vấn và m ột p h ần k ế t quà:

5 H iến th ị họ, lương, p h ầ n trăm hoa hồng của t ấ t cả đại diện thương m ại chứa trong b ản g S_EM P Dồng thờ i dùng tiêu dề S a le s

R ep re se n ta tive th a y cho Last N am e Dế' dịnh tiêu đề cột L astN am e theo yêu cầu trên , bạn có cần dùng lện h SQ L*Plus

6 H iển th ị tê n và địa đ iểm của t ấ t cả phòng ban tro n g cơ sở dữ liệu S p o rtin g Goods Loại toán tử nào cho phép b ạn thự c h iệ n

yêu cầu n ày ?

Để tr ả lời câu hỏi tr ê n , bạn p h ải nối b ản g S_REGION và bảng S_D EPT th ô n g qua thuộc tín h chung là region _id của b ả n g

S D E P T v à id của b ả n g S_REGION.

Để câu tru y vấn dược dơn giàn, bạn nên (lùng đ ịn h d an h bảng:

Trang 40

B 40 C h ư ơ n g 2: T o á n tử quan hộ tro n g SQL

T rong bài tậ p này chỉúrng tô)i đùmg toán tử ghép nối th a y đóii cách tn n h hãy quan hộ kỏt quả Đ ồng th ờ i chung tôi cũng sứ dụng đ ịn h d a n h bíảnig để câìu truy vấn được đon giản

SELECT c.naim e ! I ' ÌS5 tthce 'CUístomer- o f ' II;

E f i r s f c j n a i m e ! Ill ' ' II s l a s t _ n a m e AS " S a l e s R eps a n d t i i e i r c u s t o m e r s "

A t h l e t i c s O n e i s t : h e (cuisfcom er: o f A jid re ? D am tero n

A t h l e t i c s T w o i s t h e ceu st.o m e r: o f A n d r e D am iero n

S h o e s f o r S p o r e s Ì.S t l h e c u s t o m e r o f A n^dre D a m e r o n

S p o r t s , I n c i s Ith ie c u s t t o i m e r o f S a m 'G i l s o n

2 4 r o w s s e l e c t e d

Tìm nh ữ n g k h á c h hàing c:hưa (CÓ đạti diện thươing ni.ại phu ttráichi

Để đáp ứng y ê u Cíầui tirêra, (chúng t.ồi dùng phép nôii ngoài:

VMYnB *' '.iòiĩ, ữu). ikSu.ịỉg tiiOI Dfcip Ac.p KC*x ỉ]Ũ 4 i CIlcGj uiiũi lụi ]i-iuí iuữiig l.uỉ >5 VÍOII.

Để h iển th ị th(eo điúnig yêu cầu đổ b ài, bạn dlùng llệnh SQL,*I»luis COLUMN đ ịn h n ghĩa giá tr ị h iế n th ị cho cột lương Chú ý

b ạ n k h ô n g cầ n Cihỉi dịịnlh (từ khoá A S C trong mệnh •dề OỈRDEÍR BY vi dãy là giá trị m ặc định.

Trước h ế t chiin;g <ta địinhi dạng qua m ện h đề COLUMN vài S10U d(S dùng m ệnh dề SELEC T nh ư sau:

T h u ộ c tí n h K iể u dtữ liệ u R à n g buiộc

C o n tin e n t Tôi đia 115) ký tiự Có các gỊÍá t r ị sau: iAÍYrica, Asia, A ustralia, Europe, C e n tra l A m erica, North A m erica,

South America

A rea Sô có tcối (da 6 chữ sỏ.giá tl'ii truing khioaingf từ 1799 đến 1-13244.

L ength Số có tôối (da 3 chữ sô Có giá triị troing khoẫíii® từ 67 đến 760

E levation S5 'C Ó I tcối (đa 4 chữ s ố Cá giá triị troing ktaoáín® tiừ -92 đèn 12500

L ện h CREATE! TTAÌBLE tạo bảng như sau:

CREATE T A B L E IL a lk a s_ O ff_ T h e _ W o r l d (Name VARCHAR2 (:20n PRIMARY KEY,

C o n t i n e n t VAIRCIHỈÌR2 (1L5) CONS T R A IN T L o t :w _ C c o n tin e m t _ c k

CHECK ( C c o m t i i n e n l t IN ' A f r i c a ' , 'A s i a 1 A i u s t r a l i a a 1 E u r o p e ' 1c & n t r a l A m e r i c a ' ,

'I N o r t h A f t s i r i c a " , 1 S o iu tĩh A iL e r i c a ' ) ) ,

A r e a N ium lbe.r(6) CONSTRAINT LiO tw _ A r e a ,_ c k CHECK( A r e a BETWEEN 1 7 9 9 AND 1 4 3 2 4 4 ) ,

L e n g t h Niumibex( 3 ) CONSTRAINT L íO tw _ L e n g th i_ c c k CHECK( L a n g t h BETWEEN 6 7 AND 7 6 0 ) ,

Ngày đăng: 19/03/2021, 11:44

TỪ KHÓA LIÊN QUAN

w