Professional Documents
Culture Documents
2.chapter 2
2.chapter 2
CHƯƠNG 2:
NGÔN NGỮ SQL VÀ CÁC LOẠI RÀNG BUỘC DỮ LIỆU
1
NTTU-2022
NỘI DUNG
2. TẠO BẢNG
7. BÀI TẬP
2
NTTU-2022
1.CÁC LOẠI DỮ LIỆU
3
NTTU-2022
1. Các loại dữ liệu
Trước khi đi vào các thao tác đối với bảng, ta xét các kiểu dữ liệu
được sử dụng trong SQL Server.
TT Kiểu dữ liệu Ý nghĩa
2 Binary[(n)]
Dữ liệu nhị phân có kích thước cố định n byte. Kích
thước lưu trữ là n+4 byte. Với 1<n<8000
3 Bit Dữ liệu số nguyên nhận các giá trị 0, 1 hoặc NULL
Dữ liệu ký tự, có chiều dài n ký tự, không hỗ trợ Unicode.
4 Char[(n)]
Với độ dài 1<n<8000.
Tham chiếu tới một con trỏ. Chỉ dùng cho các biến và tham số
5 Cursor
trong stored procedure.
4
NTTU-2022
1. Các loại dữ liệu
TT Kiểu dữ liệu Ý nghĩa
6 Datetime Dữ liệu ngày giờ. Giá trị nhận từ 1/1/1753 đến 31/12/9999
7
decimal[(p,[s])] Dữ liệu số thập phân. p là tổng số ký tự số có thể được
numeric[(p,[s])] lưu, s là số chữ số thập phân.
Dữ liệu số động có phạm vi từ -1.79E+308 đến
8 float[(n)]
1.79E+308
Dữ liệu nhị phân có chiều dài thay đổi, dài hơn 8000 byte
9 image
và tối đa là 2^31-1 byte.
10 integer hoặc int Dữ liệu số nguyên từ -2^31 đến 2^31-1. Chiếm 4 byte.
11 money Dữ liệu kiểu tiền tệ từ -2^63 đến 2^63. Chiếm 8byte.
5
NTTU-2022
1. Các loại dữ liệu
6
NTTU-2022
1. Các loại dữ liệu
TT Kiểu dữ liệu Ý nghĩa
7
NTTU-2022
1. Các loại dữ liệu
Cột timestamp được cập nhật tự động mỗi khi dòng được
23 timestamp thêm hoặc được cập nhật. Mỗi bảng chỉ có thể có 1 cột
timestamp. Kích thước lưu trữ là 8 byte.
24 tinyint Dữ liệu số nguyên từ 0 đến 255. Chiếm 1 byte.
Giá trị nhị phân 16 byte, là số định danh duy nhất toàn
25 unique-identifier
cục.
26 varbinary[(n)] Dữ liệu nhị phân n có chiều dài thay đổi. Với 1<n<8000
Dữ liệu ký tự có chiều dài thay đổi với n ký tự. Không hỗ
27 varchar[(n)
trợ Unicode. Với 1<n<4000.
8
NTTU-2022
1. Các loại dữ liệu
Phân biệt:
Decimal (p, s): có p chữ số, trong đó có s chữ số sau dấu
phẩy.
Ví dụ:
Decimal(4, 2): 15,426 15,43
9
NTTU-2022
1. Các loại dữ liệu
Dữ liệu cho người dùng định nghĩa
Trên cơ sở dữ liệu hệ thống cung cấp, người dùng có thể
định nghĩa thêm một số loại dữ liệu khác.
(1) Tạo dữ liệu cho người dùng định nghĩa
Cú pháp:
EXEC sp_addType Tên dữ liệu mới,
‘Tên dữ liệu cơ sở’,
‘Điều kiện’
10
NTTU-2022
1. Các loại dữ liệu
Ví dụ:
EXEC sp_addType Test1, ‘Smallint’, ‘Not Null’
EXEC sp_addType Test2, ‘nvarchar(10)’, ‘Null’
Trong đó:
sp_addType: là một thủ tục hệ thống tạo dữ liệu cho người dùng
định nghĩa.
Tất cả các dữ liệu do người dùng định nghĩa trong Cơ sở dữ liệu
model đều có thể sử dụng trong các Cơ sở dữ liệu sau đó.
11
NTTU-2022
1. Các loại dữ liệu
Ví dụ:
EXEC sp_dropType Test1
12
NTTU-2022
2.TẠO BẢNG – CREATE TABLE
13
NTTU-2022
2. Tạo bảng – Create Table
14
NTTU-2022
(1) New Query (Ctrl + N)
(1.1) Tạo bảng
Khi tạo bảng để ý đến một số yếu tố sau:
Tạo tối đa 2.000.000 table / 1CSDL
Tối đa 1024 cột / 1Table
8060 byte / Row
Image và text chiếm 16 byte/Row
15
NTTU-2022
(1) New Query (Ctrl + N)
16
NTTU-2022
(1) New Query (Ctrl + N)
17
NTTU-2022
(1) New Query (Ctrl + N)
(1.1) Tạo bảng
Cột có thuộc tính Identity. Dùng Identity để hệ thống phát sinh các số một cách
tự động. Cột có thuộc tính trên thường dùng làm khóa chính.
Cú pháp:
Create Table <Tên Table>
(
Tên Cột Loại DL Indentity(Seed, Increment),
.....
)
18
NTTU-2022
(1) New Query (Ctrl + N)
(1.1) Tạo bảng
Chú ý :
Trên 1 table chỉ có 1 cột là identity
Không thể cập nhật cột này
Không cho phép NULL
Chỉ sử dụng cho (số nguyên , numeric và decimal)
Seed : giá trị ban đầu
Increment : Khoảng cách 2 số kề nhau
19
NTTU-2022
(1) New Query (Ctrl + N)
20
NTTU-2022
(1) New Query (Ctrl + N)
(1.2) Xóa bảng
Khi xóa bảng là xóa cấu trúc và dữ liệu của bảng. Chú ý là trước khi xóa bảng,
cần xóa các đối tượng phụ thuộc vào bảng như: View, Các ràng buộc toàn vẹn. Để
thấy các đối tượng phụ thuộc vào bảng, ta dùng thủ tục của hệ thống kiểm tra phụ
thuộc.
Cú pháp:
Exec SP_DEPENDS <Tên Bảng>
Ví dụ:
Exec SP_DEPENDS KETQUA
Exec SP_DEPENDS THISINH
21
NTTU-2022
(1) New Query (Ctrl + N)
(1.3) Thay đổi bảng
Khi thay đổi bảng thì chúng ta có thể thay đổi gồm:
Thêm cột vào bảng
Đổi cột trong bảng
Xóa cột khỏi bảng
(1.3.1) Thêm cột vào bảng
Cú pháp:
Alter Table <Tên Bảng> Add <Tên cột> Loại dữ liệu, …
Ví dụ: Alter Table THISINH Add DT char(10) NULL,
EMAIL varchar(50) NULL
22
NTTU-2022
(1) New Query (Ctrl + N)
(1.3.2) Đổi cột trong bảng
Cú pháp:
Alter Table <Tên Bảng> Alter Column <Tên cột> Kiểu DL RB
Ví dụ:
Alter Table THISINH Alter Column DT char(12) NULL
Alter Table THISINH Alter Column EMAIL varchar(40) null
Chú ý:
Đổi tên Cột(Field) và tên Bảng(Table) bằng cách sử dụng thủ tục của hệ thống như sau:
SP_RENAME 'Tên Bảng[.Tên Cột] cũ', 'Tên Bảng mới' or 'Tên Cột mới' [, 'Column']
Ví dụ: SP_RENAME 'THISINH', 'SINHVIEN'
SP_RENAME 'THISINH.TENTS', 'HOTENTS', 'COLUMN'
23
NTTU-2022
(1) New Query (Ctrl + N)
24
NTTU-2022
2. Tạo bảng – Create Table
25
NTTU-2022
3.TRUY VẤN DỮ LIỆU – QUERY DATA
26
NTTU-2022
Truy vấn dữ liệu
27
NTTU-2022
Truy vấn cơ bản
28
NTTU-2022
Cho CSDL QL Nhân sự và Đề án
29
NTTU-2022
(1) Database Diagram
30
NTTU-2022
(2) Tạo bảng, PK và nhập dữ liệu
31
NTTU-2022
(2) Tạo bảng, PK và nhập dữ liệu
32
NTTU-2022
(2) Tạo bảng, PK và nhập dữ liệu
33
NTTU-2022
(2) Tạo bảng, PK và nhập dữ liệu
34
NTTU-2022
(2) Tạo bảng, PK và nhập dữ liệu
35
NTTU-2022
(2) Tạo bảng, PK và nhập dữ liệu
36
NTTU-2022
(3) Tạo các khóa ngoại - FK
37
NTTU-2022
Ví dụ
38
NTTU-2022
Mệnh đề SELECT
39
NTTU-2022
Mệnh đề SELECT (tt)
40
NTTU-2022
Mệnh đề SELECT (tt)
41
NTTU-2022
Mệnh đề SELECT (tt)
42
NTTU-2022
Mệnh đề SELECT (tt)
Loại bỏ các dòng trùng nhau
SELECT DISTINCT
LUONG LUONG
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
LUONG
LUONG
30000
30000
25000
25000 - Tốn chi phí
25000
38000 - Người dùng muốn thấy
38000
43
NTTU-2022
Ví dụ
44
NTTU-2022
Mệnh đề WHERE
TRUE TRUE
45
NTTU-2022
Mệnh đề WHERE (tt)
Độ ưu tiên
46
NTTU-2022
Mệnh đề WHERE (tt)
BETWEEN
NOT BETWEEN
48
NTTU-2022
Mệnh đề WHERE (tt)
LIKE
FROM NHANVIEN
WHERE DCHI LIKE ‘Nguyen %’
49
NTTU-2022
Mệnh đề WHERE (tt)
NOT LIKE
Ngày giờ
SET DATEFORMAT YMD
‘1955-12-08 17:30:00’
51
NTTU-2022
Mệnh đề WHERE (tt)
NULL Sử dụng trong trường hợp
Không biết (value unknown)
Không thể áp dụng (value inapplicable)
Không tồn tại (value withheld)
Những biểu thức tính toán có liên quan đến giá trị NULL sẽ cho ra
kết quả là NULL
x có giá trị là NULL
x + 3 cho ra kết quả là NULL
x + 3 là một biểu thức không hợp lệ trong SQL
Những biểu thức so sánh có liên quan đến giá trị NULL sẽ cho ra kết
quả là UNKNOWN
x = 3 cho ra kết quả là UNKNOWN
x = 3 là một so sánh không hợp lệ trong SQL
52
NTTU-2022
Mệnh đề WHERE (tt)
NULL
SELECT MANV, TENNV
FROM NHANVIEN
WHERE MA_NQL IS NULL
53
NTTU-2022
Mệnh đề FROM
54
NTTU-2022
Mệnh đề ORDER BY
55
NTTU-2022
Mệnh đề ORDER BY (tt)
56
NTTU-2022
Phép toán tập hợp trong SQL
57
NTTU-2022
Phép toán tập hợp trong SQL(tt)
58
NTTU-2022
Phép toán tập hợp trong SQL(tt)
Ví dụ 1
59
NTTU-2022
Phép toán tập hợp trong SQL(tt)
Ví dụ 2:
60
NTTU-2022
Truy vấn lồng
61
NTTU-2022
Truy vấn lồng (tt)
62
NTTU-2022
Truy vấn lồng
63
NTTU-2022
Ví dụ - Truy vấn lồng phân cấp
64
NTTU-2022
Ví dụ - Truy vấn lồng phân cấp
65
NTTU-2022
Ví dụ - Truy vấn lồng phân cấp
66
NTTU-2022
Ví dụ - Truy vấn lồng phân cấp
67
NTTU-2022
Ví dụ - Truy vấn lồng phân cấp
68
NTTU-2022
Ví dụ - Truy vấn lồng tương quan
69
NTTU-2022
Nhận xét IN và EXISTS
70
NTTU-2022
Phép chia trong SQL
71
NTTU-2022
Phép chia trong SQL(tt)
72
NTTU-2022
Phép chia trong SQL(tt)
Ví dụ 1:
73
NTTU-2022
Phép chia trong SQL(tt)
Ví dụ 1:
74
NTTU-2022
Hàm kết hợp
75
NTTU-2022
Hàm kết hợp
Ví dụ 1:
76
NTTU-2022
Hàm kết hợp
Ví dụ 2:
77
NTTU-2022
Hàm kết hợp
Ví dụ 3:
78
NTTU-2022
Gom nhóm
79
NTTU-2022
Gom nhóm
Ví dụ:
80
NTTU-2022
Điều kiện trên nhóm
81
NTTU-2022
Điều kiện trên nhóm
Ví dụ 1
82
NTTU-2022
Điều kiện trên nhóm
Ví dụ 2
83
NTTU-2022
Nhận xét
84
NTTU-2022
Nhận xét
85
NTTU-2022
Ví dụ 1
86
NTTU-2022
Ví dụ 2
87
NTTU-2022
Ví dụ 3
88
NTTU-2022
Một số truy vấn khác
89
NTTU-2022
Truy vấn con ở mệnh đề FROM
90
NTTU-2022
Truy vấn con ở mệnh đề FROM
91
NTTU-2022
Điều kiện kết ở mệnh đề FROM
92
NTTU-2022
Điều kiện kết ở mệnh đề FROM
Ví dụ 1:
93
NTTU-2022
Điều kiện kết ở mệnh đề FROM
Ví dụ 2:
94
NTTU-2022
Điều kiện kết ở mệnh đề FROM
Ví dụ 3:
95
NTTU-2022
Cấu trúc CASE
96
NTTU-2022
Cấu trúc CASE
Ví dụ 1:
97
NTTU-2022
Cấu trúc CASE
Ví dụ 2:
98
NTTU-2022
Cấu trúc CASE
Ví dụ 2:
99
NTTU-2022
6. CÁC LOẠI RÀNG BUỘC DỮ LIỆU
(TYPES OF DATA CONSTRAINTS)
100
NTTU-2022
6. Các loại ràng buộc dữ liệu
101
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.1. Các loại RBTV
(1) Ràng buộc miền giá trị
Là chỉ ra tập các giá trị hợp lệ trên một cột trong một bảng.
Ví dụ:
Ta có bảng KETQUA(MSTS, MSM, LANTHI, DIEM)
Vậy RBTV về miền giá trị cho cột DIEM như sau:
0<=DIEM<=10
102
NTTU-2022
6. Các loại ràng buộc dữ liệu
Ví dụ:
MON(MSM, TENM)
KETQUA(MSTS, MSM, LANTHI, DIEM)
THISINH(MSTS, TENTS, NAMSINH, QQ, MST)
103
NTTU-2022
6. Các loại ràng buộc dữ liệu
104
NTTU-2022
6. Các loại ràng buộc dữ liệu
105
NTTU-2022
6. Các loại ràng buộc dữ liệu
106
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.3. Sử dụng các RBTV
Bảng mô tả các loại RBTV
TT Loại toàn vẹn Loại ràng buộc Mô tả
1 Miền giá trị Check Xác định qui luật hợp lệ cho DL trên cột
Foreign Key Giá trị khóa ngoại phải đối sánh khoá chính
Primary Key Null không cho phép, duy nhất trên mỗi hàng
2 Thực thể
Unique Null cho phép, Không cho phép trùng
107
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.3. Sử dụng các RBTV
Bảng mô tả các loại RBTV
3 Tham chiếu Foreign Key Giá trị khóa ngoại phải đối sánh khoá chính
Check,
Người dùng định
4
nghĩa
Stored Procedure, Xác định qui luật hợp lệ cho DL trên cột
Trigger,..
108
NTTU-2022
6. Các loại ràng buộc dữ liệu
109
NTTU-2022
6. Các loại ràng buộc dữ liệu
(1) Cài đặt RBTV mức trực tiếp bằng câu lệnh: Create Table ….
Cú pháp:
Create Table <Tên Table> (
Tên cột 1 Kiểu DL1 Ràng buộc1 ,
Tên cột 2 Kiểu DL2 Ràng buộc2 , . . .
)
Ví dụ 1: Create Table HOADON (
MSHD Int Constraint PK_HD Primary Key,
NGAYLHD Datetime,
LOAIHD Nchar(10) Not Null,
Constraint KT_LOAIHD Check(LoaiHD In (N‘Xuất’, N’Nhập’, ‘Xuat’, ‘Nhap’, ‘’))
)
110
NTTU-2022
6. Các loại ràng buộc dữ liệu
(1) Cài đặt RBTV mức trực tiếp bằng câu lệnh: Create Table ….
Ví dụ 2:
Create Table MUONTRA
(
MSKH Int Not Null,
MAMH Int Not Null,
LANMUON Int Not Null,
NGAYTHUE Datetime Not Null,
NGAYTRA Datetime,
Constraint PK_KH Primary Key (MSKH, LANMUON),
Constraint CK_Ngay Check (NGAYTHUE <= NGAYTRA)
)
111
NTTU-2022
6. Các loại ràng buộc dữ liệu
(2) Cài đặt RBTV mức gián tiếp bằng câu lệnh: Alter Table ….
Cú pháp:
Alter Table <Tên Table> Add Constraint <Tên RB> Kiểu RB,…
Lưu ý: Mức gián tiếp này thì Table muốn cài đặt RBTV đã tồn tại trong DB.
Ví dụ:
Alter Table HOADON Add
(Constraint PK_HD Primary Key(MSHD),
Constraint KT_LOAIHD Check(LoaiHD In (‘X’, ’N’))
112
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.4. Định nghĩa RBTV
Chú ý :
Mặc định SQL Server kiểm tra DL khi thêm một RB.
Nên xây dựng các đoạn CT trên Client để phát hiện các vi phạm khi bổ
sung DL trên Server.
Có thể xoá các RB mà không cần xóa các Table.
Nên chủ động đặt tên RB hơn là để SQL Server phát sinh tự động.
Các ràng buộc lưu trong các Table của hệ thống gồm:
114
NTTU-2022
6. Các loại ràng buộc dữ liệu
115
NTTU-2022
6. Các loại ràng buộc dữ liệu
Ví dụ: Alter Table HOADON Add Constraint FK_HD Foreign Key (MSKH)
References KHACHHANG(MSKH)
Chú ý:
Có thể tham chiếu một hay nhiều cột.
Số lượng và loại DL khoá ngoại và khoá chính phải tương hợp.
117
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.9. RBTV dạng khoá ngoại (Foreign Key) mức trực tiếp
Trong Table có khoá ngoại tham chiếu đến khoá chính trong cùng
một Table, cho nên không được dùng từ khóa Foreign Key.
Ví dụ:
Create Table NHANVIEN
(
MSNV int Constraint PK_NV Primary Key,
HOTEN nvarchar(3) Not Null,
NGAYSINH datetime Not Null,
MSTP int Constraint FK_NV References (MSNV)
)
118
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.10. Làm mất tính hiệu lực kiểm tra DL khi thêm ràng buộc
Khi Table đã có DL nếu thêm một ràng buộc SQL Server tự động kiểm tra DL.
Tuy nhiên chúng ta có thể làm mất tính kiểm tra này.
Chú ý:
Chỉ làm mất RB check và Foreign key.
Ví dụ:
Alter Table ChiTietHD With Nocheck Add Constraint CH_SL Check
(SL>0)
Alter Table KHACHHANG Nocheck Constraint FK_KH
Alter Table KHACHHANG Check Constraint FK_KH
119
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.11. Sử dụng Default
Khái niệm:
Default chỉ có một giá trị trên một cột nếu không xác định khi Insert dữ liệu
Chú ý:
Chỉ có thể kết nối một default tới một cột.
Giá trị Default sẽ được kiểm định với bất kỳ ràng buộc Check nào.
Không thể đưa giá trị Default vào cột có dữ liệu do người dùng định nghĩa
nếu Default đã kết nối tới một kiểu dữ liệu khác.
Cú pháp:
Create Default <Tên Default> As <Biểu thức hằng>
120
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.11. Sử dụng Default
Kết nối Default: Sau khi tạo một Default, cần nối kết Default tới một cột hoặc kiểu
dữ kiệu do nhiều người dùng định nghĩa nhờ thủ tục SP_BINDEFAULT
Cú pháp:
Exec SP_BINDEFAULT TENDEFAULT, ‘DoiTuong’
Để bỏ kế nối:
Exec SP_UNBINDEFAULT DEFAULT, ‘DoiTuong’
Ví dụ:
Create Default SDTDefault As ‘(08) 000_0000’
Sau đó:
Exec SP_BINDEFAULT ‘SDTDefault’, ‘KHACHHANG.SDT’
121
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.12. Sử dụng Rule
Khái niệm:
Là quy tắc chỉ ra các giá trị có thể chấp nhận được Insert vào một cột.
Chú ý:
Chỉ có thể kết nối một quy tắc đến một cột.
Quy tắc có thể chứa bất cứ mệnh đề gì xuất hiện trong Where.
Cú pháp:
Create Rule <Tên Rule> As <Biểu thứcDK>
Ví dụ:
Create Rule @KetQua In (‘Đậu, ’Rớt’)
122
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.12. Sử dụng Rule
Để kết nối một Rule tới một cột hay kiểu DL do người dùng định nghĩa
dùng thủ tục SP_BINDRULE.
Cú pháp: Exec SP_BINDRULE <Tên Rule> , <Tên Đối Tượng>
Ví dụ:
Create Rule r_MGTLuong As @Luong>=1000 And @Luong <5000
Exec SP_BINDRULE r_MGTLuong , ’NhanVien.Luong’
123
NTTU-2022
6. Các loại ràng buộc dữ liệu
124
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.13. Xóa Default và Rule
Ví dụ:
Exec SP_UNBINDRULE ‘NhanVien.Luong’
Drop Rule r_MGTLuong
125
NTTU-2022
6. Các loại ràng buộc dữ liệu
Ta thực hiện các công việc trên bằng cách sử dụng Trigger để thể hiện các
RBTV ở trên là tốt nhất.
127
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.14. Sử dụng Trigger để xây dựng các ràng buộc dữ liệu
Ví dụ 2:
128
NTTU-2022
6. Các loại ràng buộc dữ liệu
6.14. Sử dụng Trigger để xây dựng các ràng buộc dữ liệu
Ví dụ 3:
129
NTTU-2022
7. Bài tập
130
NTTU-2022
CHÚC CÁC BẠN THÀNH CÔNG
Q/A: namdh@ntt.edu.vn
NTTU-2022