SQL SERVER 2008

Lương Trần Hy Hiến – 099.33.169.72

MỤC TIÊU

2

(cid:1) Hiểu các khái niệm về CSDL (cid:1) Biết tạo, sao lưu, phục hồi và xóa CSDL (cid:1) Biết tạo, chỉnh sửa, xóa bảng (cid:1) Hiểu và sử dụng hiệu quả các ràng buộc dữ

liệu trên các cột.

(cid:1) Hiểu rõ mối quan hệ giữa các bảng (cid:1) Hiểu rõ các câu lệnh thao tác cũng như truy

vấn dữ liệu.

(cid:1) Nắm vững các toán tử truy vấn mạnh

NỘI DUNG

3

(cid:1) CSDL

(cid:1) Định nghĩa (cid:1) Tạo, xóa, sao lưu, phục hồi

(cid:1) Bảng

(cid:1) Ngôn ngữ định nghĩa

(cid:1) Tạo, xóa, thay đổi, thiết lập ràng buộc

(cid:1) Ngôn ngữ thao tác (cid:1) Chèn, xóa, sửa (cid:1) Truy vấn

(cid:1) Các hàm thường dùng

CÁC KHÁI NIỆM VỀ CƠ SỞ DỮ LIỆU

(cid:1) Khái niệm thực thể (cid:1) Khái niệm mối quan hệ thực thể (cid:1) Khái niệm CSDL (cid:1) Thao tác dữ liệu

4

CSDL LÀ GÌ

DON_VI

NHAN_VIEN

5

(cid:1) Thực thể: các vật thể, hình thức có thực liên quan

đến bài toán hiện tại. (cid:1) Sinh viên, giáo viên, nhân viên… (cid:1) Lớp học, phòng ban, nhà xưởng, kho chứa, thư

viện…

(cid:1) Điện thoại, máy tính, quần áo, bánh kẹo… (cid:1) Dịch vụ sửa chữa, dịch vụ biểu diễn… (cid:1) Đơn đặt hàng, phiếu bán hàng, phiếu chuyển hàng…

(cid:1) Thuộc tính: được sử dụng để mô tả thực thể

(cid:1) Sinh viên: họ tên, giới tính, điểm, chuyên ngành… (cid:1) Sản phẩm: tên, giá, ngày sản xuất…

6

Mã SV

Học phí

Họ và tên

Sinh viên

Điểm

Giới tính

Học lực

Điện thoại

7

Mỗi hàng chứa 1 thực thể

8

TT1

TT2

TT1

TT2

TT1

TT2

(cid:1) Sinh viên & Lớp học (cid:1) Nhân viên & Phòng ban (cid:1) Sinh viên & Môn học (cid:1) Sinh viên & Giáo viên (cid:1) Tài xế & Xe (cid:1) Khách hàng & Chính sách giảm giá (cid:1) Tour & Du khách (cid:1) Sản phẩm & Danh mục (cid:1) Đơn hàng & Khách hàng (cid:1) Đơn hàng & Mặt hàng

9

Anh ngữ

10

11

(cid:1) Gồm nhiều bảng và mối quan hệ giữa chúng (cid:1) Mỗi bảng chứa nhiều thực thể cùng loại (thể hiện) (cid:1) Mỗi thực thể có nhiều thuộc tính (cid:1) Mỗi thuộc tính chịu nhiều ràng buộc

(cid:1) Khóa chính (có giá trị duy nhất) (cid:1) Khóa ngoại (có giá trị của cột khóa ở bảng khác) (cid:1) Null (cho phép để trống) (cid:1) Miền giá trị (giá trị phải thuộc vào)

(cid:1) Mỗi bảng có thể có quan hệ với nhiều bảng khác (cid:1) Có thể có nhiều cột tham gia vào khóa chính

12

SQL

Định nghĩa

Thao tác

CREATE DROP ALTER

INSERT UPDATE DELETE SELECT

13

NGÔN NGỮ ĐỊNH NGHĨA DỮ LIỆU

14

CSDL-TẠO CSDL

15

(cid:1) Tạo, xóa

(cid:1) CREATE DATABASE NhatNghe; (cid:1) USE NhatNghe; (cid:1) DROP DATABASE NhatNghe;

(cid:1) Sao lưu và phục hồi (dùng công cụ)

(cid:1) Online (Backup/Restore) (cid:1) Offline (Detach/Attach)

BẢNG

16

(cid:1) Định nghĩa (cid:1) Các khái niệm

(cid:1) Cột (cid:1) Kiểu dữ liệu (cid:1) Ràng buộc

(cid:1) Các thao tác bảng

(cid:1) Tạo (CREATE TABLE) (cid:1) Xóa (DROP TABLE) (cid:1) Chỉnh sửa (ALTER TABLE)

(cid:1) Tạo bảng

(cid:1)CREATE TABLE

CREATE TABLE

(cid:1) Xóa bảng

(cid:1)DROP TABLE (cid:1) Sửa đổi cấu trúc (cid:1)ALTER TABLE

(cid:2) ALTER COLUMN (cid:2) ADD COLUMN (cid:2) DROP COLUMN

DROP TABLE

ALTER TABLE

17

LỆNH TẠO BẢNG

18

Tên bảng

Tên cột, kiểu dữ liệu, ràng buộc

Khóa chính

CREATE TABLE SinhVien (

MaSV NVARCHAR(20) NOT NULL, HoTen NVARCHAR(50) NOT NULL, NgaySinh DATETIME NULL, GioiTinh INT DEFAULT 1, DiemTB FLOAT NOT NULL, CONSTRAINT SV_PK PRIMARY KEY(MaSV)

);

19

(cid:1) Kiểu chuỗi ([N]-unicode)

(cid:1) [N]CHAR,[N]VARCHAR, [N]TEXT

(cid:1) Số thực

(cid:1) FLOAT, DOUBLE, MONEY

(cid:1) Ngày, giờ

(cid:1) DATE, TIME, DATETIME, TIMESTAMP

(cid:1) Số nguyên

(cid:1) BIT, SMALLINT, INT, BIGINT

(cid:1) Nhị phân

(cid:1) BINARY, VARBINARY, IMAGE

20

Cho phép để trống

Quan hệ khóa ngoại

Cột khóa Ngoại

Khóa chính

21

22

(cid:1) PRIMARY KEY : Khóa chính

(cid:1) CONSTRAINT PRIMARY KEY ()

(cid:1) FOREIGN KEY : Khóa ngoại

(cid:1) CONSTRAINT FOREIGN KEY () REFERENCES () [ON DELETE CASCADE] [ON UPDATE CASCADE]

(cid:1) CHECK: Kiểm tra

(cid:1) CONSTRAINT CHECK (<điều kiện>)

(cid:1) NOT NULL : Không cho để trống (cid:1) DEFAULT : Mặc định (cid:1) UNIQUE: Duy nhất

23

(cid:1) X=CASCADE

(cid:1) Xóa (cập nhật) tất cả các record ở bảng con có khóa

ngoại bị xóa (cập nhật) ở bảng cha

(cid:1) X=SET NULL

(cid:1) Thiết lập giá trị null cho khóa ngoại của các record bị

xóa (cập nhật) ở bản cha

(cid:1) X=SET DEFAULT

(cid:1) Thiết lập giá trị mặc định cho khóa ngoại của các

record bị xóa (cập nhật) ở bản cha

(cid:1) X=NO ACTION

(cid:1) Không cho xóa (cập nhật) các record trong bảng cha

có liên quan đến record trong bảng con

24

LỆNH TẠO BẢNG

25

Xem kiểu dữ liệu và ràng buộc ở giáo trình

XÓA, CHỈNH SỬA BẢNG

26

XÓA, CHỈNH SỬA BẢNG (2)

27

NGÔN NGỮ THAO TÁC DỮ LIỆU

28

29

(cid:1) INSERT INTO: Chèn dữ liệu

INSERT INTO SanPham(MaSP, TenSP, DonGia, NgaySX)

VALUES (1, '8610', 100, ‘12/31/2000');

(cid:1) UPDATE: Cập nhật dữ liệu

UPDATE SanPham SET DonGia=123, NgaySX=‘12/31/2009'

WHERE MaSP > 100;

(cid:1) DELETE: Xóa dữ liệu

DELETE FROM SanPham WHERE MaSP=123;

THAO TÁC DỮ LIỆU ĐƠN GiẢN

30

(cid:1) Liệt kê các cột C1, C2, C3

(cid:1) SELECT C1, C2, C3 FROM T (cid:1) Đặt bí danh cho cột C2 là NAME

(cid:1) SELECT C1, C2 AS ‘NAME’, C3 FROM T

(cid:1) Sử dụng DISTINCT để loại bỏ các hàng trùng dữ liệu

(cid:1) SELECT DISTINCT C1, C2, C3 FROM T (cid:1) Sử dụng TOP để hạn chế số lượng bản ghi (cid:1) SELECT TOP (10) C1, C2, C3 FROM T (cid:1) Sử dụng dấu sao (*) để liệt kê tất cả các cột

(cid:1) SELECT * FROM T

(cid:1) Sắp xếp

(cid:1) SELECT * FROM T ORDER BY C2 DESC (cid:1) SELECT * FROM T ORDER BY C2 ASC

31

32

(cid:1) Sử dụng WHERE và điều kiện để chỉ ra các bản ghi cần thực hiện

cho các câu lệnh UPDATE, DELETE và SELECT (cid:1) SELECT * FROM T WHERE <điều kiện> (cid:1) DELETE FROM T WHERE <điều kiện> (cid:1) UPDATE T SET C2=3, C3=’12/31/2010’ WHERE <điều kiện>

(cid:1) Sau đây là một số ví dụ về biểu thức lọc WHERE

(cid:1) … WHERE C1=‘ABC’

(cid:1) Các bản ghi có giá trị của C1 là ‘ABC’

(cid:1) … WHERE C2 > 70

(cid:1) Các bản ghi có giá trị của C2 lớn hơn 70

(cid:1) … WHERE C2=‘X’ AND C3 <=’01/31/1995’

(cid:1) Các bản ghi có giá trị của C2 là ‘X’ và C3 trước 31-03-2010

33

(cid:1) Nhóm toán tử số học

(cid:1) +,-,*,/,% (cid:1) …WHERE 4+C2<=300

(cid:1) Nhóm toán tử lôgic (cid:1) AND, OR, NOT (cid:1) …WHERE NOT (C2>=10 AND C2<=20)

(cid:1) Nhóm toán tử so sánh (cid:1) >, <, =, >=, <=, <>, != (cid:1) …WHERE (C2<>10 OR C3<=‘1995-01-01’)

(cid:1) Nhóm toán tử đặc biệt

(cid:1) LIKE, BETWEEN, IN, IS NULL, IS NOT NULL

TRUY VẤN NÂNG CAO

34

(cid:1) Toán tử đặc biệt

(cid:1) LIKE và ký tự đại diện (%, _, [], [^]) (cid:1) IN (tập hợp hoặc truy vấn con) (cid:1) BETWEEN AND

(cid:1) Ví dụ

(cid:1) WHERE C LIKE ‘Ph[ạa][nm] %T_n%’ (cid:1) WHERE C IN (234, 789, 2, 5) (cid:1) WHERE C IN (SELECT TOP 10 C FROM T2) (cid:1) WHERE C BETWEEN 20 AND 3000

35

(cid:1) Cột C1 có chứa chuỗi ‘ABC’ ?

(cid:1)…WHERE C1 LIKE ‘%ABC%’ (cid:1) Cột C1 có kết thúc bởi chuỗi ‘ABC’ ? (cid:1)…WHERE C1 LIKE ‘%ABC’

(cid:1) Cột C1 có chứa một trong các ký tự ‘A’, ‘B’ hay ‘C’ ?

(cid:1)…WHERE C1 LIKE ‘%[ABC]%’

(cid:1) Cột C1 có chứa chuỗi ‘ABxC’, với x là ký tự bất kỳ ?

(cid:1)…WHERE C1 LIKE ‘%AB_C%’

36

(cid:1) Kiểm tra phạm vi số hoặc ngày

(cid:1) …WHERE C3 BETWEEN ’12/31/2000’ AND

’12/31/2010’

(cid:1) Kiểm tra tập hợp bất kỳ (số, ngày, chuỗi,…) (cid:1) …WHERE C1 IN (‘SV001’, ‘SV009’, ‘SV075’) (cid:1) …WHERE C2 NOT IN (100, 55, 65, 18, 22, 54) (cid:1) …WHERE C3 IN (’12/31/2000’, ’12/31/2005’,

’12/31/2010’) (cid:1) Kiểm tra giá trị null

(cid:1) …WHERE C3 IS NULL (cid:1) Kiểm tra giá trị không null

(cid:1) …WHERE C1 IS NOT NULL

HÀM THƯỜNG DÙNG

TỔNG HỢP

NGÀY THÁNG

XỬ LÝ CHUỖI

KHÁC

37

38

(cid:1) SUM(biểu thức) dùng để tính tổng

(cid:1) SELECT SUM(C2) AS ‘Tong’ FROM T

(cid:1) MIN(biểu thức) dùng để lấy giá trị nhỏ nhất (cid:1) SELECT MIN(C2) AS ‘NhoNhat’ FROM T (cid:1) MAX(biểu thức) dùng để lấy giá trị lớn nhất (cid:1) SELECT MAX(C2) AS ‘LonNhat’ FROM T

(cid:1) AVG(biểu thức) dùng để tính giá trị trung bình

(cid:1) SELECT AVG(C2) AS ‘TrungBinh’ FROM T (cid:1) COUNT(cột hoặc *) dùng để đếm số bản ghi

(cid:1) SELECT COUNT(*) AS ‘SoLuong’ FROM T

39

(cid:1) UPPER(chuỗi) đổi sang chữ hoa (cid:1) SELECT UPPER(C1) FROM T

(cid:1) LOWER(chuỗi) đổi sang chữ thường

(cid:1) SELECT C3 FROM T WHERE LOWER(C1)=‘xyz’

(cid:1) TRIM(chuỗi) cắt bỏ ký tự trắng 2 đầu chuỗi

(cid:1) SELECT TRIM(C1) FROM T

(cid:1) CONCAT(‘chuỗi 1’, ‘chuỗi 2’) ghép 2 chuỗi

(cid:1) SELECT CONCAT(‘SV:’, C1) AS MaSV FROM T

40

(cid:1) GETDATE() lấy ngày hiện tại

(cid:1) SELECT * FROM T WHERE C3 < GetDate()

(cid:1) Trích một phần của ngày-giờ

(cid:1) DATEPART(part, NgayGio) lấy năm-tháng-ngày (cid:1) Các hàm lấy ngày, tháng, năm, giờ, phút, giây

(cid:1) YEAR(ngày) lấy năm (cid:1) MONTH(ngày) lấy tháng (cid:1) HOUR(ngày) lấy giờ (cid:1) MINUTE(ngày) lấy phút (cid:1) SECOND(ngày) lấy giây (cid:1) SELECT SUM(C2) FROM T WHERE Year(C3)=2011

41

(cid:1) ISNULL(, ) (cid:1)SELECT C1, ISNULL(C2, 3) AS CC2 FROM T

(cid:1) CASE

(cid:1)WHEN <ĐK> THEN (cid:1)WHEN <ĐK> THEN (cid:1)ELSE

(cid:1) END

SELECT

NgaySinh AS ‘NGÀY SINH', Diem AS ‘’ĐIỂM, CASE WHEN Diem<5 THEN 'Rớt‘ ELSE ‘Đậu‘ END AS ‘KẾT QUẢ’

FROM SinhVien;

SELECT TOP (30)

CONCAT(MaSV, ' (', MaLH, ') ') AS 'MÃ SV', UPPER(HoTen) AS ‘HỌ VÀ TÊN', Diem AS ‘ĐIỂM', CASE WHEN Diem<5 THEN 'Yếu‘ WHEN Diem<7.5 THEN 'Trung Bình‘ ELSE 'Giỏi‘ END AS ‘XẾP LOẠI', NgaySinh AS 'NGÀY SINH'

FROM SinhVien ORDER BY Diem DESC

42

43

(cid:1) Sử dụng GROUP BY và các hàm tổng hợp để thống kê số liệu (tổng, số lượng, trung bình, nhỏ nhất, lớn nhất) theo nhóm

SELECT

MaLH AS “MÃ LỚP”, COUNT(MaSV) AS "SỐ LƯỢNG", MAX(Diem) AS "ĐIỂM CAO NHẤT", AVG(Diem) AS "ĐIỂM TRUNG BÌNH", MAX(NgaySinh) AS "SV TRẺ NHẤT"

Cột tự do (không sử dụng hàm tổng hợp) phải là cột nhóm (phải ở trong GROUP BY)

FROM SinhVien GROUP BY MaLH

SELECT

MaLH AS "MÃ LỚP", COUNT(MaSV) "SỐ LƯỢNG", MAX(Diem) "ĐIỂM CAO NHẤT", AVG(Diem) "ĐIỂM TRUNG BÌNH", MAX(NgaySinh) "SV TRẺ NHẤT"

HAVING <ĐK> là điều kiện nhóm trong khi đó WHERE <ĐK> là điều kiện chung (toàn bộ)

FROM SinhVien

WHERE MONTH(NgaySinh) IN (1, 3, 5)

GROUP BY MaLH

HAVING AVG(Diem) > 5.0

Chỉ hiện các nhóm thỏa điều kiện này

44

THỐNG KÊ – GROUP BY

45

SUM(), COUNT(), MIN() ,MAX (), AVG()

46

(cid:1) SELECT * FROM SinhVien WHERE MaLH IN (SELECT MaLH FROM LopHoc WHERE Year(NgayKG)=2000)

(cid:1) SELECT *, (SELECT COUNT(*) FROM SinhVien sv

WHERE lh.MaLH=sv.MaLH) AS SoHV FROM LopHoc lh

(cid:1) SELECT * FROM SinhVien WHERE DiemTB > (SELECT

AVG(DiemTB) FROM SinhVien)

(cid:1) SELECT *, (SELECT COUNT(MaSV) FROM SinhVien sv

WHERE sv.MaLH=lh.MaLH) AS SoLuong FROM LopHoc lh

SELECT T.*, P.* FROM Trai T XJOIN Phai P ON T.CX=P.CY

[INNER] JOIN

LEFT [OUTER] JOIN

RIGHT [OUTER] JOIN

Lấy các bản ghi của cả 2 bảng (Trai và Phai) có chung giá trị của cột kết nối (CX và CY)

Lấy tất cả các bản ghi của bảng Trai nối với các bản ghi của bảng Phai. NULL được điền vào các bản ghi của bảng Phai nếu không có giá trị để nối.

Lấy tất cả các bản ghi của bảng Phai nối với các bản ghi của bảng Trai. NULL được điền vào các bản ghi của bảng Trai nếu không có giá trị để nối.

47

Cột dùng để kết nối

ế h g g n ô h k n à B

n à b

SELECT * FROM Ban

g n ô h k ế h G

48SELECT * FROM Ghe

i

ị r t á g g n u h c

ó c g n ả b 2 ả c a ủ c i ố n t ế k t ộ C

•CÁCH I:

SELECT b.*, g.* FROM Ban b, Ghe g

WHERE b.BanSo=g.BanSo

•CÁCH II:

SELECT b.*, g.* FROM Ban b

49

INNER JOIN Ghe g ON b.BanSo=g.BanSo

c á c ả c t ấ t ( n à b c á c ả c t ấ T

) i á r t n ê b g n ả b a ủ c i h g n ả b

ế h g ó c g n ô h k 4 ố s n à B

SELECT b.*, g.* FROM Ban b LEFT OUTER JOIN Ghe g ON b.BanSo=g.BanSo

50

c á c ả c t ấ t ( ế h g c á c ả c t ấ T

) i ả h p n ê b n ả b a ủ c i h g n ả b

n à b ó c g n ô h k 7 à v 6 ố s ế h G

SELECT b.*, g.* FROM Ban b RIGHT OUTER JOIN Ghe g ON b.BanSo=g.BanSo

51

LAB GUIDE

52

(cid:1) SQL.LAB1: TẠO, SAO LƯU, PHỤC HỒI, XÓA CSDL (cid:1) SQL.LAB2: QUẢN LÝ BẢNG (cid:1) SQL.LAB3: THIẾT LẬP MỐI QUAN HỆ (cid:1) SQL.LAB4: SỬ DỤNG LỆNH TẠO BẢNG & QUAN HỆ (cid:1) SQL.LAB5: THAO TÁC DỮ LiỆU BẰNG LỆNH

BÀI TẬP

53

(cid:1) Thiết kế các CSDL như các trang 62 và 69