3. 3.1.1 SQL là gì?
SQL
Viết tắt của
Structured Query
Language (Ngôn
ngữ cấu trúc truy
vấn) Cho phép
truy cập
vào Cơ sở
dữ liệu
Có thể lấy,
chèn, xóa,
sửa đổi từ
CSDL
Có thể thực
thi các truy
vấn trên
CSDL
Là một chuẩn
ngôn ngữ của
ANSI
3
4. SEQUEL bởi IBM
ANSi công bố bản
chuẩn SQL-86
ISO phê chuẩn
SQL-87
Công bố chuẩn
SQL2(SQL-92)
Công bố chuẩn
SQL3(SQL-99)
Chuẩn SQL: 2003-
không miễn phí
Chuẩn SQL:2006-
không miễn phí
3.1.2Lịch sử của SQL
4
5. 3.1.3 SQL là một chuẩn
• SQL là một chuẩn của ANSI (American National Standards Institute -
Viện tiêu chuẩn quốc gia Hoa kỳ) về truy xuất các hệ thống CSDL.
• Các câu lệnh SQL được sử dụng để truy xuất và cập nhật dữ liệu trong
một CSDL.
• SQL hoạt động với hầu hết các chương trình CSDL như MS
Access, DB2, Informix, MS SQL Server, Oracle, Sybase v.v.
* Lưu ý: Hầu hết các chương trình CSDL hỗ trợ SQL đều có
phần mở rộng cho SQL chỉ hoạt động với chính chương trình đó.
5
7. 3.1.5 ngôn ngữ truy vấn cấu trúc (SQL)
A. Giới thiệu
Là ngôn ngữ thường dùng để truy
vấn
Các lệnh của DDL cho phép bạn tạo và
định nghĩa các cơ sở dữ liệu.
Được chia làm 2 phần
DDL (Data Definition Language)
DML (Data Manipulation Language)
7
8. DDL (Data Definition Language)
DML (Data Manipulation Language)
SELECT - lấy dữ liệu từ một bảng CSDL.
UPDATE - cập nhật/sửa đổi dữ liệu trong
bảng.
DELETE - xoá dữ liệu trong bảng.
INSERT INTO - thêm dữ liệu mới vào bảng.
CREATE TABLE - tạo ra một bảng mới.
ALTER TABLE - thay đổi cấu trúc của bảng.
DROP TABLE - xoá một bảng.
CREATE INDEX - tạo chỉ mục (khoá để tìm
kiếm - search key).
DROP INDEX - xoá chỉ mục đã được tạo.
8
9. 3.1.6 Các kiểu dữ liệu
Dưới đây là các kiểu dữ liệu thuộc nhóm chuỗi kí tự trong SQL Server
(Transact-SQL).
9
10. Cú pháp kiểu dữ liệu Kích thước tối đa Giải thích
CHAR(kich_thuoc) Tối đa 8000 kí tự.
∙ kich_thuoc là số kí tự lưu trữ.
∙ Độ dài cố định.
∙ Thêm dấu cách về bên phải để bù phần trống cho đủ
số kí tự.
∙ Không chứa kí tự Unicode.
VARCHAR(kich_thuoc) hoặc VARCHAR(toi_da) Tối đa 8000 kí tự hoặc theo số tối đa.
∙ kich_thuoc là số kí tự lưu trữ.
∙ Độ dài tùy biến.
∙ Nếu chỉ định là toi_da thì tối đa là 2GB.
∙ Không chứa kí tự Unicode.
TEXT Tối đa 2GB.
∙ Độ dài tùy biến.
∙ Không chứa kí tự Unicode.
NCHAR(kich_thuoc) Tối đa 4000 kí tự.
∙ Độ dài cố định.
∙ Kí tự Unicode.
NVARCHAR(kich_thuoc) hoặc NVARCHAR(toi_da) Tối đa 4000 kí tự hoặc theo số tối đa.
∙ kich_thuoc là số kí tự lưu trữ.
∙ Độ dài tùy biến.
∙ Nếu số toi_da được chi định thì số kí tự tối đa là 2GB.
∙ Kí tự Unicode.
NTEXT Tối đa 1.073.741.823 byte.
∙ Độ dài tùy biến.
∙ Kí tự Unicode.
BINARY(kich_thuoc) Tối đa 8000 kí tự.
∙ kich_thuoc là số kí tự lưu trữ.
∙ Độ dài cố định.
∙ Thêm dấu cách để bù phần trống cho đủ số kí tự.
∙ Dữ liệu nhị phân.
VARBINARY(kich_thuoc) hoặc VARBINARY(toi_da) Tối đa 8000 kí tự hoặc theo số tối đa.
∙ kich_thuoc là số kí tự lưu trữ.
∙ Độ dài tùy biến.
∙ Nếu chỉ định là toi_da thì tối đa là 2GB.
∙ Dữ liệu nhị phân.
IMAGE kích thước tối đa là 2GB.
∙ Độ dài tùy biến.
10
11. Kiểu dữ liệu dạng số trong SQL Server
Dưới đây là danh sách các kiểu dữ liệu thuộc dạng số trong SQL Server (Transact-SQL).
Cú pháp kiểu dữ liệu Kích thước tối đa Giải thích
BIT số nguyên 0, 1 hoặc NULL
TINYINT từ 0 đến 255
SMALLINT từ -32768 đến 32767
INT -2,147,483,648 đến 2,147,483,647
BIGINT từ -9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807
DECIMAL(m,d)
∙ m mặc định là 18 nếu không được chỉ định cụ thể.
∙ d mặc định là 0 nếu không được chỉ định cụ thể.
m là tổng số lượng các số còn d là số lượng các số nằm sau dấu
phẩy.
DEC(m,d)
∙ m mặc định là 18 nếu không được chỉ định cụ thể.
∙ d mặc định là 0 nếu không được chỉ định cụ thể.
m là tổng số lượng các số còn d là số lượng các số nằm sau dấu
phẩy.
Đồng nghĩa với kiểu dữ liệu DECIMAL.
NUMERIC(m,d)
∙ m mặc định là 18 nếu không được chỉ định cụ thể.
∙ d mặc định là 0 nếu không được chỉ định cụ thể.
m là tổng số lượng các số còn d là số lượng các số nằm sau dấu
phẩy.
Đồng nghĩa với kiểu dữ liệu DECIMAL.
FLOAT(n)
số dấu phẩy động n mặc định là 53 nếu không được chỉ định cụ
thể.
n là số lượng của số bit lưu trữ trong một kí hiệu hóa học.
REAL tương đương với FLOAT(24)
SMALLMONEY từ - 214,748.3648 đến 214,748.3647
MONEY từ -922,337,203,685,477.5808 đến 922,337,203,685,477.5807
11
12. Kiểu dữ liệu ngày tháng/thời gian trong SQL Server
Dưới đây là danh sách các kiểu dữ liệu ngày tháng/thời gian trong SQL Server (Transact-SQL)
Cú pháp kiểu dữ liệu Kích thước tối đa Giải thích
DATE giá trị từ '0001-01-01' đến '9999-12-31. hiển thị dưới dạng ‘YYYY-MM-DD’
DATETIME
∙ Ngày lấy từ '1753-01-01 00:00:00' to '9999-
12-31 23:59:59'.
∙ Giờ lấy từ '00:00:00' to '23:59:59:997'
hiển thị dưới dạng ‘YYYY-MM-DD
hh:mm:ss[.mmm]
DATETIME2(chính xác tới số thập phân của
giây)
∙ giá trị lấy từ '0001-01-01' đến '9999-12-31'.
∙ Thời gian lấy từ '00:00:00' đến
'23:59:59:9999999'.
hiển thị dưới dạng 'YYYY-MM-DD hh:mm:ss[.số
giây thập phân]'
SMALLDATETIME
∙ giá trị lấy từ '1900-01-01' đến '2079-06-06'.
∙ Thời gian lấy từ '00:00:00' đến '23:59:59'.
hiển thị dưới dạng 'YYYY-MM-DD hh:mm:ss
TIME
∙ giá trị lấy từ '00:00:00.0000000' đến
'23:59:59.9999999'.
∙ Ngày lấy từ '0001-01-01' đến '9999-12-31'.
hiển thị dưới dạng 'YYYY-MM-DD
hh:mm:ss[.nnnnnnn]'
DATETIMEOFFSET (chính xác tới số thập phân
của giây)
∙ giá trị thời gian lấy từ '00:00:00' đến
'23:59:59:9999999'.
∙ Múi giờ lấy từ -14:00 đến +14:00.
hiển thị dưới dạng YYYY-MM-DD
hh:mm:ss[.nnnnnnn]' [{+|-}hh:mm] 12
13. 3.1.7 Tạo một CSDL
DATABAS
E
Tập hợp của rất nhiều
dữ liệu
Được các Hệ cơ sở dữ
liệu khai thác
Các dữ liệu trong
Database có liên quan
với nhau
Có cấu trúc, được lưu
trữ tuân theo quy tắc
Database (Cơ sở dữ liệu) là gì?
13
14. • Như việc truy xuất, đóng mở tập tin thông thường, bạn cần tạo file
lưu trữ trước khi truy xuất. Tương tự vậy, bạn cần tạo một DATABASE
để lưu trữ dữ liệu trong SQL Server để tiện cho việc truy vấn sau này.
• SQL Server sẽ giúp bạn quản lý, truy xuất những dữ liệu này một cách
có cấu trúc và dễ dàng hơn.
Tại sao phải tạo Database?
14
15. • Đầu tiên, để tạo một Database, bạn cần mở SQL Management
Studio lên > Connect
Khởi tạo Database trong SQL Server
15
16. • Bước 1: Nhấp chuột phải vào Databases > New Database….
Tạo Database bằng giao diện (UI)
16
17. • Bước 2: Nhập tên Database vào Database Name
Cấu trúc đặt tên nên sử dụng là
<Tên Database> <DB> <Phương thức tạo Database>
17
18. • Bước 1: Nhấp vào New Query hoặc phím tắt Ctrl + N
Tạo Database bằng code
18
19. • Bước 2: Nhập câu lệnh có cú pháp sau. Bôi đen dòng lệnh
> Excute (Phím tắt F5)
CREATE DATABASE <tên database>
Hộp thoại Message xuất hiện báo lệnh khởi tạo thành công.
19
20. 3.1.8 Tạo 1 bảng trong 1 CSDL
• Tạo một bảng trong một CSDL
• Để định nghĩa một bảng
• Tên bảng
• Các thuộc tính
• Tên thuộc tính
• Kiểu dữ liệu
• Các RBTV trên thuộc tính
• Cú pháp
• CREATE TABLE <Tên bảng>(
• <Tên cột><Kiểu dữ liệu>[<RBTV>],
• <Tên cột><Kiểu dữ liệu>[<RBTV>],
• …
• [<RBTV>]) 20
21. 3.1.9 Các ràng buộc vẹn toàn và cách
tạo ràng buộc trên bảng
3.1.9.1 Các ràng buộc vẹn toàn
3.1.9.1.1 Định nghĩa
• Ràng buộc toàn vẹn (RBTV) là những quy tắc quản lý (rules) được áp dụng lên
các đối tượng ở thế giới thực (nhưng được hiện diện trong cơ sở dữ liệu).
3.1.9.1.2 Phân loại RBVT
• Có 2 loại RBVT chính:
• RBTV trong bối cảnh 1 quan hệ cơ sở.
• RBTV có bối cảnh trên nhiều quan hệ cơ sở.
21
22. • Các ràng buộc toàn vẹn (TBTV)
và cách tạo ràng buộc trên
bảng
Các loại ràng buộc
Ràng buộc CHECK
Rằng buộc PRIMARY
KEY
Rằng buộc FOREIGN KEY
Ràng buộc DEFAULT
[CONSTRAINT constraint_name ]
CHECK (expression)
[CONSTRAINT constraint_name ]
DEFAULT { const_expression
| nonarguments_function| NULL)
[CONSTRAINT constraint_name ]
PRIMARY KEY [( colname [ , colname2 […, colname16]])]
[ CONSTRAINT constraint_name ]
[ FOREIGN KEY (cloname [ ,cloname2 […, colname16]])]
REFERENCES references_table [( ref_cloname
[, ref_colname2
[…, colname16]])]
Ràng buộc UNIQUE
[ CONSTRAINT constraint_name ]
UNIQUE [cloname1 [, cloname2 […, cloname16]]]]22
23. 3.1.10 Lệnh sửa đổi bảng ALTER Talbe
Tên lệnh và cú
pháp
Thêm cột
Chỉnh sửa cột
Xóa cột
Đổi tên cột
Đổi tên bảng
ALTER TABLE table_name ADD column_name column-
definition;
ALTER TABLE table_name
MODIFY (or ALTER COLUMN) column_name column_type;
ALTER TABLE table_name
DROP COLUMN column_name;
sp_rename ‘ten_bang.ten_cot_cu’, ‘ten_cot_moi’, “COLUMN’;
sp_rename ‘ten_bang_cu’, ‘ten_bang_moi’;
23
25. 3.2.1 Lịch sử của Oracle SQL
Lịch sử
Năm 1977
Lawrence Ellision
thành lập công ty
Oracle
Năm 1979 công
ty phát triển ra
Oracle SQL 2.0
Năm 1997 Oracle
giới thiệu phiên
bản 8 và 8i
Năm 2014 ra mắt
phiên bản mới
với nhiều tính
năng vượt trội
25
26. 3.2.2 Lớp dữ liệu
• Thông thường bên trong một CSDL Oracle sẽ có nhiều loại tập tin dữ
liệu khác nhau. Tiêu biểu là một số loại tập tin sau:
Loại tập tin
Tập tin tham số
(init file)
Tập tin điều khiển
(control file)
Tập tin lưu vết
(redo log file):
Tập tin dữ liệu
(database file)
Là tập tin chứa các thông tin cơ sở liên
quan đến tên CSDL
Là tập tin chứa các thông tin liên quan
đến tên CSDL
Là tập tin chứa dữ liệu thật sự của CSDL
Là tập tin chứ các hành động cập nhật dữ
liệu
26
27. 3.2.3 Lớp xử lý bên dưới (Background processes)
• Lớp xử lý bên dưới tại máy chủ sẽ đảm bảo cho mối quan hệ giữa phần CSDL
• vật lý và phần hiển thị trong bộ nhớ được khớp nhau. Cũng giống
• như lớp dữ liệu, các xử lý được chia ra làm nhiều loại khác nhau.
• Một số xử lý tiêu biểu như sau:
Xử lý ghi vào CSDL
(database writer):
Xử lý ghi vào tập tin
log (log writer)
27
28. 3.2.4 Lớp bộ nhớ (Memory)
• Lớp bộ nhớ bao gồm nhiều thành phần khác nhau được tổ chức lưu trữ trên vùng đệm bộ nhớ
của máy tính nhằm tăng tốc độ xử lý trong Oracle, khái niệm này còn được biết đến với một tên
khác là vùng toàn cục hệ hống (system global area).
• Một số vùng đệm tiêu biểu như sau:
Vùng đệm lưu trữ CSDL
(database buffer cache)
Vùng đệm lưu trữ lệnh
SQL
(SQL area)
Vùng đệm lưu trữ các
thông tin chung thường
dùng (dictionary cache)
28
29. 3.3.5 Giới thiệu Oracle Server
• Oracle Server có thể chạy trên một hay nhiều máy tính với những mô
hình khác nhau:
Client – Application
Server – Server
Client – Server Host – Base
29
31. 3.3.1 Nhóm truy vấn dữ liệu ( DQL ):
Gồm các lệnh truy vấn lựa chọn ( Select ) để lấy thông tin nhưng
không làm thay đổi dư liệu trong các bảng.
Là các truy vấn bằng đầu bằng SELECT
Trả về một bộ các thuộc tính hoặc 1 tập hợp các bộ thuộc tính.
3.3.2 Nhóm thao tác dữ liệu ( DML ):
Gồm các lệnh làm thay đổi dữ liệu ( Insert, Delete, Update,... ) lưu
trong các bảng.
SQL là cú pháp để thực thi các câu truy vấn. SQL cũng bao gồm cú
pháp để cập nhập – sửa đổi, chèn thêm và xóa các mẩu tin.
31
32. • Dưới đây là các câu lệnh và truy vấn dạng DML của SQL:
⮚SELECT – lấy dữ liệu từ một CSDL
Vd: lọc lấy tên của tất cả học sinh lớp D16CQMR01-N trong bảng Sinh viên:
SELECT HO_TEN FROM SINHVIEN
⮚UPDATE – cập nhập/sửa đổi dữ liệu trong bảng
Vd:Đổi tên sinh viên Nguyễn Thị Đẹp có Ma_SV là 1 thành Nguyễn Rất
Xinh:
UPDATE SINHVIEN SET HO_TEN = ‘Nguyễn Thị Đẹp’ WHERE Ma_SV = 1;
⮚DELETE – xóa dữ liệu trong bảng
Vd: Xóa tên Nguyễn Rất Xinh có Ma_SV là 1
DELETE FROM ‘SINHVIEN’
WHERE HO_TEN =’Nguyễn Rất Xinh’ AND Ma_SV = 1;
32
33. INSERT INTO – thêm dữ liệu mới vào bảng.
Vd: Giả sử dữ liệu chúng ta có 100 sinh viên. Giờ có thêm 1 sinh
viên đăng ký gồm các thông tin như sau:
• Mã SV:101
• Họ Tên: Lưu Thị Linh
• Tuổi: 19
• Khóa học: Digital Marketing
• Học phí : 5 triệu VND
Vậy chúng ta sẽ thêm dữ liệu như sau:
❖INSERT INTO
HOCVIEN(Ma_SV,HO_TEN,TUOI,KHOA_HOC,HOC_PHI)VALUE(1
01,’Lưu Thị Linh’,19,’Digital Marketing’,5000000000);
33
34. 3.3 Ngôn ngữ định nghĩa dữ liệu
(Data Definition Language)
• Dùng để khai báo cấu trúc các bảng của CSDL, các mối quan hệ của dữ
liệu (Data Relationship) và các quy tắc quản lý áp đặt lên các dữ liệu
đó.
• Về cơ bản, DDL gồm có các lệnh:
• CREATE: định nghĩa & tạo mới CSDL.
• ALTER: thay đổi định nghĩa của CSDL.
• DROP: xóa CSDL đã có.
34
35. A) CREATE (Tạo bảng dữ liệu)
• Khi tạo một bảng dữ liệu mới, cần xác định
⮚CÚ PHÁP CÂU LỆNH “CREATE TABLE”
▪ CREATE TABLE tên_bảng
▪ (
▪ tên_cột thuộc_tính_cột các_ràng_buộc
▪ [,... , tên_cột_n thuộc_tính_cột_n các_ràng_buộc_cột_n]
▪ [,các_ràng_buộc_trên_bảng]
▪ )
35
36. ⮚THUỘC TÍNH CỘT
• Mỗi cột trong một bảng có các thuộc tính:
• Kiểu dữ liệu của cột: đây là thuộc tính bắt buộc phải có đối với mỗi cột.
• Giá trị mặc định của cột: giá trị được tự động gán cho cột nếu như người sử dụng không
nhập dữ liệu cho cột. Mỗi cột chỉ có thể có nhiều nhất một giá trị mặc định.
• Cột có tính chất IDENTITY hay không: tức là giá trị của cột có tự động tăng mỗi khi có bản
ghi mới được bổ sung hay không. Tính chất này chỉ có thể sử dụng đối với các trường kiểu
số.
• Cột có chấp nhận giá trị NULL hay không?
36
37. ⮚CÁC RÀNG BUỘC
Các loại ràng buộc
RÀNG BUỘC ‘‘FOREIGN KEY’’
RÀNG BUỘC “UNIQUE”
RÀNG BUỘC “PRIMARY KEY”
RÀNG BUỘC “CHECK”
Cú pháp:
[CONSTRAINT tên_ràng_buộc]
FOREIGN KEY [(danh_sách_cột)]
REFERENCES
tên_bảng_tham_chiếu(danh_sách_cột_tham_chiếu)
[ON DELETE CASCADE | NO ACTION | SET NULL | SET
DEFAULT]
[ON UPDATE CASCADE | NO ACTION | SET NULL | SET
DEFAULT]
Cú pháp:
[CONSTRAINT tên_ràng_buộc]
UNIQUE [(danh_sách_cột)]
Cú pháp:
[CONSTRAINT tên_ràng_buộc]
PRIMARY KEY [(danh_sách_cột)]
Cú pháp:
[CONSTRAINT tên_ràng_buộc]
CHECK (điều_kiện)
37
38. B) ALTER (Sửa đổi định nghĩa bảng)
• Một bảng sau khi đã được định nghĩa bằng câu lệnh CREATE TABLE có thể được
sửa đổi thông qua câu lệnh ALTER TABLE. Câu lệnh này cho phép chúng ta thực
hiện các thao tác sau:
• Bổ sung một cột vào bảng.
• Xoá một cột khỏi bảng.
• Thay đổi định nghĩa của một cột trong bảng.
• Xoá bỏ hoặc bổ sung các ràng buộc cho bảng.
• Cú pháp:
• ALTER TABLE tên_bảng
• ADD định_nghĩa_cột |
• ALTER COLUMN tên_cột kiểu_dữ_liêu [NULL |
• NOT NULL] | DROP COLUMN tên_cột |
• ADD CONSTRAINT tên_ràng_buộc định_nghĩa_ràng_buộc |
• DROP CONSTRAINT tên_ràng_buộc 38
39. • *Định nghĩa lại kiểu dữ liệu của cột DIACHI trong bảng NHANVIEN và cho phép
cột chấp nhận giá trị NULL:
• ALTER TABLE nhanvien
• ALTER COLUMN diachi NVARCHAR(100) NULL
• *Xoá cột ngày sinh khỏi bảng NHANVIEN:
• ALTER TABLE nhanvien
• DROP COLUMN ngaysinh
• *Định nghĩa khoá chính (ràng buộc PRIMARY KEY) cho bảng NHANVIEN là cột
MANV:
• ALTER TABLE nhanvien
• ADD CONSTRAINT pk_nhanvien PRIMARY KEY(manv)
39
40. C) DROP (Xóa bảng)
• *Cú pháp:
DROP TABLE tên_bảng
• Khi đã xoá một bảng bằng lệnh DROP TABLE, ta không thể khôi phục lại bảng
cũng như dữ liệu của nó.
• Câu lệnh DROP TABLE không thể thực hiện được nếu bảng cần xoá đang được
tham chiếu bởi một ràng buộc FOREIGN KEY. Trong trường hợp này, ràng buộc
FOREIGN KEY đang tham chiếu hoặc bảng đang tham chiếu đến bảng cần xoá
phải được xoá trước.
• Khi một bảng bị xoá, tất cả các ràng buộc cũng đồng thời bị xóa theo. Do đó, nếu
ta tạo lại bảng thì cũng phải tạo lại các đối tượng này. 40
41. 3.3.4 Nhóm điều khiển truy xuất dữ liệu
(Data Control Language)
• Gồm các lệnh cho phép đặt các quyền truy xuất dữ liệu cho người dùng CSDL.
• Các lệnh:
• GRANT: cung cấp quyền tạo View, Update, Delete…
• REVOKE: thu hồi các quyền đã cấp cho người sử dụng trên CSDL hoặc trên các bảng.
A) GRANT
*Cú pháp:
Cung cấp quyền trên CSDL:
GRANT privilege1, privilege2,… TO database;
Cung cấp quyền trên bảng:
GRANT privilege1, privilege2,…
ON database.,TableName TO Username;
B) REVOKE
Ví dụ: (Thu hồi quyền tạo View cho người
dùng CSDL HR)
REVOKE CREATE VIEW TO HR;
(Thu hồi các quyền lựa chọn, thêm, cập nhật
dữ liệu trên bảng EMPLOYEES cho admin của
CSDL HR)
REVOKE SELECT, INSERT, UPDATE
ON HR.EMPLOYEES TO HR_ADMIN; 41