hỆ quẢn trỊ cƠ sỞ dỮ liỆu
DESCRIPTION
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU. SQL SERVER. Ngôn ngữ định nghĩa dữ liệu. Tạo CSDL Tạo v à quản lý các bảng. 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ìn (Views) Các thủ tục lưu trú (Store Procedures) Các bẫy lỗi (Triggers). - PowerPoint PPT PresentationTRANSCRIPT
Ngôn ngữ định nghĩa dữ liệuNgôn ngữ định nghĩa dữ liệu
Tạo CSDLTạo CSDL
Tạo vTạo và quản lý các à quản lý các bảngbảng
TTạo lập CSDLạo lập CSDL
Các đối tượng của CSDL:Các đối tượng của CSDL: Các bảng dữ liệu (Tables)Các bảng dữ liệu (Tables) Các chỉ mục (Index)Các chỉ mục (Index) Các khung nhìn (Views)Các khung nhìn (Views) Các thủ tục lưu trú (Store Procedures)Các thủ tục lưu trú (Store Procedures) Các bẫy lỗi (Triggers)Các bẫy lỗi (Triggers)
TTạo lập CSDLạo lập CSDL
Các thông tin cần xác định khi tạo Các thông tin cần xác định khi tạo CSDL:CSDL: Tên CSDLTên CSDL Kích thướcKích thước Tệp, nhóm tệp lưu trữ CSDLTệp, nhóm tệp lưu trữ CSDL
TTạo lập CSDLạo lập CSDL Tạo CSDL bằng T_SQLTạo CSDL bằng T_SQL
CREATE DATABASECREATE DATABASE <Database_name> <Database_name> [ [ ON ON [ < filespec > [ ,... [ < filespec > [ ,...n n ] ] ] ] [ , < filegroup > [ ,... [ , < filegroup > [ ,...n n ] ] ] ] ] ] [ [ LOG ONLOG ON { < filespec > [ ,... { < filespec > [ ,...n n ] } ] ] } ]
--------------< filespec > ::= < filespec > ::= [ [ PRIMARYPRIMARY ] ]
( [ ( [ NAMENAME = = logical_file_name logical_file_name , ] , ] FILENAMEFILENAME = ' = 'os_file_nameos_file_name' ' [ , [ , SIZE SIZE = = size size ] ] [ , [ , MAXSIZEMAXSIZE = { = { max_sizemax_size | UNLIMITED } ] | UNLIMITED } ] [ , [ , FILEGROWTHFILEGROWTH = = growth_increment growth_increment ] ) [ ,...] ) [ ,...nn ] ]
----------------< filegroup > ::= < filegroup > ::= FILEGROUPFILEGROUP filegroup_namefilegroup_name < filespec > [ ,... < filespec > [ ,...nn ] ]
TTạo lập CSDLạo lập CSDL
Tạo CSDL bằng T_SQLTạo CSDL bằng T_SQL Database_nameDatabase_name: :
Duy nhất trong serverDuy nhất trong server Tuân theo luật đặt định danhTuân theo luật đặt định danh Độ dài lớn nhất là 128 kí tựĐộ dài lớn nhất là 128 kí tự
ON …ON … Xác định các tệp (primary file, secondary file) Xác định các tệp (primary file, secondary file)
và nhóm tệp lưu trữ CSDLvà nhóm tệp lưu trữ CSDL LOG ON …LOG ON …
Xác định các log fileXác định các log file Nếu mệnh đề này không có thì một log file sẽ Nếu mệnh đề này không có thì một log file sẽ
tụ động được tạo ra.tụ động được tạo ra.
TTạo lập CSDLạo lập CSDL Tạo CSDL bằng T_SQLTạo CSDL bằng T_SQL
Ví dụ 1Ví dụ 1: tạo CSDL có xác định tệp primary và tệp transaction log:: tạo CSDL có xác định tệp primary và tệp transaction log:USE master USE master GO GO CREATE DATABASE qlnv CREATE DATABASE qlnv ON ON ( NAME = qlnv_dat, ( NAME = qlnv_dat,
FILENAME = 'c:\program files\microsoft sql server\mssql\data\qlnvdat.mdf', FILENAME = 'c:\program files\microsoft sql server\mssql\data\qlnvdat.mdf', SIZE = 10, SIZE = 10, MAXSIZE = 50, MAXSIZE = 50, FILEGROWTH = 5 ) FILEGROWTH = 5 ) LOG ON LOG ON
( NAME = qlnv_log,( NAME = qlnv_log, FILENAME = 'c:\program files\microsoft sql server\mssql\data\qlnvlog.ldf', FILENAME = 'c:\program files\microsoft sql server\mssql\data\qlnvlog.ldf', SIZE = 5MB, SIZE = 5MB, MAXSIZE = 25MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) FILEGROWTH = 5MB ) GOGO
TTạo lập CSDLạo lập CSDL
Tạo CSDL bằng Enterprise Manager Tạo CSDL bằng Enterprise Manager (EM)(EM) Chọn server group và mở rộngChọn server group và mở rộng Nhấp chuột phải trên nút Database/ chọn Nhấp chuột phải trên nút Database/ chọn
New Database => Xuất hiện cửa sổ New New Database => Xuất hiện cửa sổ New DatabaseDatabase
Nhập tên cho DB cần tạoNhập tên cho DB cần tạo Thay đổi một số tham số của DBThay đổi một số tham số của DB
TTạo lập CSDLạo lập CSDL Chỉnh sửa DBChỉnh sửa DB
ALTER DATABASEALTER DATABASE Ví dụ 2Ví dụ 2 USE master USE master GO GO CREATE DATABASE Test1 CREATE DATABASE Test1 ON ( NAME = Test1dat1, ON ( NAME = Test1dat1, FILENAME = FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat1 . ndf','c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat1 . ndf',
SIZE = 5MB, SIZE = 5MB, MAXSIZE = 100MB, MAXSIZE = 100MB, FILEGROWTH = 5MB ) FILEGROWTH = 5MB ) GO GO
ALTER DATABASE Test1 ALTER DATABASE Test1 ADD FILE ( NAME = Test1dat2, ADD FILE ( NAME = Test1dat2, FILENAME = 'c:\Program Files\Microsoft SQL FILENAME = 'c:\Program Files\Microsoft SQL
Server\MSSQL\Data\t1dat2.ndf', Server\MSSQL\Data\t1dat2.ndf', SIZE = 5MB, SIZE = 5MB, MAXSIZE = 100MB, MAXSIZE = 100MB, FILEGROWTH = 5MB ) FILEGROWTH = 5MB ) GOGO
TTạo lập CSDLạo lập CSDL
Xem thông tin về các CSDLXem thông tin về các CSDL sp_helpdb [ [ @dbname= ] 'sp_helpdb [ [ @dbname= ] 'namename' ]' ] Ví dụ 3Ví dụ 3exec sp_helpdb qlnvexec sp_helpdb qlnv exec sp_helpdb exec sp_helpdb
TTạo lập CSDLạo lập CSDL
Xoá CSDLXoá CSDL DROP DATABASE DROP DATABASE database_namedatabase_name [ ,… [ ,… ]] Ví dụ 4Ví dụ 4DROP DATABASE qlnv DROP DATABASE qlnv
Kiểu dữ liệuKiểu dữ liệu System data types (Kiểu dữ liệu hệ thống)System data types (Kiểu dữ liệu hệ thống) User-defined data type User-defined data type
CLR typesCLR types Spatial dataSpatial data Filestreams Filestreams XMLXML
Kiểu dữ liệu hệ thốngKiểu dữ liệu hệ thống
Exact numericExact numeric bit, tinyint, smallint, int, bigint, numeric, decimal, smallmoney, moneybit, tinyint, smallint, int, bigint, numeric, decimal, smallmoney, money
Approximate numeric Approximate numeric float, Realfloat, Real
Date & TimeDate & Time datetime, smalldatetimedatetime, smalldatetime
Character stringCharacter string char, varchar, textchar, varchar, text
Unicode character string Unicode character string nchar, nvarchar, ntextnchar, nvarchar, ntext
Binary character string Binary character string binary, varbinary, imagebinary, varbinary, image
Others Others sql_variant, timestamp, xml…..sql_variant, timestamp, xml…..
14
15
16
TTạo lập các bảng dữ liệuạo lập các bảng dữ liệu
Tạo bảng bTạo bảng bằng T_SQLằ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)) ;
TTạo lập các bảng dữ liệuạo lập các bảng dữ liệu
Tạo bảng bTạo bảng bằng T_SQL- ằng T_SQL- VVí dụ 5í dụ 5
CREATE TABLE qlnv.nhan_vien (manv Smallint,ho_ten VARCHAR(25),ngay_sinh DATETIME,gioi_tinh CHAR(3),ma_dv CHAR(2),luong Int);
TTạo lập các bảng dữ liệuạo lập các bảng dữ liệu
Tạo bảng bTạo bảng bằng EMằng EM ChChọn CSDLọn CSDL Chọn mục TablesChọn mục Tables Nhấp chuột phải trên Tables và chọn New Nhấp chuột phải trên Tables và chọn New
TablesTables
TTạo lập các bảng dữ liệuạo lập các bảng dữ liệu
Sửa đổi cấu trúc bảng (ThSửa đổi cấu trúc bảng (Thêm, xoá, sửa cột)êm, xoá, sửa cột)::
TTạo lập các bảng dữ liệuạo lập các bảng dữ liệu
Xem thông tin bảngXem thông tin bảng sp_help [ [ @objname = ] sp_help [ [ @objname = ] name name ]]
Xoá bảngXoá bảng DROP TABLE DROP TABLE table_nametable_name
Ngôn ngữ thao tác dữ liệuNgôn ngữ thao tác dữ liệu
Chèn thêm bản ghi vào bảng dữ liệuChèn thêm bản ghi vào bảng dữ liệu Sửa nội dung trong bảng dữ liệuSửa nội dung trong bảng dữ liệu Xóa các bản ghi trong bảng dữ liệuXóa các bản ghi trong bảng dữ liệu Tìm kiếm thông tinTìm kiếm thông tin
Chèn thêm bản ghi vào bảng dữ liệuChèn thêm bản ghi vào bảng dữ liệu
INSERT INTOINSERT INTO <table_name>[(<danh sách tên cột>)]<table_name>[(<danh sách tên cột>)] VALUESVALUES <danh sách giá trị>; <danh sách giá trị>; Chèn thêm một bản ghi vào cuối bảngChèn thêm một bản ghi vào cuối bảng
INSERT INTOINSERT INTO <table_name> [(<danh sách tên cột>)]<table_name> [(<danh sách tên cột>)] SELECT SELECT . . . . . . Chèn thêm một số bản ghi vào cuối bảng Chèn thêm một số bản ghi vào cuối bảng
Sửa nội dung trong bảng dữ liệuSửa nội dung trong bảng dữ liệu
UPDATE UPDATE <table_name><table_name>SETSET <col_name1>=<exp1> <col_name1>=<exp1>
[, <col_name2> = <exp2>, . . . ][, <col_name2> = <exp2>, . . . ][[WHEREWHERE <codition>(s)]<codition>(s)]
Cập nhật thông tin trên các cột col_name1, 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 col_name2, . . . cho các bản ghi thỏa mãn điều kiện sau Wherekiện sau Where
Xóa các bản ghi trong bảng dữ liệuXóa các bản ghi trong bảng dữ liệu
DELETE FROMDELETE FROM <table_name><table_name>[[WHEREWHERE <codition>(s)]<codition>(s)]
Xóa tất cả các bản ghi thỏa mãn điều kiện sau Xóa tất cả các bản ghi thỏa mãn điều kiện sau mệnh đề Wheremệnh đề Where
TRUNCATE TABLETRUNCATE TABLE <tên bảng><tên bảng>
Xoá tất cả bản ghi trong bảng, lược đồ của bảng Xoá tất cả bản ghi trong bảng, lược đồ của bảng vẫn giữ nguyênvẫn giữ nguyên
Tìm kiếm thông tinTìm kiếm thông tin
CSDL Quản lý thông tin về các nhân viênCSDL Quản lý thông tin về các nhân viên PHONG(PHONG(MaphongMaphong, Tenphong, Diachi, SDT), Tenphong, Diachi, SDT) DMNN(Mann, Tennn)DMNN(Mann, Tennn) NHANVIEN(NHANVIEN(ManvManv, Hoten, Ngaysinh, Gioitinh, Luong, , Hoten, Ngaysinh, Gioitinh, Luong,
Sdt, Sdt, Maphong)Maphong) TDNN(TDNN(Manv, MannManv, Mann, Tdo), Tdo)
Tìm kiếm thông tinTìm kiếm thông tin
Truy vấn tTruy vấn tìm kiếm ìm kiếm tổng quát:tổng quát:SELECT *|{[DISTINCT] column|expression [alias],...}FROM table(s)[WHERE condition(s)]
[ORDER BY {column, expr, alias} [ASC|DESC]];
Nghĩa là:Nghĩa là:LấyLấy <những cái gì?><những cái gì?>Từ Từ <những quan hệ nào?><những quan hệ nào?>[[Thoả mãnThoả mãn <điều kiện gì?>]<điều kiện gì?>]
[[Sắp xếpSắp xếp <theo thứ tự nào?<theo thứ tự nào?>]>]
Tìm kiếm thông tinTìm kiếm thông tin
hoặc: SELECTcolumn,group_function(column)
FROM tables[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];
Tìm kiếm không điều kiệnTìm kiếm không điều kiện
SELECT *|{[DISTINCT] column|expression [alias],...}FROM table(s)
Ví dụ 6Ví dụ 6: : Cho biết thông tin về các phòng ban?Cho biết thông tin về các phòng ban? SELECTSELECT Maphong,Tenphong, DiaChi, Tel Maphong,Tenphong, DiaChi, Tel FROMFROM Phong Phong
hoặc:hoặc:SELECTSELECT * * FROMFROM Phong Phong
* * : : thay thế thay thế tập tên cộttập tên cột của một bảng của một bảng
Tìm kiếm không điều kiệnTìm kiếm không điều kiện
Ví dụ 7Ví dụ 7: : Cho biết danh sách thưởng của các nhân viên 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à 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)?thưởng (bằng lương + 40% lương)?
Câu lệnhCâu lệnh: : SELECTSELECT Manv, Hoten, Luong, 1.4*Luong Manv, Hoten, Luong, 1.4*Luong as as ThuongThuongFROM FROM Nhanvien Nhanvien
SSau au SelectSelect có thể chứa một có thể chứa một biểu thức.biểu thức. Biểu thức và tên Biểu thức và tên trường đó có thể được đặt tên giả:<bt> [trường đó có thể được đặt tên giả:<bt> [AsAs] <tên> hoặc ] <tên> hoặc <bt> <‘Tên’><bt> <‘Tên’>
Biểu thức chứa giá trị Biểu thức chứa giá trị NULLNULL bt có giá trị bt có giá trị NULLNULL
Tìm kiếm không điều kiệnTìm kiếm không điều kiện
Ví dụ 8Ví dụ 8: : Cho biết Cho biết mãmã các ngoại ngữ mà các các ngoại ngữ mà các nhân viên trong cơ quan nhân viên trong cơ quan đãđã học? học?
Câu lệnh:Câu lệnh:SelectSelect Mann Mann
FromFrom TDNN TDNN hoặchoặc
SelectSelect DistinctDistinct Mann MannFromFrom TDNN TDNN
DistinctDistinct:: đưa ra bản ghi đại diện của nhóm bản đưa ra bản ghi đại diện của nhóm bản ghi ghi giống nhaugiống nhau
Tìm kiếm không điều kiệnTìm kiếm không điều kiện
Ví dụ 9Ví dụ 9: : Đưa ra thông tin về 2 nhân viên đầu Đưa ra thông tin về 2 nhân viên đầu tiên trong bảng nhân viên? tiên trong bảng nhân viên?
Câu lệnh:Câu lệnh:SelectSelect top 2* top 2*
FromFrom NHANVIEN NHANVIEN
top ntop n:: đưa ra bản ghi n bản ghi đầu tiên đưa ra bản ghi n bản ghi đầu tiên
Tìm kiếm có điều kiệnTì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 Các phép so sánh trong Condition(s)Condition(s): : >>, , <<, , >=>=, , <=<=, , !=!= hoặc hoặc <><>, , !>!> (không lớn hơn), (không lớn hơn), !<!< (không nhỏ hơn) (không nhỏ hơn) Các phép logic trong Các phép logic trong Condition(s): Condition(s): andand, , oror, , notnot, , betweenbetween……andand, , likelike, , inin, , is nullis null
Truy vấn có điều kiệnTruy vấn có điều kiện
Ví dụ 10Ví dụ 10: : Cho biết danh sách các nhân viên làm Cho biết danh sách các nhân viên làm việc ở phòng có mã số là HCA?việc ở phòng có mã số là HCA?Câu lệnh:Câu lệnh:
SelectSelect **FromFrom NhanvienNhanvienWhereWhere Maphong = ‘HCA’ Maphong = ‘HCA’
Truy vấn có điều kiệnTruy vấn có điều kiện
Ví dụ 11Ví dụ 11: : Cho biết mã nhân viên, họ tên, ngày 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 sinh, lương của các nhân viên có lương nằm trong khoảng từ 2000000 đồng đến 3000000 trong khoảng từ 2000000 đồng đến 3000000 đồngđồng??
Câu lệnh:Câu lệnh:SelectSelect Manv, Hoten, Ngaysinh, Luong Manv, Hoten, Ngaysinh, LuongFromFrom Nhanvien Nhanvien
WhereWhere (Luong (Luong 2000000) 2000000) and (Luong and (Luong 3000000) 3000000)
Truy vấn có điều kiệnTruy vấn có điều kiện
hoặc:hoặc: SelectSelect Manv, Hoten, Ngaysinh, Luong Manv, Hoten, Ngaysinh, Luong
FromFrom Nhanvien Nhanvien WhereWhere Luong Luong BetweenBetween 2000000 2000000 and and 3000000 3000000
Truy vấn có điều kiệnTruy vấn có điều kiện
Ví dụ 12Ví dụ 12: : Cho biết mã nhân viên, họ tên, ngày 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 sinh, lương của các nhân viên có lương khôngkhông nằm trong khoảng từ 1000000 đồng đến 2000000 nằm trong khoảng từ 1000000 đồng đến 2000000 đồngđồng??
SelectSelect Manv, Hoten, Ngaysinh, Luong Manv, Hoten, Ngaysinh, Luong FromFrom Nhanvien Nhanvien WhereWhere Luong Luong not betweennot between 1000000 1000000 and and 2000000 2000000
Truy vấn có điều kiệnTruy vấn có điều kiện
Ví dụ 13Ví dụ 13: : Đưa ra danh sách các nhân viên chưa Đưa ra danh sách các nhân viên chưa có số điện thoại?có số điện thoại?
SelectSelect * * FromFrom Nhanvien NhanvienWhereWhere SDT SDT is is NullNull
Truy vấn có điều kiệnTruy vấn có điều kiện
Ví dụ 14Ví dụ 14: : Cho biết các nhân viên làm việc ở Cho biết các nhân viên làm việc ở phòng có mã phòng là hca hoặc KDA?phòng có mã phòng là hca hoặc KDA?
Câu lệnh:Câu lệnh:SelectSelect **FromFrom NhanvienNhanvienWhereWhere Maphong = ‘P1’ or Maphong = ‘P2’Maphong = ‘P1’ or Maphong = ‘P2’
hoặc:hoặc: SelectSelect **FromFrom NhanvienNhanvienWhereWhere Maphong Maphong inin (‘P1’, ‘P2’) (‘P1’, ‘P2’)
Truy vấn có điều kiệnTruy vấn có điều kiện
Ví dụ 15Ví dụ 15: : Cho biết danh sách các nhân viên có Cho biết danh sách các nhân viên có tên bắt đầu bằng ‘N’?tên bắt đầu bằng ‘N’?
Câu lệnh:Câu lệnh:SelectSelect **FromFrom NhanvienNhanvienWhereWhere HoTen like ‘N%’ HoTen like ‘N%’
trong trong like like dùng các kí hiệu thay thế: dùng các kí hiệu thay thế: %% (một xâu (một xâu kí tự bất kì), kí tự bất kì), __ (một kí tự bất kì) (một kí tự bất kì)
LikeLike chỉ thao tác trên các trường kiểu chỉ thao tác trên các trường kiểu xâu kí tựxâu kí tự
Truy vấn có sắp xếp dữ liệuTruy vấn có sắp xếp dữ liệu
Thêm mệnh đề:Thêm mệnh đề:[ORDER BY column | expr | alias [ASC|DESC], . . .]
Ví dụ 16Ví dụ 16: : Hãy đưa ra danh sách nhân viên theo theo Hãy đưa ra danh sách nhân viên theo theo chiều tăng dần của lương?chiều tăng dần của lương?
SelectSelect Manv, Hoten, Ngaysinh, Luong Manv, Hoten, Ngaysinh, Luong FromFrom NHANVIEN NHANVIENOrder ByOrder By Luong Asc Luong Asc
Truy vấn có sắp xếp dữ liệuTruy vấn có sắp xếp dữ liệu
Ví dụ 17:Ví dụ 17: Hãy đưa ra danh sách nhân viên theo Hãy đưa ra danh sách nhân viên theo theo chiều tăng dần của lương, nếu 2 nhân viên theo chiều tăng dần của lương, nếu 2 nhân viên có cùng lương thì sắp xếp theo ngày sinh giảm có cùng lương thì sắp xếp theo ngày sinh giảm dần?dần? SelectSelect Manv, Hoten, Ngaysinh, Luong Manv, Hoten, Ngaysinh, Luong FromFrom NHANVIEN NHANVIENOrder ByOrder By Luong Asc, Ngaysinh Desc Luong Asc, Ngaysinh Desc
thứ tự sắp xếp từ thứ tự sắp xếp từ tráitrái phảiphải
Một số hàm thông dụngMột số hàm thông dụng
Các hàm xử lý xâu kí tựCác hàm xử lý xâu kí tự ASCII(s)ASCII(s): trả về giá trị mã ASCII của kí tự bên : trả về giá trị mã ASCII của kí tự bên
nhất trái của xâunhất trái của xâu Char(n)Char(n): trả ra kí tự thứ n trong bảng mã : trả ra kí tự thứ n trong bảng mã
ASCIIASCII Upper(s)Upper(s): chuyển đổi xâu sang chữ hoa: chuyển đổi xâu sang chữ hoa Lower(s)Lower(s): chuyển đổi xâu sang chữ thường : chuyển đổi xâu sang chữ thường
Một số hàm thông dụngMột số hàm thông dụng
Các hàm xử lý xâu kí tự (tiếp)Các hàm xử lý xâu kí tự (tiếp) ++: phép toán ghép các xâu: phép toán ghép các xâu Len(s)Len(s): trả về độ dài của xâu: trả về độ dài của xâu LTRIM(s)LTRIM(s): loại bỏ các kí tự trắng bên trái xâu: loại bỏ các kí tự trắng bên trái xâu RTRIM(s)RTRIM(s): loại bỏ các kí tự trắng bên phải xâu: loại bỏ các kí tự trắng bên phải xâu Left(s, n)Left(s, n): trả về n kí tự (xâu con) phía bên : trả về n kí tự (xâu con) phía bên
trái nhất xâu strái nhất xâu s Right(s, n)Right(s, n): trả về n kí tự (xâu con) phía bên : trả về n kí tự (xâu con) phía bên
phải nhất xâu sphải nhất xâu s
Một số hàm thông dụngMột số hàm thông dụng
Các hàm xử lý xâu kí tự (tiếp)Các hàm xử lý xâu kí tự (tiếp) SubString(s, m ,n)SubString(s, m ,n): trả về xâu con dài n kí tự : trả về xâu con dài n kí tự
của xâu s bắt đầu từ ví trí thứ mcủa xâu s bắt đầu từ ví trí thứ m Replace(s, s1, s2)Replace(s, s1, s2): thay thế các xâu con s1 xuất : thay thế các xâu con s1 xuất
hiện trong xâu s bằng xâu s2hiện trong xâu s bằng xâu s2 Stuff (s, m, n, s1)Stuff (s, m, n, s1): xóa xâu con n kí tự bắt đầu: 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 đó từ vị trí thứ m trong xâu s và thay thế vào đó xâu s1xâu s1
Reverse(s)Reverse(s): trả về xâu đảo ngược của xâu s: trả về xâu đảo ngược của xâu s
Một số hàm thông dụngMột số hàm thông dụng
Các hàm ngày thángCác hàm ngày tháng Getdate()Getdate(): trả về ngày tháng năm của hệ thống: trả về ngày tháng năm của hệ thống DatePart(tham số datepart,date)DatePart(tham số datepart,date): trả về gi: trả về giá trị nguyên á trị nguyên
làlà th thành ành phần cphần củaủa gi giá trị á trị date date Các tham số của datepart:Các tham số của datepart:
qq,qqq,q :: QuarterQuarter yy, yyyyyy, yyyy : : YearYear mm, mmm, m :: MonthMonth dy,ydy,y :: DayofyearDayofyear dd,ddd,d :: DayDay wk, wwwk, ww :: WeekWeek dwdw :: WeekdayWeekday hhhh : : HourHour mi,nmi,n :: MinuteMinute ss,sss,s :: SecondSecond msms :: MilisecondMilisecond
Một số hàm thông dụngMột số hàm thông dụng
Các hàm ngày tháng (tiếp)Các hàm ngày tháng (tiếp) DateDiff(datepart, date1,date2)DateDiff(datepart, date1,date2): trả về khoảng : trả về khoảng
ngày, tháng, năm, . . . giữa 2 ngày date1 và ngày, tháng, năm, . . . giữa 2 ngày date1 và date2date2
Dateadd(datepart,n,date): Dateadd(datepart,n,date): ththêm một số n datepart êm một số n datepart vào datevào date
Day(d): Day(d): trtrả về giá trị số nguyên của ngàyả về giá trị số nguyên của ngày Month(d): Month(d): trtrả về giá trị số nguyên của thángả về giá trị số nguyên của tháng Year(d): Year(d): trtrả về giá trị số nguyên của nămả về giá trị số nguyên của năm
Một số hàm thông dụngMột số hàm thông dụng
Các hàm toán học (tiếp)Các hàm toán học (tiếp) Square(n)Square(n) Sqrt(n)Sqrt(n) Round(f,n)Round(f,n) Power(f,n)Power(f,n) Pi()Pi() Sign(f)Sign(f)
Một số hàm thông dụngMột số hàm thông dụng
Các hàm chuyển đổi Các hàm chuyển đổi Convert(datatype[(size) ], exp [,style])Convert(datatype[(size) ], exp [,style])
Một số hàm thông dụngMột số hàm thông dụng
Các hàm nhCác hàm nhóm dữ liệuóm dữ liệu::Count ([All | Distinct] Biểu thức):Count ([All | Distinct] Biểu thức): Hàm đếm số Hàm đếm số
lượng các bộ thỏa mãn điều kiệnlượng các bộ thỏa mãn điều kiệnMax (Biểu thức), Min (Biểu thứcMax (Biểu thức), Min (Biểu thức):): Hàm tính giá Hàm tính giá
trị lớn nhất, nhỏ nhất của tập giá trị được tính theo trị lớn nhất, nhỏ nhất của tập giá trị được tính theo biểu thứcbiểu thức
Một số hàm thông dụngMột số hàm thông dụng
Sum (Sum ([All | Distinct] [All | Distinct] Biểu thức kiểu số): Biểu thức kiểu số): Hàm Hàm tính tổng của tập giá trị được tính theo biểu thức tính tổng của tập giá trị được tính theo biểu thức
Avg (Avg ([All | Distinct] [All | Distinct] Biểu thức kiểu số):Biểu thức kiểu số): Hàm Hàm tính giá trị trung bình của tập giá trị thuộc tính tính giá trị trung bình của tập giá trị thuộc tính kiểu số:kiểu số:
Một số hàm thông dụngMột số hàm thông dụng
Ví dụ 18Ví dụ 18: : Cho biết lương trung bình của phòng có Cho biết lương trung bình của phòng có mã KDA?mã KDA?Select Select Avg(Luong) as TBluong Avg(Luong) as TBluongFromFrom NHANVIEN NHANVIEN WhereWhere Maphong= ’KDA’ Maphong= ’KDA’
Một số hàm thông dụngMột số hàm thông dụng
Ví dụ 19Ví dụ 19: : Cho biết tổng số nhân viên và trung Cho biết tổng số nhân viên và trung bình lương của cơ quan?bình lương của cơ quan?
Select Select count(*) as TongNv, Avg(Luong) as TBluongcount(*) as TongNv, Avg(Luong) as TBluong
FromFrom NHANVIENNHANVIEN
Truy vấn nhóm dữ liệuTruy vấn nhóm dữ liệuNHANVIEN
Tính trung bình lương
cho mỗi phòng trong
bảng NHANVIEN.
2250000
2280000
2500000
Truy vấn nhóm dữ liệuTruy vấn nhóm dữ liệu
SELECT column, group_function(column)FROM tables[WHERE condition][GROUP BY group_by_expression
[HAVING group_condition]][ORDER BY column];
Truy vấn nhóm dữ liệuTruy vấn nhóm dữ liệu
Ví dụ 20:Ví dụ 20: Cho biết trung bình lương của mỗi Cho biết trung bình lương của mỗi phòng?phòng?
SelectSelect Maphong, avg(Luong) as TBLuong Maphong, avg(Luong) as TBLuong FromFrom NHANVIEN NHANVIENGroupGroup ByBy Maphong Maphong
Truy vấn nhóm dữ liệuTruy vấn nhóm dữ liệu
Ví dụ 21:Ví dụ 21: Cho biết các phòng có trung bình lương Cho biết các phòng có trung bình lương lớn hơn 2250000?lớn hơn 2250000?
SelectSelect Maphong, avg(Luong) as TBLuong Maphong, avg(Luong) as TBLuong FromFrom NHANVIENNHANVIENGroupGroup ByBy MaphongMaphongHavingHaving avg(Luong) >=2250000 avg(Luong) >=2250000
Truy vấn nhóm dữ liệuTruy vấn nhóm dữ liệu
ChChú ýú ý:: TTất cả các cột hoặc biểu thức sau SELECT nếu không ấ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 nằm trong hàm mhóm dữ liệu đều phải xuất hiện sau GROUP BYGROUP BY
Các cột hoặc biểu thức 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 SELECTkhô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 Các điều kiện nhóm dữ liệu phải đặt sau HAVING (không đặt sau WHERE)(không đặt sau WHERE)
Truy vấn có liên kếtTruy vấn có liên kết
Các loại truy vấn 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 trong (inner join) Liên kết ngoài (outer join)Liên kết ngoài (outer join) Liên kết chéo (cross join)Liên kết chéo (cross join) Tự liên kết (self_join)Tự liên kết (self_join)
Truy vấn có liên kếtTruy vấn có liên kết
Truy vấn liên kết trong (inner join):Truy vấn liên kết trong (inner join):SELECT *|{[DISTINCT] column|expression
[alias],...}FROM table1, table2WHERE table1.col1 <phép so sánh> table2.col2
[and condition(s)][ORDER BY column asc|desc, . . .];
Hoặc:
Truy vấn có liên kếtTruy vấn có liên kết
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table1INNER JOIN table2ON table1.col1 <phép so sánh> table2.col2[WHERE condition(s)][ORDER BY column asc|desc, . . .];
Trả ra các bản ghi của hai bảng mà giá trị rả ra các bản ghi của hai bảng mà giá trị của col1 liên kết được với ít nhất một giá trị của col1 liên kết được với ít nhất một giá trị ở col2ở col2
Truy vấn có liên kếtTruy vấn có liên kết
Ví dụ 22Ví dụ 22: Với mỗi nhân viên, cho biết mã nhân : Với mỗi nhân viên, cho biết mã nhân viên, họ tên, mã phòng và tên phòng họ làm việc?viên, họ tên, mã phòng và tên phòng họ làm việc?SelectSelect manv, hoten, nhanvien.maphong, tenphong manv, hoten, nhanvien.maphong, tenphong FromFrom Phong, nhanvien Phong, nhanvien WhereWhere phong.maphong=nhanvien.maphong phong.maphong=nhanvien.maphong
Hoặc:Hoặc:SelectSelect manv, hoten, nv.maphong, tenphong manv, hoten, nv.maphong, tenphong FromFrom nhanvien nv nhanvien nvInner joinInner join phong p phong pOnOn nv.maphong=p.maphong nv.maphong=p.maphong
Truy vấn có liên kếtTruy vấn có liên kết
… …
…
Truy vấn có liên kếtTruy vấn có liên kết
Ví dụ 23Ví dụ 23: Với mỗi nhân viên (mã nhân viên, họ tên) cho biết các : Với mỗi nhân viên (mã nhân viên, họ tên) cho biết các ngoại ngữ mà nhân viên đó học (tên ngoại ngữ, trình độ)?ngoại ngữ mà nhân viên đó học (tên ngoại ngữ, trình độ)?Select Select manv, hoten, tennn,tdomanv, hoten, tennn,tdo FromFrom nhanvien nv, tdnn td, dmnn dm nhanvien nv, tdnn td, dmnn dm
WhereWhere nv.manv =td.manv and dm.mann = td.mann nv.manv =td.manv and dm.mann = td.mannHoặc:Hoặc:
Select Select manv, hoten, tennn,tdomanv, hoten, tennn,tdo FromFrom nhanvien nvnhanvien nvInner joinInner join tdnn td tdnn tdOnOn nv.manv =td.manv nv.manv =td.manv Inner joinInner join dmnn dm dmnn dm
OnOn dm.mann = td.mann dm.mann = td.mann
Truy vấn có liên kếtTruy vấn có liên kết
Truy vấn liên kết ngoài:Truy vấn liên kết ngoài:SELECT *|{[DISTINCT] column|expression [alias],...}FROM table1LEFT| RIGHT| FULL OUTER JOIN table2ON table1.col1 <phép so sánh> table2.col2[WHERE condition(s)][ORDER BY column(s)];
Truy vấn có liên kếtTruy vấn có liên kết
Ví dụ 24: Ví dụ 24: Đưa ra danh sách tất cả các nhân Đư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ọ 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)?(kể cả các nhân viên chưa ở phòng nào)?SELECT *FROM Nhanvien nvLEFT OUTER JOIN phong pON nv.maphong = p.maphong
Trả ra tất cả các bản ghi của rả ra tất cả các bản ghi của nhanviennhanvien và và chỉ các bản ghi trong chỉ các bản ghi trong phongphong liên kết với ít liên kết với ít nhất một bản ghi bên bảng nhất một bản ghi bên bảng nhanviennhanvien..
Truy vấn có liên kếtTruy vấn có liên kết
Ví dụ 25: Ví dụ 25: Đưa ra danh sách tất cả các phòng Đư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 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 phòng (kể cả các phòng chưa có nhân viên nào)?nào)?SELECT *FROM nhanvien nvRIGHT OUTER JOIN phong p
ON nv.maphong = p.maphong
Trả ra tất cả các bản ghi của rả ra tất cả các bản ghi của phongphong và chỉ các và chỉ các bản ghi so khớp trong bản ghi so khớp trong nhanviennhanvien..
Truy vấn có liên kếtTruy vấn có liên kết
Ví dụ 26: Ví dụ 26: SELECT *FROM nhanvien nv FULL OUTER JOIN phong p ON nv.maphong = p.maphong
Kết hợp của right và left outer join
Truy vấn có liên kếtTruy vấn có liên kết
Truy vấn liên kết chéo (cross join):Truy vấn liên kết chéo (cross join):SELECT *|{[DISTINCT] column|expression [alias],...}FROM table1CROSS JOIN table2 [WHERE condition(s)][ORDER BY column(s)];
Trả ra tích đề các của hai bảng
Truy vấn có liên kếtTruy vấn có liên kết
Truy vấn tự liên kết (self_join): Truy vấn tự liên kết (self_join): là truy vấn liên là truy vấn liên kết mà một bảng lại liên kết với chính nókết mà một bảng lại liên kết với chính nó
Ví dụ 27: Dua ra nhan vien co luong lon hon luong Ví dụ 27: Dua ra nhan vien co luong lon hon luong mot nhan vien nao do cung phongmot nhan vien nao do cung phong
Select from
inner join
on and
RRÀNG BUỘC DỮ LIỆU (CONSTRAINS)ÀNG BUỘC DỮ LIỆU (CONSTRAINS)
CCác thao tác làm biến đổi dữ liệu của bảng: cập nhật, á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.thêm bản ghi, xóa bản ghi.
DDữ liệu của một số bảng khi có những thay đổi phải tuân ữ liệu của một số bảng khi có những thay đổi phải tuân theo một số theo một số quy luậtquy luật nào đó nhằm đảm bảo dữ liệu đang 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 tồn tại trong CSDL luôn nhất quán. Các quy luật đó được gọi là các gọi là các ràng buộc dữ liệurà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ữ 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 liệu thì tất cả các ràng buộc sẽ được tự động được kiểm tự động được kiểm tra lạitra lại. Nếu dữ liệu mới không thỏa mãn các ràng buộc . 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ì SQL server sẽ trả về một thông báo lỗithông báo lỗi..
RRÀNG BUỘC DỮ LIỆU (CONSTRAINS)ÀNG BUỘC DỮ LIỆU (CONSTRAINS)
CCác loại ràng buộcác loại ràng buộc RRàng buộc khai báo:àng buộc khai báo:
ràng buộc cột (miền giá trị): xác định miền giá trị mà thuộc tính sẽ nhận ràng buộc cột (miền giá trị): xác định miền giá trị mà thuộc tính sẽ nhận được.được.
ràng buộc về tính toàn vẹn của thực thể: chỉ rõ khóa của bảngràng buộc về tính toàn vẹn của thực thể: chỉ rõ khóa của bảng ràng buộc toàn vẹn tham chiếu: liên quan đến việc quản lý các mối quan ràng buộc toàn vẹn tham chiếu: liên quan đến việc quản lý các mối quan
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 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ụ).phụ).
Ràng buộc phức tạp: sự thay đổi DL của một bảng Ràng buộc phức tạp: sự thay đổi DL của một bảng sự thay sự thay đổi DL của một loạt các bảng khác mà phải thực hiện theo một đổi 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).giải thuật (trigger, store procedure).
RRÀNG BUỘC DỮ LIỆU (CONSTRAINS)ÀNG BUỘC DỮ LIỆU (CONSTRAINS)
a. Ra. Ràng buộc miền giá trịàng buộc miền giá trị Not nullNot null
NNếu trong khai báo thuộc tính có mệnh đề Not Null thì bắt ế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 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).được để trống).
MặcMặc định khi khai báo cột là Null. định khi khai báo cột là Null. DDefault <giá trị>: đặt giá trị mặc định cho thuộc tínhefault <giá trị>: đặt giá trị mặc định cho thuộc tính
Được dùng trong trường hợp thêm mới bản ghi.Được dùng trong trường hợp thêm mới bản ghi. Không liên quan đến hành động nhập hay xóa.Không liên quan đến hành động nhập hay xóa. Nếu giá trị đưa vào khác Null thì giá trị mặc định bị thay thế, 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.ngược lại thì giá trị mặc định không thay đổi.
RRÀNG BUỘC DỮ LIỆU (CONSTRAINS)À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ị 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.mặc định.
Các thuộc tính không chấp nhận giá trị Null nên đặt giá trị Các thuộc tính không chấp nhận giá trị Null nên đặt giá trị mặc định.mặc định.
Unique: Unique: Các giá trị trong cột phải duy nhất.Các giá trị trong cột phải duy nhất. Cho phép xác định khóa dự tuyển cho bảng.Cho phép xác định khóa dự tuyển cho bảng.
Primary key: thiết đặt khóa chính cho bảngPrimary key: thiết đặt khóa chính cho bảng Check (<btL>): Check (<btL>):
giới hạn tập giá trị nhận được của một thuộc tính.giới hạn tập giá trị nhận được của một thuộc tính.
RRÀNG BUỘC DỮ LIỆU (CONSTRAINS)ÀNG BUỘC DỮ LIỆU (CONSTRAINS)
Ví dụ: Ví dụ: CREATE TABLE giang_vien(CREATE TABLE giang_vien(MagvMagv char(5),char(5),Ho_tenHo_ten varchar(35) constrains NN_HT_GV NOT NULL,varchar(35) constrains NN_HT_GV NOT NULL,Ngay_sinhNgay_sinh datetime,datetime,Gioi_tinhGioi_tinh varchar(3) DEFAULT ‘Nam’,varchar(3) DEFAULT ‘Nam’,Ma_khoaMa_khoa char(2) REFERENCES KHOA(ma_khoa),char(2) REFERENCES KHOA(ma_khoa),LuongLuong bigint check(luong>=1000000),bigint check(luong>=1000000),Trinh_doTrinh_do varchar(15) NOT NULLvarchar(15) NOT NULLCHECK(trinh_do IN (‘Đại học’, ‘Thạc sĩ’, “Tiến sĩ”))CHECK(trinh_do IN (‘Đại học’, ‘Thạc sĩ’, “Tiến sĩ”))Constrains PK_GV primary key(Magv, hoten)Constrains PK_GV primary key(Magv, hoten)))
RRÀNG BUỘC DỮ LIỆU (CONSTRAINS)ÀNG BUỘC DỮ LIỆU (CONSTRAINS)
Thêm ràng buộc vào bảng đã tồn tại: Thêm ràng buộc vào bảng đã tồn tại: ALTER TABLE <tên bảng>ALTER TABLE <tên bảng>
ADD CADD CONSTRAINT ONSTRAINT <định nghĩa ràng buộc><định nghĩa ràng buộc>Ví dụ:Ví dụ:ALTER TABLE ALTER TABLE giang_viengiang_vienADDADD CONSTRAINT PKCONSTRAINT PK PRIMARY KEY(Magv)PRIMARY KEY(Magv)
RRÀNG BUỘC DỮ LIỆU (CONSTRAINS)ÀNG BUỘC DỮ LIỆU (CONSTRAINS)
Loại bỏ ràng buộc trong bảng: Loại bỏ ràng buộc trong bảng: ALTER TABLE <tên bảng>ALTER TABLE <tên bảng>DROPDROP CONSTRAINT < danh sách tên ràng buộc>CONSTRAINT < danh sách tên ràng buộc>Ví dụ:Ví dụ:ALTER TABLE ALTER TABLE giang_viengiang_vienDROPDROP CONSTRAINT PKCONSTRAINT PK
RRÀNG BUỘC DỮ LIỆU (CONSTRAINS)ÀNG BUỘC DỮ LIỆU (CONSTRAINS)
b. Rb. Ràng buộc toàn vẹn tham chiếu: dùng để thiết lập mối àng buộc toàn vẹn tham chiếu: dùng để thiết lập mối quan hệ giữa hai bảngquan hệ giữa hai bảng
[CONSTRAINT <tên ràng buộc>][CONSTRAINT <tên ràng buộc>][FOREIGN KEY <danh sách tên cột>][FOREIGN KEY <danh sách tên cột>]REFERENCES <tên bảng được tham chiếu> [(<khóa dự tuyển>)]REFERENCES <tên bảng được tham chiếu> [(<khóa dự tuyển>)][ON UPDATE {CASCADE| NO ACTION}][ON UPDATE {CASCADE| NO ACTION}][ON DELETE {CASCADE| NO ACTION}][ON DELETE {CASCADE| NO ACTION}]
CASCADE: cCASCADE: các bản ghi trong bảng tham chiếu được xóa ác bản ghi trong bảng tham chiếu được xóa hoặc được cập nhật theo bản ghi ở bảng được tham chiếu. hoặc được cập nhật theo bản ghi ở bảng được tham chiếu.
NO ACTION: khNO ACTION: khóa chính bảo toàn.óa chính bảo toàn.
RRÀNG BUỘC DỮ LIỆU (CONSTRAINS)ÀNG BUỘC DỮ LIỆU (CONSTRAINS)
VVí dụ:í dụ:CREATE TABLE giang_vien(CREATE TABLE giang_vien(MagvMagv char(5) PRIMARY KEY,char(5) PRIMARY KEY,Ho_tenHo_ten varchar(35) NOT NULL,varchar(35) NOT NULL,Ngay_sinhNgay_sinh datetime,datetime,Gioi_tinhGioi_tinh vachar(3) DEFAULT ‘Nam’,vachar(3) DEFAULT ‘Nam’,Ma_khoaMa_khoa char(2) REFERENCES KHOA(ma_khoa),char(2) REFERENCES KHOA(ma_khoa),LuongLuong bigint,bigint,Trinh_doTrinh_do varchar(15) NOT NULLvarchar(15) NOT NULLCHECK(trinh_do IN (“Đại học”, “Thạc sĩ”, “Tiến sĩ”))CHECK(trinh_do IN (“Đại học”, “Thạc sĩ”, “Tiến sĩ”))))
VII. THVII. THỦ TỤC THƯỜNG TRÚ Ủ TỤC THƯỜNG TRÚ (STORE PROCEDURE)(STORE PROCEDURE)
Khai bKhai báo biến trong SQL serveráo biến trong SQL server CCú phápú pháp
DECLARE @<tên biến 1> <kiểu DL> [, @<tên biến 2> <kiểu DECLARE @<tên biến 1> <kiểu DL> [, @<tên biến 2> <kiểu DL>, . . .]DL>, . . .]
Ví dụ:Ví dụ:DECLARE @x1 char(4)DECLARE @x1 char(4)DECLARE @x2 int, @a floatDECLARE @x2 int, @a floatDECLARE @Tong_gia_tri numeric; DECLARE @Tong_gia_tri numeric;
Gán giá trị cho biến:Gán giá trị cho biến:SET <tên biến> = <biểu thức>SET <tên biến> = <biểu thức>Ví dụ:Ví dụ:SET @x1 =‘CNTT’;SET @x1 =‘CNTT’;SET @a = 200;SET @a = 200;SET @Tong_gia_tri = (SELECT sum(soluong*dongia)/1000000 SET @Tong_gia_tri = (SELECT sum(soluong*dongia)/1000000
from CPP);from CPP);
VII. THVII. THỦ TỤC THƯỜNG TRÚ Ủ TỤC THƯỜNG TRÚ (STORE PROCEDURE)(STORE PROCEDURE)
In giá trị biến:In giá trị biến:Print(‘Tổng giá trị các chuyến hàng:’ + str(@Tong_gia_tri));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 Chú ý: các biến khai báo trong cùng một bó chỉ có tác dụng trong bó đó.dụng trong bó đó.
VII. THVII. THỦ TỤC THƯỜNG TRÚ Ủ TỤC THƯỜNG TRÚ (STORE PROCEDURE)(STORE PROCEDURE)
SP SP được xây dựng từ các câu lệnh T-SQL và được lưu được xây dựng từ các câu lệnh T-SQL và được lưu trú trên SQL server.trú trên SQL server.
Muốn thực hiện một SP, NSD chỉ cần thực hiện một Muốn thực hiện một SP, NSD chỉ cần thực hiện một lời gọi hàm.lời gọi hàm.
Khi SP được chạy lần đầu tiên nó sẽ được biên dịch 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 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 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.sau chạy lại thủ tục sẽ không phải dịch lại nữa.
VII. THVII. THỦ TỤC THƯỜNG TRÚ Ủ TỤC THƯỜNG TRÚ (STORE PROCEDURE)(STORE PROCEDURE)
NNăm bước biên dịch thủ tục:ă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 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ủ 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.tục tham chiếu tới. Lưu trữ tên thủ tục vào bảng sysobject, lưu trữ các mã lệnh Lưu trữ tên thủ tục vào bảng sysobject, lưu trữ các mã lệnh
của thủ tục vào bảng syscomments.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 Sinh ra mô hình truy vấn của thủ tục và lưu vào bảng
sysproceduresysprocedure Khi SP được chạy lần đầu tiên, cây truy vấn sẽ được đọc và Khi SP được chạy lần đầu tiên, cây truy vấn sẽ được đọc và
được tối ưu thành một kế hoạch thủ tục và chạy được tối ưu thành một kế hoạch thủ tục và chạy tiết kiệm 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ờ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.thủ tục.
VII. THVII. THỦ TỤC THƯỜNG TRÚ Ủ TỤC THƯỜNG TRÚ (STORE PROCEDURE)(STORE PROCEDURE)
Trong mTrong một phiên làm việc, nếu SP được thực hiện, nó ộ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 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 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 ra từ vùng nhớ đệm nâng cao hiệu suất chạy truy nâng cao hiệu suất chạy truy vấn.vấn.
VII. THVII. THỦ TỤC THƯỜNG TRÚ Ủ TỤC THƯỜNG TRÚ (STORE PROCEDURE)(STORE PROCEDURE)
CCú pháp lệnh tạo SP:ú pháp lệnh tạo SP:CREATE PROC[EDURE] <tên SP>CREATE PROC[EDURE] <tên SP>[@ <tên tham số 1> <kiểu DL> [@ <tên tham số 1> <kiểu DL>
[= <gi[= <giá trị>á trị>] [OUTPUT], . . .]] [OUTPUT], . . .][WITH RECCOMPILE|ENCRYPTION|RECOMPILE, ENCRYPTION][WITH RECCOMPILE|ENCRYPTION|RECOMPILE, ENCRYPTION]ASAS
<các câu lệnh SQL, câu lệnh điều khiển, . . .><các câu lệnh SQL, câu lệnh điều khiển, . . .>GiGiải thích:ải thích:- =<giá trị>: gán giá trị ban đầu cho tham số=<giá trị>: gán giá trị ban đầu cho tham số- OUTPUT: giOUTPUT: giá trị thay đổi của tham số ở trong thủ tục được đưa á trị thay đổi của tham số ở trong thủ tục được đưa
ra bên ngoài thủ tục.ra bên ngoài thủ tục.VVí dụí dụ
VII. THVII. THỦ TỤC THƯỜNG TRÚ Ủ TỤC THƯỜNG TRÚ (STORE PROCEDURE)(STORE PROCEDURE)
TThực hiện thủ tục: hực hiện thủ tục: EXEC <tên SP>EXEC <tên SP> Thay đổi thủ tụcThay đổi thủ tụcALTER PROALTER PRO[[CEDURECEDURE]] . . . . . . XXóa thủ tụcóa thủ tụcDROP PRO[CEDURE] <tên SP>DROP PRO[CEDURE] <tên SP> BBó thủ tụcó thủ tục
VII. THVII. THỦ TỤC THƯỜNG TRÚ Ủ TỤC THƯỜNG TRÚ (STORE PROCEDURE)(STORE PROCEDURE)
Sử dụng tùy chọn Sử dụng tùy chọn RECOMPILERECOMPILE trong câu lệnh trong câu lệnh CREATE CREATE PROPRO: : Thủ tục sẽ được biên dịch lại từ đầu mỗi khi thực hiệnThủ tục sẽ được biên dịch lại từ đầu mỗi khi thực hiện Khi biên dịch lại các thông tin mới của SP được cập nhật và Khi biên dịch lại các thông tin mới của SP được cập nhật và
tối ưu lại.tối ưu lại. Sử dụng tùy chọn Sử dụng tùy chọn RECOMPILERECOMPILE trong câu lệnh trong câu lệnh EXECEXEC
Thủ tục sẽ được biên dịch lại trong lần thực thi đó và lưu lại 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.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:Biên dịch lại tất cả các thủ tục của bảng:EXECEXEC sp_recompile <tên bảng> sp_recompile <tên bảng>
VIII. HVIII. HÀM CỦA NSDÀM CỦA NSD(USER DEFINED FUNCTIONS-UDFs)(USER DEFINED FUNCTIONS-UDFs)
UDFs giống như SP nhưng khác ở các điểm sau:UDFs giống như SP nhưng khác ở các điểm sau:
UDF SP
- 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
VIII. HVIII. HÀM CỦA NSDÀM CỦA NSD(USER DEFINED FUNCTIONS-UDFs)(USER DEFINED FUNCTIONS-UDFs)
Cú pháp câu lệnh:Cú pháp câu lệnh:CREATE FUNCTION <tên hàm>CREATE FUNCTION <tên hàm>([@<tên tham số> <kiểu DL vô hướng> [= <giá trị>] [, . . .]])([@<tên tham số> <kiểu DL vô hướng> [= <giá trị>] [, . . .]])RETURNS <kiểu vô hướng>|<table>RETURNS <kiểu vô hướng>|<table>[WITH ENCRYPTION][WITH ENCRYPTION]ASAS
BEGINBEGIN[<các câu lệnh>][<các câu lệnh>]RETURN <giá trị vô hướng>| (<câu lệnh RETURN <giá trị vô hướng>| (<câu lệnh
SELECT>)SELECT>)