hỆ quẢn trỊ cƠ sỞ dỮ liỆu

89

Upload: keenan

Post on 19-Mar-2016

70 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Page 2: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 3: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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)

Page 4: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 5: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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 ] ]

Page 6: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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.

Page 7: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 8: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 9: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 10: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 11: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 12: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 13: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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…..

Page 14: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

14

Page 15: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

15

Page 16: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

16

Page 17: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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)) ;

Page 18: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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);

Page 19: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 20: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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)::

Page 21: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 22: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 23: HỆ QUẢN TRỊ CƠ SỞ 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

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

Page 24: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 25: HỆ QUẢN TRỊ CƠ SỞ 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

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

Page 26: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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)

Page 27: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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?>]>]

Page 28: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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];

Page 29: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 30: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 31: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 32: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 33: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 34: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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’

Page 35: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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)

Page 36: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 37: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 38: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 39: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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’)

Page 40: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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ự

Page 41: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 42: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 43: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 44: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 45: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 46: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 47: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 48: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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)

Page 49: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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])

Page 50: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 51: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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ố:

Page 52: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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’

Page 53: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 54: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 55: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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];

Page 56: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 57: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 58: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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)

Page 59: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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)

Page 60: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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:

Page 61: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 62: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 63: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Truy vấn có liên kếtTruy vấn có liên kết

… …

Page 64: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 65: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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)];

Page 66: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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..

Page 67: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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..

Page 68: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 69: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 70: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 71: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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..

Page 72: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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).

Page 73: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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.

Page 74: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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.

Page 75: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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)))

Page 76: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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)

Page 77: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 78: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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.

Page 79: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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ĩ”))))

Page 80: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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);

Page 81: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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ó đó.

Page 82: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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.

Page 83: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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.

Page 84: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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.

Page 85: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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ụ

Page 86: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 87: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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>

Page 88: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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

Page 89: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

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>)