Trang 1 HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU Trang 2 Ngôn ngữ định nghĩa dữ liệu Tạo CSDL Trang 3 Tạo lập CSDL Các đối tượng của CSDL: Các bảng dữ liệu Tables Các chỉ mục Index Các khung nhì
Trang 1HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
SQL SERVER
Trang 2Ngôn ngữ định nghĩa dữ liệu
Tạo CSDL
Tạo và quản lý các bảng
Trang 3 Các thủ tục lưu trú (Store Procedures)
Các bẫy lỗi (Triggers)
Trang 6T ạo lập CSDL
Tạo CSDL bằng T_SQL
Database_name:
Duy nhất trong server
Tuân theo luật đặt định danh
Nếu mệnh đề này không có thì một log file sẽ
tụ động được tạo ra.
Trang 7MAXSIZE = 25MB,
FILEGROWTH = 5MB )
GO
Trang 8 Nhập tên cho DB cần tạo
Thay đổi một số tham số của DB
Trang 9FILEGROWTH = 5MB )
GO
ALTER DATABASE Test1
ADD FILE ( NAME = Test1dat2,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat2.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB )
GO
Trang 10T ạo lập CSDL
Xem thông tin về các CSDL
sp_helpdb [ [ @dbname= ] 'name' ]
Ví dụ 3
exec sp_helpdb qlnv
exec sp_helpdb
Trang 12Kiểu dữ liệu
System data types (Kiểu dữ liệu hệ thống)
User-defined data type
CLR types
Spatial data
Filestreams
Trang 13 char, varchar, text
Unicode character string
nchar, nvarchar, ntext
Binary character string
binary, varbinary, image
Others
sql_variant, timestamp, xml…
Trang 1414
Trang 17Tạo lập các bảng dữ liệu
Tạo bảng b ằng T_SQL :
CREATE TABLE [<tên CSDL> [<tên NSD> ]]<tên bảng> (
<tên cột 1> <kiểu dữ liệu 1> (kích thước 1),
<tên cột 2> <kiểu dữ liệu 2> (kích thước 2),
………… ,
<tên cột n> <kiểu dữ liệu n> (kích thước n)
) ;
Trang 20Tạo lập các bảng dữ liệu
Sửa đổi cấu trúc bảng (Thêm, xoá, sửa cột):
Trang 21Tạo lập các bảng dữ liệu
Xem thông tin bảng
sp_help [ [ @objname = ] name ]
Xoá bảng
DROP TABLE table_name
Trang 22Ngôn ngữ thao tác dữ liệu
Chèn thêm bản ghi vào bảng dữ liệu
Sửa nội dung trong bảng dữ liệu
Xóa các bản ghi trong bảng dữ liệu
Tìm kiếm thông tin
Trang 23Chèn thêm bản ghi vào bảng dữ liệu
INSERT INTO <table_name>[(<danh sách tên cột>)]
VALUES <danh sách giá trị>;
Chèn thêm một bản ghi vào cuối bảng
INSERT INTO <table_name> [(<danh sách tên cột>)]
SELECT
Chèn thêm một số bản ghi vào cuối bảng
Trang 24Sửa nội dung trong bảng dữ liệu
UPDATE <table_name>
SET <col_name1>=<exp1>
[, <col_name2> = <exp2>, ] [ WHERE <codition>(s)]
Cập nhật thông tin trên các cột col_name1,
col_name2, cho các bản ghi thỏa mãn điều kiện sau Where
Trang 25Xóa các bản ghi trong bảng dữ liệu
DELETE FROM <table_name>
[ WHERE <codition>(s)]
Xóa tất cả các bản ghi thỏa mãn điều kiện sau mệnh đề Where
TRUNCATE TABLE <tên bảng>
Xoá tất cả bản ghi trong bảng, lược đồ của bảng vẫn giữ nguyên
Trang 26Tìm kiếm thông tin
CSDL Quản lý thông tin về các nhân viên
PHONG( Maphong , Tenphong, Diachi, SDT)
Trang 27Tìm kiếm thông tin
Truy vấn tìm kiếm tổng quát:
SELECT *|{[DISTINCT] column|expression [alias], }
Trang 28Tìm kiếm thông tin
Trang 29Tìm kiếm không điều kiện
SELECT *|{[DISTINCT] column|expression [alias], }
Ví dụ 6 : Cho biết thông tin về các phòng ban?
SELECT Maphong,Tenphong, DiaChi, Tel
Trang 30Tìm kiếm không điều kiện
Ví dụ 7 : Cho biết danh sách thưởng của các nhân viên
bao gồm các thông tin mã nhân viên, họ tên, lương, và thưởng (bằng lương + 40% lương)?
Câu lệnh:
SELECT Manv, Hoten, Luong, 1.4*Luong as Thuong
FROM Nhanvien
S au Select có thể chứa một biểu thức Biểu thức và tên
trường đó có thể được đặt tên giả:<bt> [ As ] <tên> hoặc
<bt> <‘Tên’>
Biểu thức chứa giá trị NULL bt có giá trị NULL
Trang 31Tìm kiếm không điều kiện
Ví dụ 8 : Cho biết mã các ngoại ngữ mà các
nhân viên trong cơ quan đã học?
Distinct : đưa ra bản ghi đại diện của nhóm bản
ghi giống nhau
Trang 32Tìm kiếm không điều kiện
Ví dụ 9 : Đưa ra thông tin về 2 nhân viên đầu
tiên trong bảng nhân viên?
Trang 33Tìm kiếm có điều kiện
SELECT *|{[DISTINCT] column|expression [alias], } FROM table(s)
[WHERE condition(s)]
Các phép so sánh trong Condition(s): > , < , >= , <= , !=
hoặc <> , !> (không lớn hơn), !< (không nhỏ hơn)
Các phép logic trong Condition(s): and , or , not ,
between … and , like , in , is null
Trang 34Truy vấn có điều kiện
Ví dụ 10 : Cho biết danh sách các nhân viên làm việc ở phòng có mã số là HCA?
Trang 35Truy vấn có điều kiện
Ví dụ 11 : Cho biết mã nhân viên, họ tên, ngày sinh, lương của các nhân viên có lương nằm trong khoảng từ 2000000 đồng đến 3000000 đồng?
Trang 36Truy vấn có điều kiện
Trang 37Truy vấn có điều kiện
Ví dụ 12 : Cho biết mã nhân viên, họ tên, ngày sinh, lương của các nhân viên có lương không
nằm trong khoảng từ 1000000 đồng đến 2000000 đồng?
Select Manv, Hoten, Ngaysinh, Luong
From Nhanvien
Where Luong not between 1000000 and 2000000
Trang 38Truy vấn có điều kiện
Ví dụ 13 : Đưa ra danh sách các nhân viên chưa
có số điện thoại?
Select *
From Nhanvien
Where SDT is Null
Trang 39Truy vấn có điều kiện
Ví dụ 14 : Cho biết các nhân viên làm việc ở phòng có mã phòng là hca hoặc KDA?
Trang 40Truy vấn có điều kiện
Ví dụ 15 : Cho biết danh sách các nhân viên có tên bắt đầu bằng ‘N’?
Câu lệnh:
Select *
Where HoTen like ‘N%’
trong like dùng các kí hiệu thay thế: % (một xâu
kí tự bất kì), _ (một kí tự bất kì)
Like chỉ thao tác trên các trường kiểu xâu kí tự
Trang 41Truy vấn có sắp xếp dữ liệu
Thêm mệnh đề:
[ORDER BY column | expr | alias [ASC|DESC], ]
Ví dụ 16 : Hãy đưa ra danh sách nhân viên theo theo chiều tăng dần của lương?
Select Manv, Hoten, Ngaysinh, Luong
From NHANVIEN
Order By Luong Asc
Trang 43 Upper(s) : chuyển đổi xâu sang chữ hoa
Lower(s) : chuyển đổi xâu sang chữ thường
Trang 44Một số hàm thông dụng
Các hàm xử lý xâu kí tự (tiếp)
+ : phép toán ghép các xâu
Len(s) : trả về độ dài của xâu
LTRIM(s) : loại bỏ các kí tự trắng bên trái xâu
RTRIM(s) : loại bỏ các kí tự trắng bên phải xâu
Left(s, n) : trả về n kí tự (xâu con) phía bên trái nhất xâu s
Right(s, n) : trả về n kí tự (xâu con) phía bên phải nhất xâu s
Trang 45 Stuff (s, m, n, s1) : xóa xâu con n kí tự bắt đầu
từ vị trí thứ m trong xâu s và thay thế vào đó xâu s1
Reverse(s) : trả về xâu đảo ngược của xâu s
Trang 46Một số hàm thông dụng
Các hàm ngày tháng
Getdate() : trả về ngày tháng năm của hệ thống
DatePart(tham số datepart,date) : trả về giá trị nguyên
là thành phần của giá trị date
Các tham số của datepart:
Trang 47Một số hàm thông dụng
Các hàm ngày tháng (tiếp)
DateDiff(datepart, date1,date2) : trả về khoảng ngày, tháng, năm, giữa 2 ngày date1 và date2
Dateadd(datepart,n,date): thêm một số n datepart vào date
Day(d): trả về giá trị số nguyên của ngày
Month(d): trả về giá trị số nguyên của tháng
Year(d): trả về giá trị số nguyên của năm
Trang 49Một số hàm thông dụng
Các hàm chuyển đổi
Convert(datatype[(size) ], exp [,style])
Trang 54Truy vấn nhóm dữ liệu
NHANVIEN
Tính trung bình lương cho mỗi phòng trong bảng NHANVIEN.
2250000
2280000
2500000
Trang 58Truy vấn nhóm dữ liệu
Ch ú ý :
T ất cả các cột hoặc biểu thức sau SELECT nếu không nằm trong hàm mhóm dữ liệu đều phải xuất hiện sau GROUP BY
Các cột hoặc biểu thức xuất hiện sau GROUP BY không nhất thiết phải xuất hiện sau SELECT
Các điều kiện nhóm dữ liệu phải đặt sau HAVING (không đặt sau WHERE)
Trang 59Truy vấn có liên kết
Các loại truy vấn liên kết:
Liên kết trong (inner join)
Liên kết ngoài (outer join)
Liên kết chéo (cross join)
Tự liên kết (self_join)
Trang 60Truy vấn có liên kết
Truy vấn liên kết trong (inner join):
[alias], }
FROM table1, table2
WHERE table1.col1 <phép so sánh> table2.col2
[ and condition(s)]
Hoặc:
Trang 61của col1 liên kết được với ít nhất một giá trị
ở col2
Trang 63Truy vấn có liên kết
…
Trang 65Truy vấn có liên kết
Truy vấn liên kết ngoài:
SELECT *|{[DISTINCT] column|expression [alias], } FROM table1
LEFT| RIGHT| FULL OUTER JOIN table2
ON table1.col1 <phép so sánh> table2.col2
[WHERE condition(s)]
[ORDER BY column(s)];
Trang 66Truy vấn có liên kết
Ví dụ 24: Đưa ra danh sách tất cả các nhân viên cùng với thông tin về phòng ban của họ (kể cả các nhân viên chưa ở phòng nào)?
SELECT *
FROM Nhanvien nv
ON nv.maphong = p.maphong
Trả ra tất cả các bản ghi của nhanvien và
Trang 67Truy vấn có liên kết
Ví dụ 25: Đưa ra danh sách tất cả các phòng cùng với thông tin về các nhân viên của các phòng (kể cả các phòng chưa có nhân viên nào)?
Trang 69Truy vấn có liên kết
Truy vấn liên kết chéo (cross join):
SELECT *|{[DISTINCT] column|expression [alias], } FROM table1
CROSS JOIN table2
[WHEREcondition(s)]
[ORDER BY column(s)];
Trả ra tích đề các của hai bảng
Trang 71RÀNG BUỘC DỮ LIỆU (CONSTRAINS)
C ác thao tác làm biến đổi dữ liệu của bảng: cập nhật, thêm bản ghi, xóa bản ghi.
D ữ liệu của một số bảng khi có những thay đổi phải tuân theo một số quy luật nào đó nhằm đảm bảo dữ liệu đang tồn tại trong CSDL luôn nhất quán Các quy luật đó được gọi là các ràng buộc dữ liệu
Mỗi khi có một thao tác nào đó xảy ra làm thay đổi dữ liệu thì tất cả các ràng buộc sẽ được tự động được kiểm tra lại Nếu dữ liệu mới không thỏa mãn các ràng buộc thì SQL server sẽ trả về một thông báo lỗi
Trang 72RÀNG BUỘC DỮ LIỆU (CONSTRAINS)
C ác loại ràng buộc
được.
hệ giữa các bản ghi của hai bảng (mối quan hệ giữa khóa chính và khóa phụ).
DL của một loạt các bảng khác mà phải thực hiện theo một giải thuật (trigger, store procedure)
Trang 73RÀNG BUỘC DỮ LIỆU (CONSTRAINS)
a R àng buộc miền giá trị
Not null
Nếu trong khai báo thuộc tính có mệnh đề Not Null thì bắt buộc mỗi bản ghi tại thuộc tính đó phải có chứa giá trị (không được để trống)
Mặc định khi khai báo cột là Null
D efault <giá trị>: đặt giá trị mặc định cho thuộc tính
Nếu giá trị đưa vào khác Null thì giá trị mặc định bị thay thế, ngược lại thì giá trị mặc định không thay đổi
Trang 74RÀNG BUỘC DỮ LIỆU (CONSTRAINS)
Các cột dữ liệu tham gia vào quá trình tính toán nên cho giá trị mặc định
Các thuộc tính không chấp nhận giá trị Null nên đặt giá trị mặc định
Unique:
Các giá trị trong cột phải duy nhất
Primary key: thiết đặt khóa chính cho bảng
Check (<btL>):
giới hạn tập giá trị nhận được của một thuộc tính
Trang 75RÀNG BUỘC DỮ LIỆU (CONSTRAINS)
CHECK(trinh_do IN (‘Đại học’, ‘Thạc sĩ’, “Tiến sĩ”))
Constrains PK_GV primary key(Magv, hoten)
)
Trang 76RÀNG BUỘC DỮ LIỆU (CONSTRAINS)
Thêm ràng buộc vào bảng đã tồn tại:
ALTER TABLE <tên bảng>
Ví dụ:
ALTER TABLE giang_vien
ADD CONSTRAINT PK PRIMARY KEY(Magv)
Trang 77RÀNG BUỘC DỮ LIỆU (CONSTRAINS)
Loại bỏ ràng buộc trong bảng:
ALTER TABLE <tên bảng>
Ví dụ:
ALTER TABLE giang_vien
Trang 78RÀNG BUỘC DỮ LIỆU (CONSTRAINS)
b R àng buộc toàn vẹn tham chiếu: dùng để thiết lập mối quan hệ giữa hai bảng
[CONSTRAINT <tên ràng buộc>]
[FOREIGN KEY <danh sách tên cột>]
REFERENCES <tên bảng được tham chiếu> [(<khóa dự tuyển>)]
[ON UPDATE {CASCADE| NO ACTION}]
[ON DELETE {CASCADE| NO ACTION}]
hoặc được cập nhật theo bản ghi ở bảng được tham chiếu
Trang 79RÀNG BUỘC DỮ LIỆU (CONSTRAINS)
V í dụ:
CREATE TABLE giang_vien(
Magv char(5) PRIMARY KEY,
Ho_ten varchar(35) NOT NULL,
Ngay_sinh datetime,
Gioi_tinh vachar(3) DEFAULT ‘Nam’,
Ma_khoa char(2) REFERENCES KHOA(ma_khoa), Luong bigint,
Trinh_do varchar(15) NOT NULL
CHECK(trinh_do IN (“Đại học”, “Thạc sĩ”, “Tiến sĩ”)) )
Trang 80DECLARE @x2 int, @a float
DECLARE @Tong_gia_tri numeric;
Gán giá trị cho biến:
SET <tên biến> = <biểu thức>
Trang 81VII THỦ TỤC THƯỜNG TRÚ
(STORE PROCEDURE)
In giá trị biến:
Print(‘Tổng giá trị các chuyến hàng:’ + str(@Tong_gia_tri));
Chú ý: các biến khai báo trong cùng một bó chỉ có tác dụng trong bó đó.
Trang 82 Khi SP được chạy lần đầu tiên nó sẽ được biên dịch
qua 5 bước và sinh ra một mô hình truy vấn Mô hình này sẽ được đặt trong một CSDL của SQL server, lần sau chạy lại thủ tục sẽ không phải dịch lại nữa.
Trang 83VII THỦ TỤC THƯỜNG TRÚ
(STORE PROCEDURE)
N ăm bước biên dịch thủ tục:
Thủ tục được phân tích ra thành nhiều phần
Kiểm tra sự tồn tại của các đối tượng (view, table, …) mà thủ tục tham chiếu tới
của thủ tục vào bảng syscomments
Sinh ra mô hình truy vấn của thủ tục và lưu vào bảng sysprocedure
được tối ưu thành một kế hoạch thủ tục và chạy tiết kiệm thời gian tái phân tích, biên dịch cây truy vấn mỗi khi chạy thủ tục
Trang 84VII THỦ TỤC THƯỜNG TRÚ
(STORE PROCEDURE)
Trong m ột phiên làm việc, nếu SP được thực hiện, nó
sẽ được lưu trữ vào vùng nhớ đệm Những lần sau nếu
SP được gọi thực hiện lại thì nó sẽ được đọc trực tiếp
ra từ vùng nhớ đệm nâng cao hiệu suất chạy truy vấn.
Trang 85VII THỦ TỤC THƯỜNG TRÚ
(STORE PROCEDURE)
C ú pháp lệnh tạo SP:
CREATE PROC[EDURE] <tên SP>
[@ <tên tham số 1> <kiểu DL>
=<giá trị>: gán giá trị ban đầu cho tham số
ra bên ngoài thủ tục
Ví dụ
Trang 87VII THỦ TỤC THƯỜNG TRÚ
(STORE PROCEDURE)
Sử dụng tùy chọn RECOMPILE trong câu lệnh CREATE
PRO:
Thủ tục sẽ được biên dịch lại từ đầu mỗi khi thực hiện
tối ưu lại
Sử dụng tùy chọn RECOMPILE trong câu lệnh EXEC
Thủ tục sẽ được biên dịch lại trong lần thực thi đó và lưu lại
kế hoạch thực thi mới của nó vào vùng nhớ đệm
Biên dịch lại tất cả các thủ tục của bảng:
EXEC sp_recompile <tên bảng>
Trang 88VIII HÀM CỦA NSD
(USER DEFINED FUNCTIONS-UDFs)
- Giá trị các tham số không
được truyền ra ngoài
- Trả ra một giá trị bằng mệnh
đề RETURN
- Có thể trả về một giá trị vô
hướng hoặc một bảng dữ liệu
- Có thể đưa giá trị của tham
số ra ngoài bằng thuộc tính OUTPUT
- Chỉ trả về kiểu DL giá trị kiểu nguyên
Trang 89VIII HÀM CỦA NSD
(USER DEFINED FUNCTIONS-UDFs)
CREATE FUNCTION <tên hàm>
([@<tên tham số> <kiểu DL vô hướng> [= <giá trị>] [, ]])RETURNS <kiểu vô hướng>|<table>