Chỉ định điều kiện truy vấn DL Mệnh đề WHERE trong câu lệnh SELECT được sử dụng nhằm xác định các điều kiện truy xuất dữ liệu.. Người sử dụng trực tiếp đưa giá trị NULL Một cột có
Trang 1Bài giảng: HỆ CƠ SỞ DỮ LIỆU
Trang 2Nội dung môn học
Chương 1: Giới thiệu về CSDL
Chương 2: Mô hình liên kết – thực thể
Chương 3: Mô hình dữ liệu quan hệ
Chương 4: Chuẩn hóa
Chương 5: Chuyển đổi sơ đồ LKTT thành QH
Chương 6: Thiết kế vật lý CSDL
Chương 7: Ngôn ngữ SQL
Chương 8: Thủ tục lưu trữ và trigger
Chương 9: Bảo mật và quyền của người dùng
Trang 3Tài liệu học tập
Dương Tuấn Anh, Nguyễn Trung Trực - Hệ
cơ sở dữ liệu – NXB đại học quốc gia TP
Hồ Chí Minh
Trần Đắc Phiến - Giáo trình cơ sở dữ liệu -
Trường ĐH Công nghiệp TP Hồ Chí Minh
Trang 4Mục đích của môn học
Cung cấp các kiến thức căn về cơ sở
dữ liệu cho sinh viên
Cung cấp các kiến thức về ngôn ngữ
SQL
Cung cấp các kiến thức về lập trình
với SQL- Server 2000
Trang 5Yêu cầu môn học
Phần mềm SQL SERVER 2007
Hiện diện trên 80%
Nắm được nội dung lý thuyết
Hoàn thành các bài tập thực hành
Điểm giữa kỳ lớn hơn hoặc bằng 5
Trang 6Cơ sở dữ liệu
Cơ sở dữ liệu quan hệ?
Là một CSDL trong đó dữ liệu được tổ
chức trong các bảng có mối quan hệ với nhau
Bảng?
Là đối tượng được sử dụng tổ chức lưu
trữ dữ liệu
Trang 7Minh họa
Trang 8Bảng
Tên
Cột, dòng
Dữ liệu của bảng
Trang 9Khóa của bảng
Khái niệm
Khóa chính
Khóa ngoại
Trang 10Ví dụ về khóa chính-primary key
Trang 11Ví dụ về khóa ngoại-FK
Trang 13Giới thiệu sơ lược
SQL SERVER 2000
Trang 15Tìm hiểu Enterprise Manager
Trang 16Tìm hiểu Query Analyzer
Là cửa sổ để viết lệnh
Ngôn ngữ truy vấn SQL (Structured
query language)
Trang 17SQL- Giới thiệu
SQL được xem là ngôn ngữ chuẩn
trong cơ sở dữ liệu
SQL dùng để:
Định nghĩa dữ liệu
Truy xuất-thao tác dữ liệu
Điều khiển quyền truy cập
Đảm bảo toàn vẹn dữ liệu
Trang 20NGÔN NGỮ THAO TÁC DỮ LIỆU
SELECT [ALL | DISTINCT][TOP n] danhsáchchọn [ INTO tênbảngmới]
Trang 21Bảng dùng để minh họa-LOP
Trang 22Mệnh đề From
Được dùng để chỉ các bảng và khung
nhìn cần truy xuất DL
Ví dụ: SELECT * FROM Khoa
Bí danh được chỉ định ngay sau tên
bảng
Ví dụ: SELECT * FROM Khoa a
Trang 23Danh sách chọn trong SELECT
Thay đổi tiêu đề cột- AS
„Mã lớp‟=malop, tenlop „Tên lớp‟, khoa As Khóa
Trang 24Cấu trúc CASE trong SELECT
Được sử dụng trong DSC nhằm thay
đổi kết quả của truy vấn tùy thuộc vào các trường hợp khác nhau
Trang 25Cấu trúc CASE trong SELECT
Trang 28Hằng và biểu thức trong DSC
Mỗi một biểu thức trong DSC trở thành
một cột trong kết quả truy vấn
Ví dụ: SELECT tenmonhoc, sodvht*15 AS sotiet FROM monhoc
Ví dụ: SELECT tenmonhoc,‟Số tiết:‟, sodvht*15 FROM monhoc
Trang 30Chỉ định điều kiện truy vấn DL
Mệnh đề WHERE trong câu lệnh
SELECT được sử dụng nhằm xác định các điều kiện truy xuất dữ liệu
Sau WHERE là một biểu thức logic và
chỉ những dòng nào thỏa điều kiện thì mới xuất hiện trong kết quả truy vấn
Trang 31Mệnh đề WHERE thường sử dụng
Các toán tử kết hợp điều kiện (AND,OR)
Các toán tử so sánh
Kiểm tra giới hạn của dữ liệu
BETWEEN hoặc NOT BETWEEN
Danh sách
Kiểm tra khuôn dạng dữ liệu
Các giá trị NULL
Trang 32Mệnh đề WHERE thường sử dụng
Các toán tử so sánh:
=,>,<,>=,<=,<>,!>,!<
Kiểm tra giới hạn dữ liệu
giá_trị BETWEEN a AND b
giá_trị NOT BETWEEN a AND b
Danh sách (IN và NOT IN)
Sau IN hoặc NOT IN có thể là một danh
sách các giá trị hoặc một câu lệnh khác
Trang 33Mệnh đề WHERE thường sử dụng
Toán tử LIKE và các ký tự đại diện
Từ khóa LIKE và NOT LIKE sử dụng trong
câu lệnh SELECT nhằm mô tả khuôn dạng của dữ liệu
Kết hợp với các ký tự đại diện:
% chuỗi ký tự bất kỳ không hoặc nhiều ký tự
_ ký tự đơn bất kỳ
[] ký tự đơn bất kỳ trong giới hạn được chỉ định
[^] ký tự đơn bất kỳ không nằm trong giới hạn được chỉ định
Trang 34Mệnh đề WHERE thường sử dụng
Giá trị NULL
Nếu không có dữ liệu được nhập cho cột
và không có mặc định cho cột hay kiểu
dữ liệu cho cột đó
Người sử dụng trực tiếp đưa giá trị NULL
Một cột có kiểu dữ liệu là kiểu số sẽ chứa
giá trị NULL nếu giá trị được chỉ định gây tràn số
Trang 35Tạo mới bảng bằng KQ lệnh SELECT
SELECT INTO có tác dụng tạo bảng
mới có cấu trúc và dữ liệu là kết quả của truy vấn
Sắp xếp kết quả truy vấn
Dùng ORDER BY để sắp xếp kết quả truy
vấn DESC giảm dần ASC tăng dần
Nếu sau ORDER BY có nhiều cột thì ưu
tiên từ trái qua phải
Trang 36Phép hợp
Phép hợp được sử dụng trong trường
hợp ta cần gộp kết quả của hai hay nhiều truy vấn thành một tập kết quả duy nhất
Trang 37Phép hợp
Cú pháp:
Câu_lệnh_1
UNION [ALL] Câu_lệnh_2
[UNION [ALL] Câu_lệnh_3]
[UNION [ALL] Câu_lệnh_n]
[ORDER BY cột_sắp_xếp]
[COMPUTE danh_sách_hàm_gộp [BY
danh_sách_cột]]
Trang 38[GROUP BY danh_sách_cột]
[HAVING điều_kiện]
Trang 39Phép hợp
Và Câu_lệnh_i (i = 2, ,n) có dạng
SELECT danh_sách_cột
[FROM danh_sách_bảng|khung_nhìn] [WHERE điều_kiện]
[GROUP BY danh_sách_cột]
[HAVING điều_kiện]
Tìm hiểu qua ví dụ
Trang 41Chú ý khi dùng UNION
Danh sách cột phải có cùng số lượng
Các cột tương ứng phải cùng kiểu dữ
liệu
Các cột tương ứng trong bản thân
từng truy vấn có thứ tự
Khi các kiểu dữ liệu khác nhau được
kết hợp sẽ chọn kiểu dữ liệu cao hơn
Tiêu đề cột trong kết quả của phép
hợp sẽ là tiêu đề truy vấn đầu tiên
Trang 42Phép nối
Khi cần thực hiện một yêu cầu truy
vấn dữ liệu từ hai hay nhiều bảng, ta phải sử dụng đến phép nối
Trang 43Tìm hiểu phép nối
Trang 44Tìm hiểu phép nối
Trang 45Tìm hiểu phép nối
Trang 46Biểu diễn phép nối
SELECT malop,tenlop
FROM khoa,lop
WHERE khoa.makhoa = lop.makhoa AND
tenkhoa='Khoa Công nghệ Thông tin'
Trang 47Sử dụng phép nối
Các yếu tố cần xác định khi thực hiện phép nối:
• Những cột nào cần hiển thị trong kết quả
truy vấn
• Những bảng nào có tham gia vào truy vấn
• Điều kiện để thực hiện phép nối giữa các
bảng dữ liệu là gì?
Trang 49Sử dụng phép nối trong SQL2
• Phép nối ngoài trái (LEFT OUTER JOIN)
• Phép nối ngoài phải (RIGHT OUTER JOIN)
• Phép nối ngoài đầy đủ (FULL OUTER JOIN)
Cú pháp:
tên_bảng_1 LEFT|RIGHT|FULL [OUTER]
JOIN tên_bảng_2 ON điều_kiện_nối
Trang 50Sử dụng phép nối trong SQL2
Trang 51Phép nối ngoài trái
SELECT *
FROM nhanvien LEFT OUTER JOIN donvi
ON nhanvien.madv=donvi.madv
Trang 52Phép nối ngoài phải
SELECT *
FROM nhanvien RIGHT OUTER JOIN
donvi ON nhanvien.madv=donvi.madv
Trang 53Phép nối ngoài đầy đủ
SELECT *
FROM nhanvien FULL OUTER JOIN donvi
ON nhanvien.madv=donvi.madv
Trang 54Thống kê dữ liệu với GROUP BY
Nhằm phân hoạch các dòng dữ liệu trong
Trang 55Thống kê trên toàn bộ dữ liệu
Trang 56Thống kê dữ liệu trên các nhóm
Trang 57Thống kê dữ liệu trên các nhóm
Trang 58Thống kê dữ liệu trên các nhóm
Trang 59Thống kê dữ liệu trên các nhóm
Trang 60Chỉ định điều kiện đối với hàm gộp
Trang 61Thống kê dữ liệu với COMPUTE
SELECT khoa.makhoa,tenkhoa, COUNT (malop)
AS solop
FROM khoa,lop
WHERE khoa.makhoa=lop.makhoa
GROUP BY khoa.makhoa,tenkhoa
Trang 62Thống kê dữ liệu với COMPUTE
Trang 63Thống kê dữ liệu với COMPUTE
Trang 64Thống kê dữ liệu với COMPUTE
Trang 65Thống kê dữ liệu với COMPUTE
Sử dụng COMPUTE BY thì cũng phải
sử dụng mệnh đề ORDER BY
Các cột liệt kê trong COMPUTE … BY và
ORDER BY giống nhau hoàn toàn, và
có cùng thứ tự
Trang 66
Thống kê dữ liệu với COMPUTE
Trang 67Thống kê dữ liệu với COMPUTE
Trường hợp không có BY thì không cần
sử dụng Order By, khi đó phạm vi tính toán của hàm gộp là trên toàn bộ
Trang 68Thống kê dữ liệu với COMPUTE
Trang 69Truy vấn con
Là một câu lệnh SELECT được lồng vào bên
trong một câu lệnh SELECT , INSERT ,
UPDATE , DELETE hoặc bên trong một truy vấn con khác
Trang 70Phép so sánh đối với kết quả
Trang 71Phép so sánh đối với kết quả truy vấn con
SELECT hodem,ten
FROM sinhvien JOIN lop ON
sinhvien.malop=lop.malop
WHERE tenlop='Tin K25' AND
ngaysinh< ALL ( SELECT ngaysinh
FROM sinhvien JOIN lop
ON sinhvien.malop=lop.malop WHERE lop.tenlop='Toán K25')
Trang 72Phép so sánh đối với kết quả
truy vấn con
SELECT hodem,ten
FROM sinhvien JOIN lop on
sinhvien.malop=lop.malop
WHERE tenlop='Tin K25' AND
year(ngaysinh)= ANY(SELECT year(ngaysinh)
FROM sinhvien JOIN lop
ON sinhvien.malop=lop.malop
WHERE lop.tenlop='Toán K25')
Trang 73Sử dụng truy vấn con với toán tử IN
Cú pháp:
WHERE biểu_thức [NOT] IN
(truy_vấn_con)
Trang 74Sử dụng truy vấn con với toán tử IN
SELECT hodem,ten
FROM sinhvien JOIN lop on
sinhvien.malop=lop.malop
WHERE tenlop='Tin K25' AND
year (ngaysinh) IN ( SELECT year (ngaysinh)
FROM sinhvien JOIN lop
ON sinhvien.malop=lop.malop WHERE lop.tenlop='Toán K25')
Trang 75Sử dụng lượng từ EXISTS với truy vấn con
Trang 76Bổ sung, cập nhật và xóa DL
• Lệnh INSERT
• Lệnh UPDATE
• Lệnh DELETE
Trang 77Bổ sung từng dòng dữ liệu với lệnh INSERT
Trang 78Bổ sung từng dòng dữ liệu với
Câu lệnh còn được viết như sau:
INSERT INTO sinhvien
VALUES („0241020008‟,„Nguyễn Công‟,‟Chính‟, NULL ,1, NULL ,‟C24102‟)
Trang 79Bổ sung nhiều dòng dữ liệu từ
Trang 80[WHERE điều_kiện]
Trang 83Cập nhật dữ liệu
Điều kiện cập nhật dữ liệu liên quan
đến nhiều bảng
Trang 84Xóa dữ liệu
DELETE FROM Tên_bảng
FROM danh_sách_bảng
WHERE điều_kiện
Ví dụ: DELETE FROM SINHVIEN
WHERE noisinh LIKE „%Huế%‟
Trang 85Xóa dữ liệu
Sử dụng truy vấn con trong Delete
DELETE FROM sinhvien
WHERE malop NOT IN (SELECT
DISTINCT malop FROM sinhvien)
Xóa toàn bộ dữ liệu trong bảng
DELETE FROM Điểm_thi
TRUNCATE TABLE Tên_bảng
Trang 86Ngôn ngữ định nghĩa dữ liệu
Về cơ bản bao gồm các lệnh:
CREATE định nghĩa và tạo ĐT mới
ALTER thay đổi định nghĩa của bảng
DROP xóa đối tượng CSDL
Trang 87Ngôn ngữ định nghĩa dữ liệu
Cấu trúc bảng gồm những cột nào
Khóa chính của bảng là cột nào
Các ràng buộc về khuôn dạng dữ liệu
Trang 88Ngôn ngữ định nghĩa dữ liệu
CREATE TABLE tên_bảng
Trang 89Ngôn ngữ định nghĩa dữ liệu
CREATE TABLE nhanvien
(
manv NVARCHAR(10) NOT NULL,
hoten NVARCHAR(50) NOT NULL,
ngaysinh DATETIME NULL,
dienthoai NVARCHAR(10) NULL,
hsluong DECIMAL(3,2) DEFAULT (1.92) )
Trang 90Ngôn ngữ định nghĩa dữ liệu
INSERT INTO nhanvien
VALUES('NV01','Le Van
A','2/4/75','886963',2.14)
INSERT INTO nhanvien(manv,hoten)
VALUES('NV02','Mai Thi B')
INSERT INTO
nhanvien(manv,hoten,dienthoai)
VALUES('NV03','Tran Thi C','849290')
Trang 91Ngôn ngữ định nghĩa dữ liệu
Ràng buộc CHECK:
[CONSTRAINT tên_ràng_buộc]
CHECK (điều_kiện)
Trang 92Ngôn ngữ định nghĩa dữ liệu
CREATE TABLE diemtotnghiep
Trang 93Ngôn ngữ định nghĩa dữ liệu
INSERT INTO
diemtotnghiep(hoten,diemvan,diemtoan)
VALUES ('Le Thanh Hoang',9.5,2.5)
INSERT INTO diemtotnghiep(hoten,diemvan)
VALUES ('Hoang Thi Mai',2.5)
Trang 94Ngôn ngữ định nghĩa dữ liệu
CREATE TABLE lop
(
malop NVARCHAR (10) NOT NULL ,
tenlop NVARCHAR (30) NOT NULL ,
khoa SMALLINT NULL ,
hedaotao NVARCHAR (25) NULL ,
namnhaphoc INT NULL ,
Trang 95Ngôn ngữ định nghĩa dữ liệu
Ràng buộc Primary Key
[ CONSTRAINT tên_ràng_buộc]
PRIMARY KEY [(danh_sách_cột)]
Trang 96
Ngôn ngữ định nghĩa dữ liệu
CREATE TABLE sinhvien
(
masv NVARCHAR (10)
CONSTRAINT pk_sinhvien_masv PRIMARY
KEY ,
hodem NVARCHAR (25) NOT NULL ,
ten NVARCHAR (10) NOT NULL ,
Trang 97Ngôn ngữ định nghĩa dữ liệu
CREATE TABLE diemthi
Trang 98Ngôn ngữ định nghĩa dữ liệu
Ràng buộc FOREIGN KEY
Trang 99Ngôn ngữ định nghĩa dữ liệu
Trang 100Ngôn ngữ định nghĩa dữ liệu
[ 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_tha m_chiếu)
[ ON DELETE CASCADE | NO ACTION | SET
NULL | SET DEFAULT ]
[ ON UPDATE CASCADE | NO ACTION | SET
NULL | SET DEFAULT ]
Trang 101Ngôn ngữ định nghĩa dữ liệu
CREATE TABLE diemthi
Trang 102Ngôn ngữ định nghĩa dữ liệu
Sửa đổi định nghĩa bảng
Trang 103Ngôn ngữ định nghĩa dữ liệu
ALTER TABLE tên_bảng
ADD định_nghĩa_cột |
ALTER COLUMN tên_cột kiểu_dữ_liêu [ NULL |
NOT NULL ] |
DROP COLUMN tên_cột |
ADD CONSTRAINT tên_ràng_buộc
định_nghĩa_ràng_buộc |
DROP CONSTRAINT tên_ràng_buộc
Trang 104Ngôn ngữ định nghĩa dữ liệu
Giả sử có hai bảng NHANVIEN và DONVI: CREATE TABLE donvi
(
madv INT NOT NULL PRIMARY KEY, tendv NVARCHAR(30) NOT NULL
)
Trang 105Ngôn ngữ định nghĩa dữ liệu
CREATE TABLE nhanvien
(
manv NVARCHAR (10) NOT NULL ,
hoten NVARCHAR (30) NOT NULL ,
ngaysinh DATETIME ,
diachi CHAR (30) NOT NULL
)
Trang 106Ngôn ngữ định nghĩa dữ liệu
Trang 107Ngôn ngữ định nghĩa dữ liệu
ALTER TABLE nhanvien
ADD madv INT NULL
Sửa đổi lại để có giá trị NULL
ALTER TABLE nhanvien
ALTER COLUMN diachi NVARCHAR (100) NULL
Xóa cột:
ALTER TABLE nhanvien
DROP COLUMN ngaysinh
Trang 108Ngôn ngữ định nghĩa dữ liệu
ALTER TABLE nhanvien
ADD
CONSTRAINT pk_nhanvien PRIMARY KEY (manv)
Bổ sung khóa ngoại:
ALTER TABLE nhanvien
Trang 109Ngôn ngữ định nghĩa dữ liệu
Xoá bỏ ràng buộc kiểm tra số điện thoại của nhân viên
ALTER TABLE nhanvien
Trang 110Lưu ý
Nếu bổ sung thêm một cột vào bảng và trong bảng đã
có ít nhất một bản ghi thì cột mới cần bổ sung phải cho phép chấp nhận giá trị NULL hoặc phải có giá trị mặc định
Muốn xoá một cột đang được ràng buộc bởi một ràng
buộc hoặc đang được tham chiếu bởi một khoá ngoài,
ta phải xoá ràng buộc hoặc khoá ngoài trước sao cho trên cột không còn bất kỳ một ràng buộc và không
còn được tham chiếu bởi bất kỳ khoá ngoài nào
Nếu bổ sung thêm ràng buộc cho một bảng đã có dữ
liệu và ràng buộc cần bổ sung không được thoả mãn bởi các bản ghi đã có trong bảng thì câu lệnh ALTER TABLE không thực hiện được
Trang 111Ngôn ngữ định nghĩa dữ liệu
Khung nhìn:
Trang 112Ngôn ngữ định nghĩa dữ liệu
CREATE VIEW
tên_khung_nhìn[(danh_sách_tên_cột)]
AS câu_lệnh_SELECT
Trang 113Ngôn ngữ định nghĩa dữ liệu
CREATE VIEW dssv AS
SELECT masv,hodem, ten,
DATEDIFF (YY,ngaysinh, GETDATE ()) AS
Trang 114Lưu ý khi tạo khung nhìn:
Tên khung nhìn và tên cột tuân theo
- Biểu thức phải đặt tên tiêu đề
- Không được trùng tiêu đề cột
Trang 115Sửa đổi khung nhìn
ALTER VIEW tên_khung_nhìn
Trang 116và có thể định nghĩa lại khung nhìn trên
Trang 117Xoá khung nhìn
DROP VIEW tên_khung_nhìn
Trang 118TRIGGERS
SQL
Trang 123Lập trình trong CSDL
DECLARE @FirstNameVariable NVARCHAR (20), @RegionVariable NVARCHAR (30)
SET @FirstNameVariable = N'Anne'
SET @RegionVariable = N'WA'
SELECT LastName, FirstName, Title
FROM Employees
WHERE FirstName = @FirstNameVariable
OR Region = @RegionVariable
GO –kết thúc một lô
Trang 124Lập trình trong CSDL
Ví dụ
DECLARE @EmpIDVariable INT
Gán giá trị biến bằng câu lệnh Select
SELECT @EmpIDVariable =
MAX(EmployeeID)
FROM Employees
GO
Trang 125RAISERROR ('Task cannot be executed within a transaction.', 10, 1)
RETURN END
Trang 126UPDATE Employees SET LastName = 'Brooke'
WHERE LastName = 'Brook'
Trang 127Lập trình trong CSDL
Ví dụ 2:
UPDATE Customers
SET Phone =‟030‟ + Phone
WHERE Country= ‟Germany‟
PRINT @@ROWCOUNT
Trang 128Lập trình trong CSDL
Các hàm thường dùng:
GetDate() lấy ngày hiện hành
Month(Date); Year(Date)
DateAdd(Datepart, Number, Date) trả
về một Datetime là k/quả cộng thêm vào Date một giá trị số được chỉ trong phần Datepart
Trang 129Lập trình trong CSDL
Datediff(đơn vị, ngày 1, ngày 2)
Hàm trả về khoảng thời gian giữa hai giá
trị kiểu này được chỉ định tuỳ thuộc vào
tham số datepart
Đơn vị: dd, mm, yy
Datepart (datepart, date) Trả về một số nguyên biểu diễn Datepart của ngày được chỉ định
Trang 130 CAST (biểu thức AS kdl) chuyển đổi
thành kiểu dữ liệu mong muốn
STR(số) chuyển số thành chuỗi
Trang 132END
Trang 136Lập trình trong CSDL
Câu lệnh Return: quá trình xử lý KT
Câu lệnh WAITFOR
Là một chỉ thị tạm dừng một thời gian
trước khi xử lý các câu lệnh tiếp theo
WAITFOR { DELAY 'time' | TIME 'time' }
Câu lệnh RAISERROR phát sinh lỗi của
người dùng