Tên gọi ngôn ngữ hỏi có cấu trúc phÅn nào đã liên t°ởng đ¿n mát công cụ ngôn ngā dùng để truy xuÃt dā liáu trong các c¢ sở dā liáu, khÁ năng của SQL v°ợt xa so với mát công cụ truy xuÃt
Trang 1Ban hành kèm theo Quyết định số: 597/QĐ-CĐXD1 ngày 29 tháng 12 năm 2023 của Hiệu
trưởng Trường Cao đẳng Xây dựng số 1
Hà Nßi, năm
Trang 32
LâI NÓI ĐÀU
Giáo trình Hệ quản trị cơ sở dữ liệu với SQL Server được biên soạn nhằm phục vụ cho giảng dạy và học tập cho trình độ Trung cấp ngành công nghệ thông tin ở trường Cao đẳng Xây dựng số 1 được biên soạn nhằm phục vụ cho giảng dạy và học tập cho trình độ là môn học cơ sở ngành nhằm cung cấp các kiến thức về cơ sở dữ liệu, tạo và quản lý cơ sở dữ liệu trên phần mềm SQL
Giáo trình Hệ quản trị cơ sở dữ liệu với SQL Server do Ths Lê Thị Lương làm chủ biên thiết kế và biên soạn Giáo trình này được viết theo đề cương môn học Hệ quản trị cơ sở dữ liệu ms sql server Ngoài ra giáo trình còn bổ sung thêm một số kiến thức mà trong các giáo trình trước chưa đề cập tới
Nội dung gồm 03 chương Chương 1: Tổng quan về SQL Chương 2: Ngôn ngữ định nghĩa dữ liệu Chương 3: Ngôn ngữ thao tác dữ liệu Trong quá trình biên soạn, nhóm giảng viên Bộ môn Công nghệ Thông tin của Trường Cao đẳng Xây dựng Số 1 - Bộ Xây dựng, đã được sự động viên quan tâm và góp ý của các đồng chí lãnh đạo, các đồng nghiệp trong và ngoài trường
Mặc dù có nhiều cố gắng, nhưng trong quá trình biên soạn, biên tập và in ấn khó tránh khỏi những thiếu sót Chúng tôi xin được lượng thứ và tiếp thu những ý kiến đóng góp
Trân trọng cảm ơn!
Hà Nái, ngày&&tháng&&năm&&&
Chủ biên
Trang 41.3 Táng quan vÁ c¢ sở dā liáu quan há 8
1.3.1 Mô hình dā liáu quan há 8
CH¯¡NG 3: NGÔN NGĀ THAO TÁC DĀ LIàU 36
3.1 Truy xuÃt dā liáu với câu lánh SELECT 36
3.1.1 Mánh đÁ FROM 37
3.1.2 Danh sách chọn trong câu lánh SELECT 38
3.1.3 Chß đánh điÁu kián truy vÃn dā liáu 40
3.1.4 T¿o mới bÁng dā liáu từ k¿t quÁ của câu lánh SELECT 44
3.1.5 Sắp x¿p k¿t quÁ truy vÃn 44
Trang 54
CH¯¡NG TRÌNH MÔN HàC
(Kèm theo Quyết định số 308/QĐ-CĐXD1 ngày 25/7/2023
của Hiệu trưởng Trường Cao đẳng Xây dựng số 1)
Tên môn hác: Hà QUÀN TRÞ C¡ Sä DĀ LIàU VàI SQL SERVER Mã sá môn hác: MH22
Thãi gian thăc hián môn hác: 75 giờ (Lý thuy¿t: 15 giờ; Thăc hành, thí nghiám, thÁo
luận, bài tập: 57 giờ; Kiểm tra 03 giờ)
(Trong đó: Tổng số giờ giảng dạy và học tập trực tuyến: 30 giờ)
I Vß trí, tính ch¿t của môn hác
- Vá trí: + Môn học đ°ợc bố trí ở kỳ học thứ 03 + Môn học tiên quy¿t: MH12-C¢ sở dā liáu - Tính chÃt: là môn học chuyên môn cung cÃp các ki¿n thức c¢ bÁn vÁ các thành phÅn há quÁn trá c¢ sở dā liáu, các khái niám vÁ c¢ sở dā liáu quan há h°ớng đối t°ợng và c¢ sở dā liáu quan há, ngôn ngā MS SQL, các ki¿n trúc của há quÁn trá c¢ sở dā liáu MS SQL Server, cách làm viác và t°¢ng tác giāa các thành phÅn ki¿n trúc trong há thống
II Māc tiêu môn hác:
1 VÁ ki¿n thức: - Trình bày đ°ợc ki¿n thức c¢ bÁn vÁ ngôn ngā c¢ sở dā liáu và các mô hình quan há; - Trình bày đ°ợc ki¿n thức vÁ há c¢ sở dā liáu, các ràng buác khóa, t¿o và cập nhật dā liáu;
- Trình bày đ°ợc cách truy xuÃt đ°ợc c¢ sở dā liáu, sắp x¿p l¿i c¢ sở dā liáu 2 VÁ kỹ năng:
- Xác đánh đ°ợc khóa, xây dăng đ°ợc mối quan há giāa các bÁng; - T¿o đ°ợc các bÁng, khóa và mối quan há liên k¿t giāa các bÁng; - T¿o, cập nhật và xóa đ°ợc dā liáu;
- Thăc hián đ°ợc các thao tác quÁn trá c¢ sở dā liáu với há thống MS SQL Server 3 VÁ năng lăc tă chủ và trách nhiám:
Rèn luyán lòng yêu nghÁ, t° th¿ tác phong công nghiáp, tính kiên trì, sáng t¿o trong công viác
Trang 76
CH¯¡NG 1: TÞNG QUAN VÀ SQL 1.1 SQL là ngôn ngā c¢ så dā liáu quan há
SQL, vi¿t tắt của Structured Query Language (ngôn ngā hỏi có cÃu trúc), là công
cụ sÿ dụng để tá chức, quÁn lý và truy xuÃt dā liáu đuợc l°u trā trong các c¢ sở dā liáu SQL là mát há thống ngôn ngā bao gßm tập các câu lánh sÿ dụng để t°¢ng tác với c¢ sở dā liáu quan há
Tên gọi ngôn ngữ hỏi có cấu trúc phÅn nào đã liên t°ởng đ¿n mát công cụ (ngôn
ngā) dùng để truy xuÃt dā liáu trong các c¢ sở dā liáu, khÁ năng của SQL v°ợt xa so với mát công cụ truy xuÃt dā liáu, mục đích ban đÅu khi SQL đ°ợc xây dăng nên và truy xuÃt dā liáu là mát trong nhāng chức năng quan trọng của nó SQL đ°ợc sÿ dụng để điÁu khiển tÃt cÁ các chức năng mà mát há quÁn trá c¢ sở dā liáu cung cÃp cho ng°ời dùng bao gßm:
• Đßnh ngh*a dā liáu: SQL cung cÃp khÁ năng đánh ngh*a các c¢ sở dā liáu, các
cÃu trúc l°u trā và tá chức dā liáu cũng nh° mối quan há giāa các thành phÅn dā liáu
• Truy xu¿t và thao tác dā liáu: Với SQL, ng°ời dùng có thể dß dàng thăc hián
các thao tác truy xuÃt, bá sung, cập nhật và lo¿i bỏ dā liáu trong các c¢ sở dā liáu
• ĐiÁu khiển truy cập: SQL có thể đ°ợc sÿ dụng để cÃp phát và kiểm soát các
thao tác của ng°ời sÿ dụng trên dā liáu, đÁm bÁo să an toàn cho c¢ sở dā liáu • ĐÁm bÁo toàn vẹn dā liáu: SQL đánh ngh*a các ràng buác toàn vẹn trong c¢
sở dā liáu nhờ đó đÁm bÁo tính hợp lá và chính xác của dā liáu tr°ớc các thao tác cập nhật cũng nh° các lßi của há thống
Nh° vậy, có thể nói rằng SQL là mát ngôn ngā hoàn thián đ°ợc sÿ dụng trong các há thống c¢ sở dā liáu và là mát thành phÅn không thể thi¿u trong các há quÁn trá c¢ sở dā liáu Mặc dù SQL không phÁi là mát ngôn ngā lập trình nh° C, C++, Java song các câu lánh mà SQL cung cÃp có thể đ°ợc nhúng vào trong các ngôn ngā lập trình nhằm xây dăng các ứng dụng t°¢ng tác với c¢ sở dā liáu
Trang 87 Khác với các ngôn ngā lập trình quen thuác nh° C, C++, Java SQL là ngôn ngā có tính khai báo Với SQL, ng°ời dùng chß cÅn mô tÁ các yêu cÅu cÅn phÁi thăc hián trên c¢ sở dā liáu mà không cÅn phÁi chß ra cách thức thăc hián các yêu cÅu nh° th¿ nào Chính vì vậy, SQL là ngôn ngā dß ti¿p cận và dß sÿ dụng
1.2 Vai trò của SQL
Trong hÅu h¿t các há quÁn trá c¢ sở dā liáu quan há, SQL có nhāng vai trò nh° sau:
• SQL là ngôn ngā hßi có tính t°¢ng tác: Ng°ời sÿ dụng có thể dß dàng thông
qua các trình tián ích để gởi các yêu cÅu d°ới d¿ng các câu lánh SQL đ¿n c¢ sở dā liáu và nhận k¿t quÁ trÁ vÁ từ c¢ sở dā liáu
• SQL là ngôn ngā lập trình c¢ så dā liáu: Các lập trình viên có thể nhúng các
câu lánh SQL vào trong các ngôn ngā lập trình để xây dăng nên các ch°¢ng trình ứng dụng giao ti¿p với c¢ sở dā liáu
• SQL là ngôn ngā quÁn trß c¢ så dā liáu: Thông qua SQL, ng°ời quÁn trá c¢
sở dā liáu có thể quÁn lý đ°ợc c¢ sở dā liáu, đánh ngh*a các cÃu trúc l°u trā dā liáu, điÁu khiển truy cập c¢ sở dā liáu
• SQL là ngôn ngā cho các há tháng khách/chủ (client/server): Trong các há
thống c¢ sở dā liáu khách/chủ, SQL đ°ợc sÿ dụng nh° là công cụ để giao ti¿p giāa các trình ứng dụng phía máy khách với máy chủ c¢ sở dā liáu
• SQL là ngôn ngā truy cập dā liáu trên Internet: Cho đ¿n nay, hÅu h¿t các
máy chủ Web cũng nh° các máy chủ trên Internet sÿ dụng SQL với vai trò là ngôn ngā để t°¢ng tác với dā liáu trong các c¢ sở dā liáu
• SQL là ngôn ngā c¢ så dā liáu phân tán: Đối với các há quÁn trá c¢ sở dā
liáu phân tán, mßi mát há thống sÿ dụng SQL để giao ti¿p với các há thống khác trên m¿ng, gởi và nhận các yêu cÅu truy xuÃt dā liáu với nhau
• SQL là ngôn ngā sÿ dāng cho các cßng giao ti¿p c¢ så dā liáu: Trong mát
há thống m¿ng máy tính với nhiÁu há quÁn trá c¢ sở dā liáu khác nhau, SQL
Trang 98 th°ờng đ°ợc sÿ dụng nh° là mát chuẩn ngôn ngā để giao ti¿p giāa các há quÁn trá c¢ sở dā liáu
1.3 Tßng quan vÁ c¢ så dā liáu quan há
1.3.1 Mô hình dữ liệu quan hệ
Mô hình dā liáu quan há đ°ợc Codd đÁ xuÃt năm 1970 và đ¿n nay trở thành mô hình đ°ợc sÿ dụng phá bi¿n trong các há quÁn trá c¢ sở dā liáu th°¢ng m¿i Nói mát cách đ¢n giÁn, mát c¢ sở dā liáu quan há là mát c¢ sở dā liáu trong đó tÃt cÁ dā liáu đ°ợc tá chức trong các bÁng có mối quan há với nhau Mßi mát bÁng bao gßm các dòng và các cát: mßi mát dòng đ°ợc gọi là mát bÁn ghi (bá) và mßi mát cát là mát tr°ờng (thuác tính)
- Ví dụ: BÁng CBQL
- Ví dụ 2: BÁng GVCN
- Ví dụ 3: BÁng CVHT
Trang 10
9
1.3.2 Bảng (Table)
Trong c¢ sở dā liáu quan há, bÁng là đối t°ợng đ°ợc sÿ dụng để tá chức và l°u trā dā liáu Mát c¢ sở dā liáu bao gßm nhiÁu bÁng và mßi bÁng đ°ợc xác đánh duy nhÃt bởi tên bÁng Mát bÁng bao gßm mát tập các dòng và các cát: mßi mát dòng trong bÁng biểu dißn cho mát thăc thể (mßi mát dòng trong bÁng HOCVIEN t°¢ng ứng với mát Học viên); và mßi mát cát biểu dißn cho mát tính chÃt của thăc thể (chẳng h¿n cát
NGAYSINH trong bÁng HOCVIEN biểu dißn cho ngày sinh của các học viên đ°ợc l°u trā trong bÁng)
Nh° vậy, liên quan đ¿n mßi mát bÁng bao gßm các y¿u tố sau:
• Tên của bÁng: đ°ợc sÿ dụng để xác đánh duy nhÃt mßi bÁng trong c¢ sở dā
liáu • C¿u trúc của bÁng: Tập các cát trong bÁng Mßi mát cát trong bÁng đ°ợc xác
đánh bởi mát tên cột và phÁi có mát kiểu dā liáu nào đó (chẳng h¿n cát
NGAYSINH trong bÁng HOCVIEN có kiểu là SMALLTIME) Kiểu dā liáu của mßi cát qui đánh giá trá dā liáu có thể đ°ợc chÃp nhận trên cát đó
• Dā liáu của bÁng: Tập các dòng (bÁn ghi) hián có trong bÁng
1.3.3 Khoá của bảng
Trong mát c¢ sở dā liáu đ°ợc thi¿t k¿ tốt, mßi mát bÁng phÁi có mát hoặc mát tập các cát mà giá trá dā liáu của nó xác đánh duy nhÃt mát dòng trong mát tập các dòng của bÁng Tập mát hoặc nhiÁu cát có tính chÃt này đ°ợc gọi là khoá của bÁng
Viác chọn khoá của bÁng có vai trò quan trọng trong viác thi¿t k¿ và cài đặt các c¢ sở dā liáu quan há Các dòng dā liáu trong mát bÁng phÁi có giá trá khác nhau trên khoá BÁng MONHOC trong hình d°ới đây có khoá là cát MAMH
Trang 1110 Mát bÁng có thể có nhiÁu tập các cát khác nhau có tính chÃt của khoá (tức là giá trá của nó xác đánh duy nhÃt mát dòng dā liáu trong bÁng) Trong tr°ờng hợp này, khoá đ°ợc chọn cho bÁng đ°ợc gọi là khoá chính (primary key) và nhāng khoá còn l¿i đ°ợc gọi là khoá phụ hay là khoá dự tuyển (candidate key/unique key)
1.3.4 Mối quan hệ và khoá ngoại
Các bÁng trong mát c¢ sở dā liáu không tßn t¿i đác lập mà có mối quan há mật
thi¿t với nhau vÁ mặt dā liáu Mối quan há này đ°ợc thể hián thông qua ràng buác giá trị
dữ liệu xuất hiện ở bảng này phải có xuất hiện trước trong một bảng khác Mối quan há
giāa các bÁng trong c¢ sở dā liáu nhằm đàm bÁo đ°ợc tính đúng đắn và hợp lá của dā liáu trong c¢ sở dā liáu
Hai bÁng GIANGDAY và LOP có mối quan há với nhau Mối quan há này đòi hỏi giá trá cát MALOP của mát dòng (tức là mát lớp) trong bÁng GIANGDAY phÁi đ°ợc xác đánh từ cát MALOP của bÁng LOP
Mối quan há giāa các bÁng trong mát c¢ sở dā liáu thể hián đúng mối quan há giāa các thăc thể trong th¿ giới thăc Mối quan há giāa hai bÁng GIANGDAY và LOP không cho phép mát MALOP nào đó tßn t¿i mà l¿i thuác vào mát MONHOC không có thật Khái niám khoá ngoại (Foreign Key) trong c¢ sở dā liáu quan há đ°ợc sÿ dụng để
biểu dißn mối quan há giāa các bÁng dā liáu Mát hay mát tập các cát trong mát bÁng mà giá trá của nó đ°ợc xác đánh từ khóa chính của mát bÁng khác đ°ợc gọi là khoá ngo¿i Cát MALOP của bÁng GIANGDAY đ°ợc gọi là khoá ng¿i của bÁng GIANGDAY, khoá ngoài này tham chi¿u đ¿n khoá chính của bÁng LOP là cát MALOP
Trang 12Câu lánh
Thao tác dữ liệu
SELECT INSERT UPDATE DELETE TRUNCATE
Định nghĩa dữ liệu
CREATE TABLE DROP TABLE ALTER TABLE CREATE VIEW ALTER VIEW DROP VIEW CREATE INDEX DROP INDEX CREATE SCHEMA DROP SCHEMA CREATE
PROCEDURE ALTER PROCEDURE
Chức năng
Truy xuÃt dā liáu Bá sung dā liáu Cập nhật dā liáu Xoá dā liáu Xoá toàn bá dā liáu trong bÁng T¿o bÁng
Xoa bÁng Sÿa đái bÁng T¿o khung nhìn Sÿa đái khung nhìn Xoá khung nhìn T¿o chß mục Xoá chß mục T¿o l°ợc đß c¢ sở dā liáu Xoá l°ợc đß c¢ sở dā liáu T¿o thủ tục l°u trā
Sÿa đái thủ tục l°° trā
DROP PROCEDURE Xoá thủ tục l°u trā
Trang 1312 CREATE FUNCTION T¿o hàm (do ng°ời sÿ dụng đánh ngh*a) Các câu lánh của SQL đÁu đ°ợc bắt đÅu bởi các từ lánh, là mát từ khoá cho bi¿t chức năng của câu lánh (chẳng h¿n SELECT, DELETE, UPDATE) Sau từ lánh là các mánh đÁ của câu lánh Mßi mát mánh đÁ trong câu lánh cũng đ°ợc bắt đÅu bởi mát từ khoá (chẳng h¿n FROM, WHERE, )
Ví dā : Câu lánh:
SELECT mahv, hoten, ngaysinh, gioitinh,lop FROM hocvien
WHERE malop=902ct19 dùng để truy xuÃt dā liáu trong bÁng HOCVIEN đ°ợc bắt đÅu bởi từ lánh SELECT, trong câu lánh bao gßm hai mánh đÁ: mánh đÁ FROM chß đánh tên của bÁng cÅn truy xuÃt dā liáu và mánh đÁ WHERE chß đánh điÁu kián truy vÃn dā liáu
1.4.2 Qui tắc sử dụng tên trong SQL
Các đối t°ợng trong c¢ sở dā liáu dăa trên SQL đ°ợc xác đánh thông qua tên của đối t°ợng Tên của các đối t°ợng là duy nhÃt trong mßi c¢ sở dā liáu Tên đ°ợc sÿ dụng nhiÁu nhÃt trong các truy vÃn SQL và đ°ợc xem là nÁn tÁng trong c¢ sở dā liáu quan há là tên bÁng và tên cát
Trong các c¢ sở dā liáu lớn với nhiÁu ng°ời sÿ dụng, khi chß đánh tên của mát bÁng nào đó trong câu lánh SQL, há quÁn trá c¢ sở dā liáu hiểu đó là tên của bÁng sở hāu (tức là bÁng do ng°ời dùng t¿o ra) Thông th°ờng, trong các há quÁn trá c¢ sở dā liáu này cho phép nhāng ng°ời dùng khác nhau t¿o ra nhāng bÁng trùng tên với nhau mà không gây ra xung đát vÁ tên N¿u trong mát câu lánh SQL ta cÅn chß đ¿n mát bÁng do mát ng°ời dùng khác sở hāu (hiển nhiên là phÁi đ°ợc phép) thì tên của bÁng phÁi đ°ợc vi¿t sau tên của ng°ời sở hāu và phân cách với tên ng°ời sở hāu bởi dÃu chÃm:
tên_ng°ời_sở_hāu.tên_bÁng
Mát số đối t°ợng c¢ sở dā liáu khác (nh° khung nhìn, thủ tục, hàm), viác sÿ dụng tên cũng t°¢ng tă nh° đối với bÁng
Trang 1413 Sÿ dụng tên cát mát cách bình th°ờng trong các câu lánh SQL bằng cÁch chß cÅn chß đánh tên của cát trong bÁng Tuy nhiên, n¿u trong câu lánh có liên quan đ¿n hai cát trở lên có cùng tên trong các bÁng khác nhau thì bắt buác phÁi chß đánh thêm tên bÁng tr°ớc tên cát; tên bÁng và tên cát đ°ợc phân cách nhau bởi dÃu chÃm
Ví dā: Ví dụ d°ới đây minh ho¿ cho viác sÿ dụng tên bÁng và tên cát trong câu lánh SQL
SELECT mahv, hoten, ngaysinh, gioitinh,magv FROM hocvien
WHERE giangday.malop = lop.malop
1.4.3 Kiểu dữ liệu
Chuẩn ANSI/ISO SQL cung cÃp các kiểu dā liáu khác nhau để sÿ dụng trong các c¢ sở dā liáu dăa trên SQL và trong ngôn ngā SQL Dăa trên c¢ sở các kiểu dā liáu do chuẩn ANSI/ISO SQL cung cÃp, các há quÁn trá c¢ sở dā liáu th°¢ng m¿i hián nay có thể sÿ dụng các d¿ng dā liáu khác nhau trong sÁn phẩm của mình D°ới đây liát kê mát số kiểu dā liáu thông dụng đ°ợc sÿ dụng trong SQL
CHAR (n) Kiểu chußi với đá dài cố đánh
NCHAR (n) Ki¿u chußi với đá dài cố đánh hß trợ UNICODE
VARCHAR (n) Kiểu chußi với đá dài chính xác
NVARCHAR (n) Kiểu chußi với đá dài chính xác hß trợ UNICODE INTEGER Số nguyên có giá trá từ -231 đ¿n 231 - 1
TINYTINT Số nguyên có giá trá từ 0 đ¿n 255 SMALLINT Số nguyên có giá trá từ -215 đ¿n 215 – 1 BIGINT Số nguyên có giá trá từ -263 đ¿n 263-1
NUMERIC (p,s) Kiểu số với đá chính xác cố đánh
DECIMAL (p,s) T°¢ng tă kiểu Numeric FLOAT Số thăc có giá trá từ -1.79E+308 đ¿n 1.79E+308 REAL Số thăc có giá trá từ -3.40E + 38 đ¿n 3.40E + 38
Trang 1514
BIT Kiểu bit (có giá trá 0 hoặc 1) DATETIME Kiểu ngày giờ (chính xác đ¿n phÅn trăm của giây) SMALLDATETIME Kiểu ngày giờ (chính xác đ¿n phút)
BINARY Dā liáu nhá phân với đá dài cố đánh (tối đa 8000 bytes) VARBINARY Dā liáu nhá phân với đá dài chính xác (tối đa 8000 bytes) IMAGE
Dā liáu nhá phân với đá dài chính xác (tối đa 2,147,483,647 bytes) TEXT
Dā liáu ki¿u chußi với đá dài lớn (tối đa 2,147,483,647 ký tă) NTEXT Dā liáu ki¿u chußi với đá dài lớn và hß trợ UNICODE (tối đa
1.4.4 Giá trị NULL
Mát c¢ sở dā liáu là să phÁn ánh của mát há thống trong th¿ giới thăc, do đó các giá trá dā liáu tßn t¿i trong c¢ sở dā liáu có thể không xác đánh đ°ợc Mát giá trá không xác đánh đ°ợc xuÃt hián trong c¢ sở dā liáu có thể do mát số nguyên nhân sau:
• Giá trá đó có tßn t¿i nh°ng không bi¿t • Không xác đánh đ°ợc giá trá đó có tßn t¿i hay không • T¿i mát thời điểm nào đó giá trá ch°a có nh°ng rßi có thể sẽ có
Trang 1615 • Giá trá bá lßi do tính toán (tràn số, chia cho không, ) Nhāng giá trá không xác đánh đ°ợc biểu dißn trong c¢ sở dā liáu quan há bởi các giá trá NULL Đây là giá trá đặc biát và không nên nhÅm lẫn với chußi rßng (đối với dā liáu kiểu chußi) hay giá trá không (đối với giá trá kiểu số) Giá trá NULL đóng mát vai trò quan trọng trong các c¢ sở dā liáu và hÅu h¿t các há quÁn trá c¢ sở dā liáu quan há hián nay đÁu hß trợ viác sÿ dụng giá trá này
Trang 1716
Há tháng ki¿n thức Ch°¢ng 1 1 Yêu cÁu vÁ lý thuy¿t
Trình bày đ°ợc các khái niám trong c¢ sở dā liáu; Trình bày đ°ợc vai trò của SQL;
Trình bày đ°ợc táng quan vÁ c¢ sở dā liáu quan há; Trình bày đ°ợc các s¢ l°ợc vÁ SQL
2 Yêu cÁu vÁ bài tập: Xác đánh đ°ợc các khóa 3 Há tháng các công thức đã hác:
Táng quan vÁ SQL SQL là ngôn ngữ hỏi có cấu trúc phÅn nào đã liên t°ởng đ¿n mát công cụ (ngôn
ngā) dùng để truy xuÃt dā liáu trong các c¢ sở dā liáu, cung cÃp cho ng°ời dùng bao gßm:
• Đßnh ngh*a dā liáu: SQL cung cÃp khÁ năng đánh ngh*a các c¢ sở dā liáu, các
cÃu trúc l°u trā và tá chức dā liáu cũng nh° mối quan há giāa các thành phÅn dā liáu
• Truy xu¿t và thao tác dā liáu: Với SQL, ng°ời dùng có thể dß dàng thăc hián
các thao tác truy xuÃt, bá sung, cập nhật và lo¿i bỏ dā liáu trong các c¢ sở dā liáu
• ĐiÁu khiển truy cập: SQL có thể đ°ợc sÿ dụng để cÃp phát và kiểm soát các
thao tác của ng°ời sÿ dụng trên dā liáu, đÁm bÁo să an toàn cho c¢ sở dā liáu • ĐÁm bÁo toàn vẹn dā liáu: SQL đánh ngh*a các ràng buác toàn vẹn trong c¢
sở dā liáu nhờ đó đÁm bÁo tính hợp lá và chính xác của dā liáu tr°ớc các thao tác cập nhật cũng nh° các lßi của há thống
Vai trò của SQL
Trong hÅu h¿t các há quÁn trá c¢ sở dā liáu quan há, SQL có nhāng vai trò nh° sau:
• SQL là ngôn ngā hßi có tính t°¢ng tác: Ng°ời sÿ dụng có thể dß dàng thông
qua các trình tián ích để gởi các yêu cÅu d°ới d¿ng các câu lánh SQL đ¿n c¢ sở dā liáu và nhận k¿t quÁ trÁ vÁ từ c¢ sở dā liáu
Trang 1817 • SQL là ngôn ngā lập trình c¢ så dā liáu: Các lập trình viên có thể nhúng các
câu lánh SQL vào trong các ngôn ngā lập trình để xây dăng nên các ch°¢ng trình ứng dụng giao ti¿p với c¢ sở dā liáu
• SQL là ngôn ngā quÁn trß c¢ så dā liáu: Thông qua SQL, ng°ời quÁn trá c¢
sở dā liáu có thể quÁn lý đ°ợc c¢ sở dā liáu, đánh ngh*a các cÃu trúc l°u trā dā liáu, điÁu khiển truy cập c¢ sở dā liáu
• SQL là ngôn ngā cho các há tháng khách/chủ (client/server): Trong các há
thống c¢ sở dā liáu khách/chủ, SQL đ°ợc sÿ dụng nh° là công cụ để giao ti¿p giāa các trình ứng dụng phía máy khách với máy chủ c¢ sở dā liáu
• SQL là ngôn ngā truy cập dā liáu trên Internet: Cho đ¿n nay, hÅu h¿t các
máy chủ Web cũng nh° các máy chủ trên Internet sÿ dụng SQL với vai trò là ngôn ngā để t°¢ng tác với dā liáu trong các c¢ sở dā liáu
• SQL là ngôn ngā c¢ så dā liáu phân tán: Đối với các há quÁn trá c¢ sở dā
liáu phân tán, mßi mát há thống sÿ dụng SQL để giao ti¿p với các há thống khác trên m¿ng, gởi và nhận các yêu cÅu truy xuÃt dā liáu với nhau
Mô hình dữ liệu quan hệ
Mô hình dā liáu quan há đ°ợc Codd đÁ xuÃt năm 1970 và đ¿n nay trở thành mô hình đ°ợc sÿ dụng phá bi¿n trong các há quÁn trá c¢ sở dā liáu th°¢ng m¿i S¢ l°ợc vÁ SQL
- Table: Trong c¢ sở dā liáu quan há, bÁng là đối t°ợng đ°ợc sÿ dụng để tá chức và l°u trā dā liáu Mát c¢ sở dā liáu bao gßm nhiÁu bÁng và mßi bÁng đ°ợc xác đánh duy nhÃt bởi tên bÁng
- Khóa: mßi mát bÁng phÁi có mát hoặc mát tập các cát mà giá trá dā liáu của nó xác đánh duy nhÃt mát dòng trong mát tập các dòng của bÁng Tập mát hoặc nhiÁu cát có tính chÃt này đ°ợc gọi là khoá của bÁng
4 Các bài tập ch°¢ng 1
Cho C¢ sở dā liáu quÁn lý giÁng d¿y gßm có các quan há sau
Trang 1918
HOCVIEN (MAHV, HO, TEN, NGAYSINH, GIOITINH, NOISINH, MALOP)
Tân từ: mßi học viên phân biát với nhau bằng mã học viên, l°u trā họ, tên, ngày sinh, giới
tính, n¢i sinh, thuác lớp nào
LOP (MALOP, TENLOP, LOPTRG, SISO, MAGVCN, MACVHT, MACBQL)
Tân từ: mßi lớp gßm có mã lớp, tên lớp, lớp tr°ởng của lớp, sß số lớp , mã giáo viên chủ
nhiám, mã cố vÃn học tập, mã cán bá quÁn lý
MONHOC (MAMH, TENMH, SOTC)
Tân từ: mßi môn học cÅn l°u trā tên môn học, tên số tín chß
GIAOVIEN (MAGV, HOTEN, GIOITINH, NLV)
Tân từ: mã giáo viên để phân biát giāa các giáo viên, cÅn l°u trā họ tên, giới tính, năm
làm viác
GIANGDAY (MALOP, MAMH, MAGV, HOCKY, NAM)
Tân từ: mßi học kỳ của năm học sẽ phân công giÁng d¿y: lớp nào học môn gì do giáo viên
nào phụ trách
Yêu cầu:
1 Xác đánh các khóa chính của từng bÁng 2 Xác đánh các mối quan há giāa các bÁng
Trang 2120
CH¯¡NG 2: NGÔN NGĀ ĐÞNH NGH)A DĀ LIàU
Các câu lánh SQL đã đÁ cập đ¿n trong ch°¢ng 1 đ°ợc sÿ dụng nhằm thăc hián các thao tác bá sung, cập nhật, lo¿i bỏ và xem dā liáu Nhóm các câu lánh này đ°ợc gọi là ngôn ngā thao tác dā liáu (DML) Trong chu¢ng này tìm hiểu nhóm các câu lánh đ°ợc sÿ dụng để đánh ngh*a và quÁn lý các đối t°ợng CSDL nh° bÁng, khung nhìn, chß mục, và đ°ợc gọi là ngôn ngā đánh ngh*a dā liáu (DLL)
VÁ c¢ bÁn, ngôn ngā đánh ngh*a dā liáu bao gßm các lánh: • CREATE: đánh ngh*a và t¿o mới đối t°ợng CSDL • ALTER: thay đái đánh ngh*a của đối t°ợng CSDL • DROP: Xoá đối t°ợng CSDL đã có
Mô hình dā liáu quan há đ°ợc Codd đÁ xuÃt năm 1970 và đ¿n nay trở thành mô hình đ°ợc sÿ dụng phá bi¿n trong các há quÁn trá c¢ sở dā liáu th°¢ng m¿i Nói mát cách đ¢n giÁn, mát c¢ sở dā liáu quan há là mát c¢ sở dā liáu trong đó tÃt cÁ dā liáu đ°ợc tá chức trong các bÁng có mối quan há với nhau Mßi mát bÁng bao gßm các dòng và các cát:
mßi mát dòng đ°ợc gọi là mát bÁn ghi (bá) và mßi mát cát là mát tr°ờng (thuác tính) 2.1 T¿o c¢ så dā liáu
- B°ớc 1: Vào SQL Server management studio >> nhập tên server >> connect - B°ớc 2: Click chuát phÁi vào Databases >> New Database
- B°ớc 3: T¿i mục Database name nhập tên c¢ sở dā liáu >> chọn OK
Trang 2221
2.2 T¿o bÁng dā liáu
BÁng dā liáu là cÃu trúc có vai trò quan trọng nhÃt trong c¢ sở dā liáu quan há Toàn bá dā liáu của c¢ sở dā liáu đ°ợc tá chức trong các bÁng, nhāng bÁng này có thể là nhāng bÁng há thống đ°ợc t¿o ra khi t¿o lập c¢ sở dā liáu, và cũng có thể là nhāng bÁng do ng°ời sÿ dụng đánh ngh*a
Trong các bÁng, dā liáu đ°ợc tá chức d°ới d¿ng các dòng và cát Mßi mát dòng là mát bÁn ghi duy nhÃt trong bÁng và mßi mát cát là mát tr°ờng Các bÁng trong c¢ sở dā liáu đ°ợc sÿ dụng để biểu dißn thông tin, l°u giā dā liáu vÁ các đối t°ợng trong th¿ giới thăc và/hoặc mối quan há giāa các đối t°ợng
Cách 1: T¿o bÁng bằng giao dián management studio - B°ớc1: Mở c¢ sở dā liáu trong SQL
- B°ớc 2: Mở th° mục Table >> chuát phÁi vào Table >> New table >> Nhập thông tin các tr°ờng của bÁng nh° sau:
- B3: L°u thông tin của bÁng >> SQL yêu cÅu nhập tên bÁng >> gõ tên bÁng
Ví dụ: T¿o bÁng HOCVIEN - B°ớc1: Mở c¢ sở dā liáu CTC1 - B°ớc 2: Mở th° mục Table >> chuát phÁi vào Table >> New table >> Nhập thông tin
các tr°ờng của bÁng nh° sau:
Trang 2322 - B3: L°u thông tin của bÁng >> SQL yêu cÅu nhập tên bÁng >> gõ tên bÁng là
HOCVIEN Cách 2: Sÿ dụng câu lánh CREATE TABLE Câu lánh CREATE TABLE đ°ợc sÿ dụng để đánh ngh*a mát bÁng dā liáu mới trong c¢ sở dā liáu Khi đánh ngh*a mát bÁng dā liáu mới, ta cÅn phÁi xác đánh đ°ợc các yêu cÅu sau đây:
- BÁng mới đ°ợc t¿o ra sÿ dụng với mục đích gì và có vai trò nh° th¿ nào trong c¢ sở dā liáu
- CÃu trúc của bÁng bao gßm nhāng tr°ờng (cát) nào, mßi mát tr°ờng có ý ngh*a nh° th¿ nào trong viác biểu dißn dā liáu, kiểu dā liáu của mßi tr°ờng là gì và tr°ờng đó có cho phép nhận giá trá NULL hay không
- Nhāng tr°ờng nào sẽ tham gia vào khóa chính của bÁng BÁng có quan há với nhāng bÁng khác hay không và n¿u có thì quan há nh° th¿ nào
- Trên các tr°ờng của bÁng có tßn t¿i nhāng ràng buác vÁ khuôn d¿ng, điÁu kián hợp lá của dā liáu hay không; n¿u có thì sÿ dụng ở đâu và nh° th¿ nào
Sÿ dụng câu lánh CREATE TABLE có cú pháp nh° sau:
CREATE TABLE tên_bảng
( tên_cột thuộc_tính_cột các_ràng_buộc
[, ,tên_cột_n thuộc_tính_cột_n các_ràng_buộc_cột_n]
[,các_ràng_buộc_trên_bảng]
) Trong đó: tên_bÁng Tên của bÁng cÅn t¿o Tên phÁi tuân theo qui tắc đánh danh và
không đ°ợc v°ợt quá 128 ký tă
Trang 2423 tên_cát Là tên của cát (tr°ờng) cÅn đánh ngh*a, tên cát phÁi tuân theo
qui tắc đánh danh và không đ°ợc trùng nhau trong mßi mát bÁng Mßi mát bÁng phÁi có ít nhÃt mát cát N¿u bÁng có nhiÁu cát thì đánh ngh*a của các cát (tên cát, thuác tính và các ràng buác) phÁi phân cách nhau bởi dÃu phẩy
thuác_tính_cát Mßi mát cát trong mát bÁng ngoài tên cát còn có các thuác tính
bao gßm: • Kiểu dā liáu của cát Đây là thuác tính bắt buác phÁi có đối với mßi
cát • Giá trá mặc đánh của cát: là giá trá đ°ợc tă đáng gán cho cát n¿u nh°
ng°ời sÿ dụng không nhập dā liáu cho cát mát cách t°ờng minh Mßi mát cát chß có thể có nhiÁu nhÃt mát giá trá mặc đánh
• Cát có tính chÃt IDENTITY hay không? tức là giá trá của cát có đ°ợc tă đáng tăng mßi khi có bÁn ghi mới đ°ợc bá sung hay không Tính chÃt này chß có thể sÿ dụng đối với các tr°ờng kiểu số
• Cát có chÃp nhận giá trá NULL hay không Ví dụ: CREATE TABLE GIAOVIEN
( MAGV char(6), HOTEN varchar(50), GIOITINH varchar(3), NLV smalldatetime )
2.2.1 Ràng buộc CHECK
Ràng buác CHECK đ°ợc sÿ dụng nhằm chß đánh điÁu kián hợp lá đối với dā liáu Mßi khi có să thay đái dā liáu trên bÁng (INSERT, UPDATE), nhāng ràng buác này sẽ đ°ợc sÿ dụng nhằm kiểm tra xem dā liáu mới có hợp lá hay không
Ràng buác CHECK đ°ợc khai báo theo cú pháp nh° sau: [CONSTRAINT tên_ràng_buộc]
Trang 2524 CHECK (điều_kiện)
Trong đó, điÁu_kián là mát biểu thức logic tác đáng lên cát nhằm qui đánh giá trá hoặc khuôn d¿ng dā liáu đ°ợc cho phép Trên mßi mát bÁng cũng nh° trên mßi mát cát có thể có nhiÁu ràng buác CHECK
2.1.2 Ràng buộc PRIMARY KEY
Ràng buác PRIMARY KEY đ°ợc sÿ dụng để đánh ngh*a khoá chính của bÁng Khoá chính của mát bÁng là mát hoặc mát tập nhiÁu cát mà giá trá của chúng là duy nhÃt trong bÁng Hay nói cách khác, giá trá của khoá chính sẽ giúp cho ta xác đánh đ°ợc duy nhÃt mát dòng (bÁn ghi) trong bÁng dā liáu Mßi mát bÁng chß có thể có duy nhÃt mát khoá chính và bÁn thân khoá chính không chÃp nhận giá trá NULL Ràng buác PRIMARY KEY là c¢ sở cho viác đÁm bÁo tính toàn vẹn thăc thể cũng nh° toàn vẹn tham chi¿u
Cách t¿o khoá Primary Key - B°ớc 1: Mở bÁng cÅn xác đánh khoá - B°ớc 2: Chọn tr°ờng cÅn xác đánh làm khóa >> chuát phÁi >> chọn Set primary key
Ràng buác UNIQUE đ°ợc sÿ dụng trong câu lánh CREATE TABLE để đánh ngh*a khoá phụ cho bÁng và đ°ợc khai báo
Trang 2625
2.1.4 Ràng buộc FOREIGN KEY
Các bÁng trong mát c¢ sở dā liáu có mối quan há với nhau Nhāng mối quan há này biểu dißn cho să quan há giāa các đối t°ợng trong th¿ giới thăc VÁ mặt dā liáu, nhāng mối quan há đ°ợc đÁm bÁo thông qua viác đòi hỏi să có mặt của mát giá trá dā liáu trong bÁng này phÁi phụ thuác vào să tßn t¿i của giá trá dā liáu đó ở trong mát bÁng khác
Ràng buác FOREIGN KEY đ°ợc sÿ dụng trong đánh ngh*a bÁng dā liáu nhằm t¿o nên mối quan há giāa các bÁng trong mát c¢ sở dā liáu Mát hay mát tập các cát trong mát bÁng đ°ợc gọi là khoá ngo¿i, tức là có ràng buác FOREIGN KEY, n¿u giá trá của nó đ°ợc xác đánh từ khoá chính (PRIMARY KEY) hoặc khoá phụ (UNIQUE) của mát bÁng dā liáu khác
Hình d°ới đây cho thÃy đ°ợc mối quan há giāa 2 bÁng HOCVIEN VÀ LOP Trong bÁng HOCVIEN là khoá chính là cát MALOP nh°ng đßng thời cát MALOP là khoá ngo¿i tham chi¿u đ¿n cát MALOP của bÁng LOP
Ràng buác FOREIGN KEY đ°ợc đánh ngh*a theo cú pháp d°ới đây:
[CONSTRAINT tên_ràng_buộc] FOREIGN
KEY [(danh_sách_cột)]
REFERENCES tên_bảng_tham_chiếu(danh_sách_cột_tham_chiếu) [ON DELETE
CASCADE | NO ACTION | SET NULL | SET DEFAULT] [ON UPDATE CASCADE | NO ACTION | SET NULL | SET DEFAULT] Viác đánh ngh*a mát ràng buác FOREIGN KEY bao gßm các y¿u tố sau:
• Tên cát hoặc danh sách cát của bÁng đ°ợc đánh ngh*a tham gia vào khoá ngoài • Tên của bÁng đ°ợc tham chi¿u bởi khoá ngoài và danh sách các cát đ°ợc tham
chi¿u đ¿n trong bÁng tham chi¿u • Cách thức xÿ lý đối với các bÁn ghi trong bÁng đ°ợc đánh ngh*a trong tr°ờng
hợp các bÁn ghi đ°ợc tham chi¿u trong bÁng tham chi¿u bá xoá (ON DELETE) hay cập nhật (ON UPDATE) SQL chuẩn đ°a ra 4 cách xÿ lý:
Trang 2726 CASCADE: Tă đáng xoá (cập nhật) n¿u bÁn ghi đ°ợc tham chi¿u bá
xoá (cập nhật) NO ACTION: (Mặc đánh) N¿u bÁn ghi trong bÁng tham chi¿u đang
đ°ợc tham chi¿u bởi mát bÁn ghi bÃt kỳ trong bÁng đ°ợc đánh ngh*a thì bàn ghi đó không đ°ợc phép xoá hoặc cập nhật (đối với cát đ°ợc tham chi¿u)
SET NULL: Cập nhật l¿i khoá ngoài của bÁn ghi thành giá trá NULL (n¿u cát cho phép nhận giá trá NULL)
SET DEFAULT: Cập nhật l¿i khoá ngoài của bÁn ghi nhận giá trá mặc đánh (n¿u cát có qui đánh giá trá mặc đánh)
2.3 Xoá bÁng
Khi mát bÁng không còn cÅn thi¿t , có thể xoá nó ra khỏi c¢ sở dā liáu bằng câu lánh DROP TABLE Câu lánh này cũng đßng thời xoá tÃt cÁ nhāng ràng buác, chß mục, trigger liên quan đ¿n bÁng đó hoặc bằng giao dián quÁn lý của management Studio Cách 1: xoá bÁng bằng giao dián quÁn lý của management Studio
B°ớc 1: Mở c¢ sở dā liáu B°ớc 2: Click chuát phÁi vào bÁng dā liáu cÅn xoá >> Delete
Trang 2827 B°ớc 3: XuÃt hián bÁng cÅn xoá >> chọn OK
Cách 2: Câu lánh có cú pháp nh° sau: DROP TABLE tên_bảng
Ví dụ: DROP TABLE HOCVIEN Trong các há quÁn trá c¢ sở dā liáu, khi đã xoá mát bÁng bằng lánh DROP TABLE, ta không thể khôi phục l¿i bÁng cũng nh° dā liáu của nó Do đó, cÅn phÁi cẩn thận khi sÿ dụng câu lánh này
Câu lánh DROP TABLE không thể thăc hián đ°ợc n¿u bÁng cÅn xoá đang đ°ợc tham chi¿u bởi mát ràng buác FOREIGN KEY Trong tr°ờng hợp này, ràng buác FOREIGN KEY đang tham chi¿u hoặc bÁng đang tham chi¿u đ¿n bÁng cÅn xoá phÁi đ°ợc xoá tr°ớc
Khi mát bÁng bá xoá, tÃt cÁ các ràng buác, chß mục và trigger liên quan đ¿n bÁng cũng đßng thời bá xóa theo Do đó, n¿u t¿o l¿i bÁng thì cũng phÁi t¿o l¿i các đối t°ợng này
Trang 2928
2.4 Cập nhật, bß sung và xoá dā liáu
Đối với mát số khung nhìn, có thể ti¿n hành thăc hián các thao tác cập nhập, bá sung và xoá dā liáu Thăc chÃt, nhāng thao tác này sẽ đ°ợc chuyển thành nhāng thao tác t°¢ng tă trên các bÁng c¢ sở và có tác đáng đ¿n nhāng bÁng c¢ sở
VÁ mặt lý thuy¿t, để có thể thăc hián thao tác bá sung, cập nhật và xoá, mát khung nhìn tr°ớc tiên phÁi thoÁ mãn các điÁu kián sau đây:
• Trong câu lánh SELECT đánh ngh*a khung nhìn không đ°ợc sÿ dụng từ khoá DISTINCT, TOP, GROUP BY và UNION
• Các thành phÅn xuÃt hián trong danh sách chọn của câu lánh SELECT phÁi là các cát trong các bÁng c¢ sở Trong danh sách chọn không đ°ợc chứa các biểu thức tính toán, các hàm gáp
Ngoài nhāng điÁu kián trên, các thao tác thay đái đ¿n dā liáu thông qua khung nhìn còn phÁi đÁm bÁo thoÁ mãn các ràng buác trên các bÁng c¢ sở, tức là vẫn đÁm bÁo tính toàn vẹn dā liáu Ví dụ d°ới đây sẽ minh ho¿ cho thÃy viác thăc hián các thao tác bá sung, cập nhật và xoá dā liáu thông qua khung nhìn
2.4.1 Cập nhật, bổ sung dữ liệu
Ví dā: T¿o 2 bÁng 1 BÀNG 1: HOCVIEN
B°ớc 1: Mở c¢ sở dā liáu CTC1 B°ớc 2: Mở th° mục Table >> chuát phÁi vào Table >> New table >> Nhập thông tin của bÁng nh° sau:
BÁng HOCVIEN