You are on page 1of 47

Bài 5

CÁC LỆNH ĐỊNH NGHĨA


VÀ CẬP NHẬT DỮ LIỆU
NỘI DUNG BÀI HỌC

1. Tổng quan về ngôn ngữ SQL

2. Lệnh làm việc với cơ sở dữ liệu

3. Lệnh làm việc với các bảng

4. Lệnh cập nhật dữ liệu


1. Tổng quan về ngôn ngữ SQL

a. SQL là gì?
b. Tại sao SQL là cần thiết
c. Chức năng của SQL
d. Lịch sử của SQL
e. Các lệnh trong SQL
a. SQL là gì?

• SQL là viết tắt của Structured Query Language là ngôn


ngữ truy vấn mang tính cấu trúc.
• Nó được thiết kế để quản lý dữ liệu trong một hệ thống
quản lý cơ sở dữ liệu quan hệ (RDBMS).
• SQL là ngôn ngữ cơ sở dữ liệu, được sử dụng để tạo, xóa
bảng trong cơ sở dữ liệu, lấy các hàng và sửa đổi các hàng…
Tất cả DBMS như MySQL, Oracle, MS Access, Sybase,
Informix, Postgres và SQL Server sử dụng SQL như là ngôn
ngữ cơ sở dữ liệu chuẩn.

4
b. Tại sao SQL là cần thiết

SQL là cần thiết để:


• Tạo cơ sở dữ liệu, bảng và khung nhìn mới.
• Để chèn các bản ghi vào trong một cơ sở dữ liệu.
• Để xóa các bản ghi từ một cơ sở dữ liệu.
• Để lấy dữ liệu từ một cơ sở dữ liệu.

5
c. Chức năng của SQL

• Với SQL, chúng ta có thể truy vấn cơ sở dữ liệu theo


nhiều cách khác nhau bằng cách sử dụng các lệnh.
• Với SQL, người dùng có thể truy cập dữ liệu từ hệ quản
trị cơ sở dữ liệu.
• SQL cho phép người dùng miêu tả dữ liệu.
• SQL cho phép người dùng định nghĩa dữ liệu trong một
cơ sở dữ liệu và thao tác nó khi cần thiết.

6
c. Chức năng của SQL

• Cho phép người dùng tạo, xóa cơ sở dữ liệu và bảng.


• Cho phép người dùng tạo view, thủ tục, hàm trong một
cơ sở dữ liệu.
• Cho phép người dùng thiết lập quyền truy cập vào bảng,
thủ tục và view.

7
d. Lịch sử của SQL

1970 - Dr. Edgar F. "Ted" Codd của IBM được biết đến
như là cha đẻ của cơ sở dữ liệu quan hệ. Ông miêu tả một
mô hình quan hệ cho các cơ sở dữ liệu.

1974 - SQL (Structured Query Language- Ngôn ngữ truy


vấn mang tính cấu trúc) xuất hiện.

1978 - IBM tiếp tục phát triển ý tưởng của Codd và công
bố một sản phẩm tên là System/R.

8
d. Lịch sử của SQL

1986 - IBM phát triển nguyên mẫu đầu tiên về mô hình


quan hệ và được chuẩn hóa bởi ANSI. Mô hình quan hệ
đầu tiên được công bố là Relational Software và sau đó là
Oracle.
▪ SQL (1989)
▪ SQL-92 (SQL2, 1992)
▪ SQL-99 (SQL3, 1999)
▪ SQL:2003, SQL:2006, SQL:2008, SQL:2011, SQL:2016

9
e. Các lệnh trong SQL

DDL (Data Definition


Language) – Ngôn ngữ
định nghĩa dữ liệu

DML (Data
Manipulation
Language) –
Ngôn ngữ thao
tác dữ liệu

DCL (Data Control


Language) – Ngôn
ngữ điều khiển dữ
liệu
10
e. Các lệnh trong SQL

DDL (Data Definition Language) – Ngôn ngữ định


nghĩa dữ liệu
• Lệnh CREATE: Tạo một bảng, một View của bảng, hoặc
đối tượng khác trong Database.
• Lệnh ALTER: Sửa đổi một đối tượng Database đang tồn
tại, ví dụ như một bảng.
• Lệnh DROP: Xóa toàn bộ một bảng, một View của bảng
hoặc đối tượng khác trong một Database.

11
e. Các lệnh trong SQL

DML (Data Manipulation Language) – Ngôn ngữ thao


tác dữ liệu
• Lệnh SELECT: Lấy các bản ghi cụ thể từ một hoặc nhiều
bảng.
• Lệnh INSERT: Tạo một bản ghi.
• Lệnh UPDATE: Sửa đổi các bản ghi.
• Lệnh DELETE: Xóa các bản ghi.
DCL (Data Control Language) – Ngôn ngữ điều khiển
dữ liệu
• Lệnh GRANT: Trao một quyền tới người dùng.
• Lệnh REVOKE: Thu hồi quyền đã trao cho người dùng
12
2. Lệnh làm việc với cơ sở dữ liệu

Ví dụ: Cho cơ sở dữ liệu Quản lý bán hàng gồm 3 bảng:

Hang(Mah, tenh, mau, slco);

PN( SoPN, ngay, MaNCC);

Hangnhap( SoPN, Mah, sl, gia).

Để tạo cơ sở dữ liệu trên ta thực hiện câu lệnh sau:

CREATE DATABASE QuanLyBanHang;


2. Lệnh làm việc với cơ sở dữ liệu

Tạo mới cơ sở dữ liệu

Cú pháp:

CREATE DATABASE <tên_cơ_sở_dữ_liệu>;


Hãy tạo cơ sở dữ liệu có tên là QuanLyNhanSu
CREATE DATABASE QuanLyNhanSu;
2. Lệnh làm việc với cơ sở dữ liệu

Đổi tên cơ sở dữ liệu


Cú pháp:
ALTER DATABASE <tên_cơ_sở_dữ_liệu_cũ>
MODIFY NAME=<tên_cơ_sở_dữ_liệu_mới>;
Hãy sửa cơ sở dữ liệu có tên là QuanLyNhanSu
thành tên mới là QLNS
ALTER DATABASE QuanLyNhanSu MODIFY
NAME=QLNS;
2. Lệnh làm việc với cơ sở dữ liệu

Xóa cơ sở dữ liệu

Cú pháp:
DROP DATABASE <tên_cơ_sở_dữ_liệu_cũ>;
Hãy xóa cơ sở dữ liệu có tên là QLNS
DROP DATABASE QLNS;
3. Làm việc với bảng

a. Các kiểu dữ liệu


b. Lệnh tạo cấu trúc bảng
c. Lệnh sửa cấu trúc bảng
d. Lệnh xóa bảng
a. Kiểu dữ liệu

▪ char(n): Chuỗi, độ dài cố định


▪ vchar(n): Chuỗi, độ dài chính xác
▪ nchar(n): Chuỗi,độ dài cố định hỗ trợ Unicode
▪ nvarchar(n): Chuỗi, độ dài chính xác, hỗ trợ Unicode
▪ text: Chuỗi với độ dài tối đa 2.147.483.647 ký tự
▪ bit: Có giá trị 0 hoặc 1
▪ tinyint: Số nguyên, giá trị từ 0 đến 255.
▪ int: Số nguyên, giá trị từ -231 đến 231 – 1
▪ smallint: Số nguyên, giá trị từ -215 đến 215 – 1
18
a. Kiểu dữ liệu

▪ numeric(p,s): số, độ chính xác cố định.


▪ decimal(p,s): tương tự kiểu numeric
▪ float: số thực, giá trị từ -1.79E+308 đến 1.79E+308
▪ real: số thực, giá trị từ -3.40E+38 đến 3.40E+38
▪ money: kiểu tiền tệ
▪ datetime: kiểu thời gian ngày giờ (chính xác đến phần
trăm giây)

19
b. Lệnh tạo cấu trúc bảng

bỏ trống không được


CREATE TABLE <tên_bảng> bỏ trống
( {tên_cột <kiểu dữ liệu> [NULL | NOT NULL]
ràng buộc về giá trị duy nhất,
[ <ràng buộc cột> [ ...n ] ] khuôn dạng dữ liệu...
} ràng buộc về khóa
[< ràng buộc bảng>] [ ,...n ] chính, khóa ngoài...
)

20
b. Lệnh tạo cấu trúc bảng

Ví dụ: Cho cơ sở dữ liệu Quản lý bán hàng gồm 3 bảng:


• Hang(MaH, TenH, Mau, SLCo)
1
• PN( SoPN, Ngay, MaNCC)
1
n
• Hangnhap( SoPN, Mah, SL, Gia)
n
Tạo các bảng cơ sở dữ liệu trên biết rằng
TT Tên thuộc tính Mô tả Kiểu dữ liệu(độ rộng) Ràng buộc
1 MaH Mã hàng Chuỗi kí tự(15) Khóa chính, khóa ngoài
2 TenH Tên hàng Chuỗi kí tự(35)
3 Mau Màu Chuỗi kí tự(30)
4 SoPN Số phiếu nhập Chuỗi kí tự(15) Khóa chính, khóa ngoài
5 MaNCC Mã nhà cung cấp Chuỗi kí tự(35)
6 Ngay Ngày nhập Ngày tháng
7 SLCo Số lượng có Số nguyên
8 Gia Giá Tiền tệ(money)
9 SL Số lượng nhập Số nguyên

21
b. Lệnh tạo cấu trúc bảng
Tạo bảng Hang(Mah, tenh, mau, slco);
TT Tên thuộc tính Mô tả Kiểu dữ liệu(độ rộng) Ràng buộc
1 MaH Mã hàng Chuỗi kí tự(15) Khóa chính
2 TenH Tên hàng Chuỗi kí tự(35)
3 Mau Màu Chuỗi kí tự(30)
4 SLCo Số lượng có Số nguyên

CREATE TABLE Hang


( khóa chính
MaH char(15) NOT NULL PRIMARY KEY,
TenH char(35) NOT NULL,
Mau char(30) NOT NULL,
SLCo int NOT NULL,
)

22
b. Lệnh tạo cấu trúc bảng

Tạo bảng PN(SoPN, Ngay, MaNCC);


TT Tên thuộc tính Mô tả Kiểu dữ liệu(độ rộng) Ràng buộc
1 SoPN Số phiếu nhập Chuỗi kí tự(15) Khóa chính
2 MaNCC Mã nhà cung cấp Chuỗi kí tự(35)
3 Ngay Ngày nhập Ngày tháng

CREATE TABLE PN
( khóa chính
SoPN char(15) NOT NULL PRIMARY
KEY,
Ngay date NOT NULL,
MaNCC char(35) NOT NULL
)

23
b. Lệnh tạo cấu trúc bảng
Tạo bảng HangNhap(SoPN, Mah, SL, Gia);
TT Tên thuộc tính Mô tả Kiểu dữ liệu(độ rộng) Ràng buộc
1 MaH Mã hàng Chuỗi kí tự(15) Khóa chính, khóa ngoài
2 SoPN Số phiếu nhập Chuỗi kí tự(15) Khóa chính, khóa ngoài
3 Gia Giá Tiền tệ(money)
4 SL Số lượng nhập Số nguyên

24
b. Lệnh tạo cấu trúc bảng

Tạo bảng HangNhap(SoPN, Mah, SL, Gia);

CREATE TABLE HangNhap


( MaH char(15) NOT NULL,
SoPN char(15) NOT NULL,
SL int NOT NULL, khóa chính
khóa ngoài nối với
Gia money NOT NULL, bảng Hang qua thuộc
PRIMARY KEY(MaH,SoPN), tính khóa là MaH
FOREIGN KEY (MaH) REFERENCES Hang,
FOREIGN KEY (SoPN) REFERENCES PN
khóa ngoài nối với
)
bảng PN qua thuộc tính
khóa là SoPN
25
b. Lệnh tạo cấu trúc bảng

Chú ý:
Khi tạo bảng có kiểu liên kết là 1-n thì phải tạo bảng phía
1 trước rồi mới tạo bảng phía n

26
c. Lệnh sửa cấu trúc bảng
tên_bản
ALTER TABLE <tên_bảng> g
sửa cột đã
{ có
ALTER COLUMN <tên_cột> <kiểu_dữ_liệu> [NULL | NOT NULL]
thêm cột/ràng
| ADD {<tên_cột_mới> buộc
<kiểu_dữ_liệu>/<ràng buộc> } [ ,...n ]
| DROP COLUMN <tên_cột_xóa>/<ràng buộc> [ ,...n ]
}
xóa cột/ràng buộc

27
c. Lệnh sửa cấu trúc bảng
Thêm bảng Hang(Mah, tenh, mau, slco) cột MaNCC có kiểu là
chuỗi (độ rộng 20) T
T
Tên
thuộc
Mô tả Kiểu dữ
liệu(độ rộng)
Ràng buộc

tính
ALTER TABLE Hang thêm cột 1 MaH Mã hàng Chuỗi kí
tự(15)
Khóa chính

2 TenH Tên hàng Chuỗi kí


ADD MaNCC char(20) NOT NULL tự(35)
3 Mau Màu Chuỗi kí
tự(30)
tự(15)
4 SLCo Số lượng Số nguyên

5 MaNCC Mã nhà Chuỗi kí Khóa
cung cấp tự(20) ngoài(NCC
)

Thêm ràng buộc khóa ngoài cho cột MaNCC tham chiếu đến
bảng NCC
ALTER TABLE Hang ADD FOREIGN KEY (MaNCC) REFERENCES
NCC(MaNCC) Thêm ràng buộc khóa
ngoài
28
c. Lệnh sửa cấu trúc bảng

Thay đổi kiểu dữ liệu của cột Mau từ kiểu là chuỗi (độ rộng 30)
thành kiểu chuỗi có độ rộng 15, có thể bỏ trống sửa cột
ALTER TABLE Hang ALTER COLUMN Mau char(15) NULL
T Tên Mô tả Kiểu dữ Ràng buộc
T thuộc liệu(độ rộng)
tính
Xóa ràng buộc khóa ngoài của cột 1 MaH Mã hàng Chuỗi kí
tự(15)
Khóa chính

2 TenH Tên hàng Chuỗi kí


MaNCC trong bảng Hang 3 Mau Màu
tự(35)
Chuỗi kí
tự(15)
ALTER TABLE Hang DROP 4 SLCo Số lượng Số nguyên

5 MaNCC Mã nhà Chuỗi kí Khóa
FOREIGN KEY cung cấp tự(20) ngoài(NCC
xóa ràng )

buộc

29
c. Lệnh sửa cấu trúc bảng

Xóa cột MaNCC trong bảng Hang xóa cột


ALTER TABLE Hang DROP COLUMN MaNCC
T Tên Mô tả Kiểu dữ Ràng buộc
T thuộc liệu(độ rộng)
tính
1 MaH Mã hàng Chuỗi kí Khóa chính
tự(15)
2 TenH Tên hàng Chuỗi kí
tự(35)
3 Mau Màu Chuỗi kí
tự(15)
4 SLCo Số lượng Số nguyên

Chú ý:
Khi xóa cột trong bảng nếu cột đó là khóa ngoài thì xóa
ràng buộc khóa ngoài trước rồi mới xóa cột đó

30
d. Lệnh xóa bảng

▪ Xóa bảng có tên chỉ định


▪ Cú pháp
DROP TABLE <tên_bảng> [ ,...n ] [ ; ]
Ví dụ: Xóa bảng HangNhap
DROP TABLE HangNhap
Chú ý:
Khi xóa bảng có kiểu liên kết là 1-n thì phải xóa bảng phía
n trước rồi mới xóa bảng phía 1

31
4. Lệnh cập nhật dữ liệu

a. Lệnh INSERT
b. Lệnh UPDATE
c. Lệnh DELETE
a. Lệnh INSERT

Cho phép thêm các dòng dữ liệu mới vào bảng


Cú pháp 1:
INSERT INTO TEN_BANG (cot1, cot2, cot3,...cotN)]
VALUES (giatri1, giatri2, giatri3,...giatriN);
Trong đó: cot1, cot2,...cotN là tên các cột trong bảng muốn
chèn dữ liệu.
a. Lệnh INSERT

Cho phép thêm các dòng dữ liệu mới vào bảng


Cú pháp 2:
INSERT INTO TEN_BANG VALUES (giatri1, giatri2,
giatri3,...giatriN);
Trong đó: đảm bảo thứ tự của các giá trị là giống như thứ
tự các cột trong bảng muốn chèn dữ liệu: cot1, cot2,...cotN
.
a. Lệnh INSERT

Ví dụ: Cho cơ sở dữ liệu QLBH gồm 3 bảng:


•1 Hang(MaH, TenH, Mau, SLCo)
1

n
• PN( SoPN, Ngay, MaNCC)
n
• Hangnhap( SoPN, Mah, SL, Gia)
Tạo các bảng cơ sở dữ liệu trên biết rằng
TT Tên thuộc tính Mô tả Kiểu dữ liệu(độ rộng) Ràng buộc
1 MaH Mã hàng Chuỗi kí tự(15) Khóa chính, khóa ngoài
2 TenH Tên hàng Chuỗi kí tự(35)
3 Mau Màu Chuỗi kí tự(30)
4 SoPN Số phiếu nhập Chuỗi kí tự(15) Khóa chính, khóa ngoài
5 MaNCC Mã nhà cung cấp Chuỗi kí tự(35)
6 Ngay Ngày nhập Ngày tháng
7 SLCo Số lượng có Số nguyên
8 Gia Giá Tiền tệ(money)
9 SL Số lượng nhập Số nguyên

35
a. Lệnh INSERT
Tạo bảng Hang(Mah, tenh, mau, slco);
TT Tên thuộc tính Mô tả Kiểu dữ liệu(độ rộng) Ràng buộc
1 MaH Mã hàng Chuỗi kí tự(15) Khóa chính
2 TenH Tên hàng Chuỗi kí tự(35)
3 Mau Màu Chuỗi kí tự(30)
4 SLCo Số lượng có Số nguyên
CREATE TABLE Hang INSERT Hang(MaH,TenH,Mau, SLCo)
( VALUES(‘H005','Tủ Lạnh', ‘Trắng', 2100);
MaH char(15) NOT NULL Hoặc
PRIMARY KEY, INSERT Hang
VALUES(‘H006',Máy giặt', ‘Trắng', 200);
TenH char(35) NOT NULL,
Mau char(30) NOT NULL,
SLCo int NOT NULL,
)

36
a. Lệnh INSERT
Tạo bảng PN(SoPN, Ngay, MaNCC);
TT Tên thuộc tính Mô tả Kiểu dữ liệu(độ rộng) Ràng buộc
1 SoPN Số phiếu nhập Chuỗi kí tự(15) Khóa chính
2 MaNCC Mã nhà cung cấp Chuỗi kí tự(35)
3 Ngay Ngày nhập Ngày tháng

CREATE TABLE PN
INSERT PN(SoPN,Ngay, MaNCC)
(
VALUES(‘PN001',GETDATE(), ‘NCC1’)
SoPN char(15) NOT NULL Hoặc
PRIMARY KEY, INSERT PN
Ngay date NOT NULL, VALUES(‘PN002',GETDATE(), ‘NCC1’)
MaNCC char(35) NOT NULL
)

37
a. Lệnh INSERT
Tạo bảng HangNhap(SoPN, Mah, SL, Gia);
TT Tên thuộc tính Mô tả Kiểu dữ liệu(độ rộng) Ràng buộc
1 MaH Mã hàng Chuỗi kí tự(15) Khóa chính, khóa ngoài
2 SoPN Số phiếu nhập Chuỗi kí tự(15) Khóa chính, khóa ngoài
3 Gia Giá Tiền tệ(money)
4 SL Số lượng nhập Số nguyên
CREATE TABLE HangNhap
( MaH char(15) NOT NULL,
SoPN char(15) NOT NULL,
SL int NOT NULL,
Gia money NOT NULL,
PRIMARY KEY(MaH,SoPN),
FOREIGN KEY (MaH) REFERENCES Hang,
FOREIGN KEY (SoPN) REFERENCES PN
)

38
a. Lệnh INSERT
INSERT Hang(MaH,TenH,Mau, SLCo) INSERT PN(SoPN,Ngay, MaNCC)
VALUES(‘H005','Tủ Lạnh', ‘Trắng', 2100); VALUES(‘PN001',GETDATE(), ‘NCC1’)
Hoặc Hoặc
INSERT Hang INSERT PN
VALUES(‘H006',‘Máy giặt', ‘Trắng', 200); VALUES(‘PN002',GETDATE(), ‘NCC1’)

CREATE TABLE HangNhap INSERT HangNhap (MaH, SoPN, SL,


Gia)
( MaH char(15) NOT NULL,
SoPN char(15) NOT NULL, VALUES(‘H007',‘PN004', 3,
5000000);
SL int NOT NULL,
Gia money NOT NULL, INSERT HangNhap (MaH, SoPN, SL, Gia)
VALUES(‘H005',‘PN001', 3, 5000000);
PRIMARY KEY(MaH,SoPN),
Hoặc
FOREIGN KEY (MaH) REFERENCES Hang, INSERT HangNhap
FOREIGN KEY (SoPN) REFERENCES PN VALUES (‘H005',‘PN002', 3, 5000000
)

39
a. Lệnh INSERT

▪ Thêm dữ liệu từ bảng khác


Cú pháp: tên bảng hoặc khung nhìn danh sách cột

INSERT [ INTO ] table_or_view_name [ ( column_list )]


SELECT statement
Câu lệnh SELECT trả lại các dòng dữ liệu được thêm vào bảng
a. Lệnh INSERT

VD: lấy thông tin về số phiếu, ngày nhập và tổng tiền nhập
của mỗi phiếu, thêm dữ liệu truy xuất được vào bảng PN1
INSERT INTO PN1(SoPN, Ngay, TongTien)
SELECT PN.SoPN, Ngay, SUM(SL * Gia)
FROM HANG, PN, HangNhap
WHERE Hang.MaH = HangNhap.MaH
AND PN.SoPN = HangNhap.SoPN
GROUP BY PN.SoPN, Ngay

41
b. Lệnh UPDATE

Cho phép cập nhật dòng dữ liệu đã tồn tại


Cú pháp: tên bảng hoặc khung nhìn
hằng, biến hoặc biểu thức
UPDATE table_or_view_name
SET column_name= { expression|DEFAULT|NULL } [,...n]
[ FROM{ <table_source> } [ ,...n ] ] danh sách bảng

[ WHERE { <search_condition> } ]

điều kiện cập nhật dữ liệu


b. Lệnh UPDATE

VD: Thay đổi cho phiếu nhập ‘PN001’ nhà cung cấp là
Hitachi
UPDATE PN
SET MaNCC=‘Hitachi’
WHERE SoPN = ‘PN001'

43
b. Lệnh UPDATE

VD: tăng số lượng có của các sản phẩm khi được nhập
thêm biêt rằng: SLCo=SLCo+SL
UPDATE HANG
SET SLCo= SLCo+SL
WHERE HANG.MaH=HangNhap.MaH

44
c. Lệnh DELETE

▪ Cho phép xóa các dòng dữ liệu trong bảng


tên bảng hoặc khung nhìn
Cú pháp
DELETE [ FROM ] table_or_view_name
[ FROM table_source [ ,...n ] ] danh sách bảng
[ WHERE search_condition ]

điều kiện cập nhật dữ liệu


c. Lệnh DELETE

INSERT Hang(MaH,TenH,Mau, SLCo) INSERT HangNhap (MaH, SoPN, SL, Gia)


VALUES(‘H005','Tủ Lạnh', ‘Trắng', 2100); VALUES(‘H005',‘PN001', 3, 5000000);
Hoặc Hoặc
INSERT Hang INSERT HangNhap
VALUES(‘H006',‘Máy giặt', ‘Trắng', 200); VALUES (‘H005',‘PN002', 3, 5000000

VD 1: Xóa bỏ mặt hàng có tên là ‘Máy giặt’


DELETE Hang WHERE TenH = ‘Máy giặt‘
VD 2: Xóa bỏ mặt hàng có tên là ‘Tủ lạnh’
DELETE HangNhap
WHERE (Hang.maH=HangNhap.MaH) AND TenH = ‘Tủ lạnh‘
DELETE Hang WHERE TenH = ‘Tủ lạnh‘
46
c. Lệnh DELETE

Lệnh TRUNCATE TABLE


▪ Xóa tất cả các dòng trong bảng
Cú pháp:
TRUNCATE TABLE table_name
VD: Cho cơ sở dữ liệu QLBH gồm 3 bảng: Xóa dữ liệu 3 bảng đó:
• Hang(MaH, TenH, Mau, SLCo) TRUNCATE TABLE HangNhap

• PN( SoPN, Ngay, MaNCC) TRUNCATE TABLE PN

• Hangnhap( SoPN, Mah, SL, Gia) TRUNCATE TABLE Hang

You might also like