Professional Documents
Culture Documents
2
Giới thiệu
SQL (Structured Query Language)
- Ngôn ngữ cấp cao
- Người sử dụng chỉ cần đưa ra nội dung cần truy vấn
- Được phát triển bởi IBM (1970s)
- Được gọi là SEQUEL
- Được ANSI công nhận và phát triển thành các version:
SQL-2017
SQL-2019
SQL-2022
3
Giới thiệu (tt)
SQL gồm
- Định nghĩa dữ liệu (DDL): CREATE, ALTER, DROP,
RENAME, TRUNCATE, COMMENT.
- Thao tác dữ liệu (DML): SELECT, INSERT, UPDATE,
DELETE, MERGE.
- Định nghĩa khung nhìn: VIEW.
- Các hàm thủ tục: STORED PROCEDURES.
- Ràng buộc toàn vẹn: INTEGRITY CONSTRAINT, TRIGGER.
- Phân quyền và bảo mật: SET ROLE,…
- Điều khiển giao tác: COMMIT, ROLLBACK,..
SQL sử dụng thuật ngữ
- Bảng ~ quan hệ
- Cột ~ thuộc tính
- Dòng ~ bộ
4
Nội dung chi tiết
Giới thiệu
Định nghĩa dữ liệu
- Kiểu dữ liệu
- Các lệnh định nghĩa dữ liệu
Truy vấn dữ liệu
Cập nhật dữ liệu
Khung nhìn (view)
5
Định nghĩa dữ liệu
Là ngôn ngữ mô tả
- Lược đồ cho mỗi quan hệ
- Miền giá trị tương ứng của từng thuộc tính
- Ràng buộc toàn vẹn
- Chỉ mục trên mỗi quan hệ
Gồm
- CREATE TABLE (tạo bảng)
- DROP TABLE (xóa bảng)
- ALTER TABLE (sửa bảng)
- CREATE DATABASE (tạo cơ sở dữ liệu)
- …
6
Kiểu dữ liệu
Số (numeric)
- BIGINT (-2^63 (-9,223,372,036,854,775,808) to 2^63-1
(9,223,372,036,854,775,807))
- INT (-2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647))
- SMALLINT (-2^15 (-32,768) to 2^15-1 (32,767))
- TINYINT (0 to 255)
- NUMERIC, NUMERIC(p), NUMERIC(p,s) (- 10^38 +1
through 10^38 - 1)
- DECIMAL, DECIMAL(p), DECIMAL(p,s) (- 10^38 +1
through 10^38 - 1)
- REAL
- FLOAT, FLOAT(p)
- MONEY (-922,337,203,685,477.5808 to
922,337,203,685,477.5807), SMALLMONEY
7
Kiểu dữ liệu (tt)
Chuỗi ký tự (character string)
- CHAR(n), VARCHAR (n|MAX) [1]
- TEXT
8
Các lệnh định nghĩa dữ liệu
Khởi tạo trang viết truy vấn (query):
9
Các lệnh định nghĩa dữ liệu
Khởi tạo trang viết truy vấn (query):
10
Các lệnh định nghĩa dữ liệu
Cú pháp tạo
Cú pháp xóa
DROP DATABASE <tên database>
11
Các lệnh định nghĩa dữ liệu
Biến thể lệnh tạo DATABASE:
Đối với SQL Server thì có thể cấu hình thêm các
tham số sau:
- NAME: tên của file chứa database.
- FILENAME: đường dẫn lưu trữ file data hoặc file log
- SIZE: dung lượng của file
- MAXSIZE: Dung lượng tối đa của file data hoặc file log
- FILEGROWTH: Dung lượng có thể vượt quá giới hạn
maxsize.
12
Các lệnh định nghĩa dữ liệu
VD: Tạo một database có tên là QLNV và có file
data tên là QLNV_DAT, lưu ở ổ D:// và có dung
lượng là 10MB, Dung lượng tối đa là 50MB, và
được vượt quá giới hạn là 5MB, tương tự với file
log.
13
Các lệnh định nghĩa dữ liệu
CREATE DATABASE QLNV ON (
NAME = QLNV_DAT,
FILENAME = 'D:\QLNV_DAT.mdf',
SIZE = 10MB,
MAXSIZE = 50MB,
FILEGROWTH = 5MB )
LOG ON (
NAME = QLNV,
FILENAME =
'D:\QLNV_log.ldf' ,
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB );
14
Các lệnh định nghĩa dữ liệu
Lệnh tạo bảng
Để đị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>]
)
15
Các lệnh định nghĩa dữ liệu
CREATE TABLE NHANVIEN (
MANV CHAR(9) NOT NULL,
HONV VARCHAR(10),
TENLOT VARCHAR(20),
TENNV VARCHAR(10),
NGSINH DATETIME,
DCHI VARCHAR(50),
PHAI CHAR(3),
LUONG INT,
MA_NQL CHAR(9),
PHG INT
)
16
Các lệnh định nghĩa dữ liệu
Ràng buộc toàn vẹn trên thuộc tính
- NOT NULL: ràng buộc này quy định các giá trị tại cột
được đặt ràng buộc này không được phép rỗng. Ví
dụ cột MaNV của bảng NHANVIEN không được
phép rỗng.
- NULL: là ràng buộc mặc định của các cột, nó cho
phép giá trị tại cột có thể nhận giá trị rỗng. Ví dụ cột
DCHI của bảng NHANVIEN được phép nhận giá trị
rỗng.
17
Các lệnh định nghĩa dữ liệu
Ràng buộc toàn vẹn trên thuộc tính
- DEFAULT: ràng buộc này cho phép chúng ta đặt giá trị mặc
định cho cột bất kỳ. Ví dụ cột LUONG của bảng NHANVIEN
được mặc định là 7000000. (LUONG INT
DEFAULT(7000000))
- CHECK : ràng buộc này cho phép chúng ta kiểm tra các giá trị
của một cột chỉ được phép nằm trong miền giá trị cho trước .
Ví dụ cột GioiTinh của bảng NHANVIEN chỉ nhận giá trị {‘nam’
hoặc ‘nữ’}. (GioiTinh CHAR(3) CHECK (GioiTinh IN
(‘Nam’,’Nu’)))
18
Các lệnh định nghĩa dữ liệu
<RBTV> PRIMARY KEY
Định nghĩa khóa chính:
- Là một tập các thuộc tính , nhờ nó có thể phân biệt đối
tượng này với đối tượng khác.
Ràng buộc:
- Khóa chính phải xác định: luôn luôn có giá trị xác định (not
null)
- Phải duy nhất: Các bộ giá trị của khóa chính trên các hàng
phải khác nhau.
19
Các lệnh định nghĩa dữ liệu
<RBTV> FOREIGN KEY / REFERENCES
Định nghĩa khóa ngoại:
- Là khóa chính của một bảng được sử dụng như một thuộc
tính ở bảng khác. Nó thể hiện mối liên hệ giữa các bảng
với nhau.
Ràng buộc:
- Giá trị của khóa ngoại phải tương thích với các giá trị của
khóa chính mà nó tham chiếu tới.
- Vai trò của khóa trong CSDL giúp dễ dàng tạo mối liên hệ
giữa các bảng trong CSDL quan hệ.
20
Ví dụ - RBTV
CREATE TABLE NHANVIEN (
HONV VARCHAR(10) NOT NULL,
TENLOT VARCHAR(20) NOT NULL,
TENNV VARCHAR(10) NOT NULL,
MANV CHAR(9) PRIMARY KEY,
NGSINH DATETIME,
DCHI VARCHAR(50),
PHAI CHAR(3) CHECK (PHAI IN ('Nam', 'Nu')),
LUONG INT DEFAULT (10000),
MA_NQL CHAR(9),
PHG INT
)
21
Ví dụ - RBTV
CREATE TABLE PHONGBAN (
TENPB VARCHAR(20) UNIQUE,
MAPHG INT NOT NULL,
TRPHG CHAR(9),
NG_NHANCHUC DATETIME DEFAULT (GETDATE())
)
22
Ví dụ - Đặt tên cho RBTV
CREATE TABLE NHANVIEN (
HONV VARCHAR(10) CONSTRAINT NV_HONV_NN NOT NULL,
TENLOT VARCHAR(20) NOT NULL,
TENNV VARCHAR(10) NOT NULL,
MANV CHAR(9) CONSTRAINT NV_MANV_PK PRIMARY KEY,
NGSINH DATETIME,
DCHI VARCHAR(50),
PHAI CHAR(3) CONSTRAINT NV_PHAI_CHK
CHECK (PHAI IN ('Nam', 'Nu')),
LUONG INT CONSTRAINT NV_LUONG_DF DEFAULT (10000),
MA_NQL CHAR(9),
PHG INT
)
23
Ví dụ - Đặt tên cho RBTV
24
Các lệnh định nghĩa dữ liệu
Lệnh sửa bảng:
Được dùng để
- Thay đổi cấu trúc bảng
- Thay đổi RBTV
Xóa RBTV
26
Các lệnh định nghĩa dữ liệu
Lệnh sửa bảng:
ALTER TABLE NHANVIEN ADD
NGHENGHIEP CHAR(20)
27
Ví dụ - Thay đổi RBTV
CREATE TABLE PHONGBAN (
TENPB VARCHAR(20),
MAPHG INT NOT NULL,
TRPHG CHAR(9),
NG_NHANCHUC DATETIME
)
28
Các lệnh định nghĩa dữ liệu
Lệnh xóa bảng
Được dùng để xóa cấu trúc bảng
- Tất cả dữ liệu của bảng cũng bị xóa
Cú pháp
DROP TABLE <Tên_bảng>
Ví dụ
DROP TABLE NHANVIEN
29
Các lệnh định nghĩa dữ liệu
Lệnh xóa bảng (tt)
NHANVIEN
HONV TENLOT TENNV MANV NGSINH DCHI PHAI LUONG MA_NQL PHG
PHONGBAN
30
Lệnh thêm dữ liệu vào bảng
Cú pháp:
INSERT INTO table_name VALUES (value1, value2, value3,...)
Hoặc
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
31
Nội dung chi tiết
Giới thiệu
Định nghĩa dữ liệu
Truy vấn dữ liệu
- Truy vấn cơ bản
- Tập hợp, so sánh tập hợp và truy vấn lồng
- Hàm kết hợp và gom nhóm
- Một số kiểu truy vấn khác
Cập nhật dữ liệu
Khung nhìn (view)
32
Truy vấn cơ bản
Gồm 3 mệnh đề
33
Ví dụ
MANV HONV TENLOT TENNV NGSINH DCHI PHAI LUONG MA_NQL PHG
333445555 Nguyen Thanh Tung 12/08/1955 638 NVC Q5 Nam 40000 888665555 5
987987987 Nguyen Manh Hung 09/15/1962 Ba Ria VT Nam 38000 333445555 5
34
Mệnh đề SELECT
35
Mệnh đề SELECT (tt)
Tên bí danh
36
Mệnh đề SELECT (tt)
Mở rộng
MANV HO TEN
37
Mệnh đề SELECT (tt)
Mở rộng
MANV LUONG10%
333445555 33000
987987987 27500
38
Mệnh đề SELECT (tt)
SELECT DISTINCT
LUONG LUONG
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
LUONG
30000
- Tốn chi phí
25000
25000
38000
- Người dùng muốn thấy
38000
39
Ví dụ
Cho biết MANV và TENNV làm việc ở phòng
‘Nghien cuu’
40
Mệnh đề WHERE
TRUE TRUE
41
Mệnh đề WHERE (tt)
Độ ưu tiên
42
Mệnh đề WHERE (tt)
BETWEEN
43
Mệnh đề WHERE (tt)
NOT BETWEEN
44
Mệnh đề WHERE (tt)
LIKE
Ký tự bất kỳ
SELECT MANV, TENNV
FROM NHANVIEN
WHERE DCHI LIKE ‘Nguyen %’
Chuỗi bất kỳ
45
Mệnh đề WHERE (tt)
NOT LIKE
46
Mệnh đề WHERE (tt)
Ngày giờ
‘1955-12-08 17:30:00’
47
Mệnh đề WHERE (tt)
NULL
48
Mệnh đề WHERE (tt)
NULL
49
Mệnh đề FROM
WHERE TRUE
MANV MAPHG
333445555 1
333445555 4
333445555 5
987987987 1
987987987 4
987987987 5
… …
50
Mệnh đề FROM (tt)
Tên bí danh
51
Ví dụ 1
Với những đề án ở ‘Ha Noi’, cho biết mã đề án, mã
phòng ban chủ trì đề án, họ tên trưởng phòng cùng
với ngày sinh và địa chỉ của người ấy.
52
Ví dụ 2
Tìm họ tên của nhân viên phòng số 5 có tham gia
vào đề án “Sản phẩm X” với số giờ làm việc trên 10
giờ.
53
Ví dụ 3
Tìm họ tên của từng nhân viên và người phụ trách
trực tiếp nhân viên đó.
54
Ví dụ 4
Tìm họ tên của những nhân viên được “Nguyen
Thanh Tung” phụ trách trực tiếp.
55
Mệnh đề ORDER BY
Dùng để hiển thị kết quả câu truy vấn theo một thứ
tự nào đó
Cú pháp
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <điều kiện>
ORDER BY <danh sách các cột>
56
Mệnh đề ORDER BY (tt)
Ví dụ
SELECT MA_NVIEN, SODA
FROM PHANCONG
ORDER BY MA_NVIEN DESC, SODA
MA_NVIEN SODA
999887777 10
999887777 30
987987987 10
987987987 30
987654321 10
987654321 20
987654321 30
57
Nội dung chi tiết
Giới thiệu
Định nghĩa dữ liệu
Truy vấn dữ liệu
- Truy vấn cơ bản
- Tập hợp, so sánh tập hợp và truy vấn lồng
- Hàm kết hợp và gom nhóm
- Một số dạng truy vấn khác
Cập nhật dữ liệu
Khung nhìn (view)
58
Phép toán tập hợp trong SQL
SQL có cài đặt các phép toán
- Hội (UNION)
- Giao (INTERSECT)
- Trừ (EXCEPT)
59
Phép toán tập hợp trong SQL (tt)
Cú pháp
SELECT <ds cột> FROM <ds bảng> WHERE <điều kiện>
UNION [ALL]
SELECT <ds cột> FROM <ds bảng> WHERE <điều kiện>
60
Ví dụ 1
Cho biết các mã đề tài có giáo viên tham gia với họ
là ‘Nguyễn’ hoặc người chủ nhiệm đề tài có họ là
‘Nguyễn’.
SELECT [dt_id]
FROM [giao_vien] gv, [tham_gia_de_tai] tg
WHERE gv.[gv_id] = tg.[gv_id]
AND gv.[gv_hoten] LIKE N'%Nguyễn%'
UNION
SELECT [dt_id]
FROM [giao_vien] gv, [de_tai]dt
WHERE gv.[gv_id] = dt.[gv_id]
AND gv.[gv_hoten] LIKE N'%Nguyễn%'
61
Ví dụ 2
Tìm các mã giáo viên vừa làm tham gia đề tài vừa
chủ nhiệm đề tài.
SELECT tg. [gv_id]
FROM [tham_gia_de_tai] tg
INTERSECT
SELECT dt. [gv_id]
FROM [de_tai] dt
62
Ví dụ 3
Cho biết mã giáo viên chưa tham gia đề tài nào cả.
SELECT gv.[gv_id]
FROM [giao_vien] gv
EXCEPT
SELECT tg.[gv_id]
FROM [tham_gia_de_tai] tg
63
Truy vấn lồng
Truy vấn lồng là chúng ta sử dụng một khối lệnh
SELECT-FROM-WHERE trong mệnh đề WHERE
của một câu truy vấn khác.
Cú pháp:
64
Truy vấn lồng (tt)
Các câu lệnh SELECT có thể lồng nhau ở nhiều mức
Các câu truy vấn con trong cùng một mệnh đề
WHERE được kết hợp bằng phép nối logic
Câu truy vấn con thường trả về một tập các giá trị
Mệnh đề WHERE của câu truy vấn cha
- <biểu thức> <so sánh tập hợp> <truy vấn con>
- So sánh tập hợp thường đi cùng với một số toán tử
IN, NOT IN
ALL
ANY hoặc SOME
- Kiểm tra sự tồn tại
EXISTS
NOT EXISTS
65
Truy vấn lồng (tt)
Có 2 loại truy vấn lồng
- Lồng phân cấp
Mệnh đề WHERE của truy vấn con không tham chiếu đến
thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn
cha.
Khi thực hiện, câu truy vấn con sẽ được thực hiện trước.
- Lồng tương quan
Mệnh đề WHERE của truy vấn con tham chiếu ít nhất một
thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn
cha
Khi thực hiện, câu truy vấn con sẽ được thực hiện nhiều lần,
mỗi lần tương ứng với một bộ của truy vấn cha.
66
Ví dụ 4- Lồng phân cấp
Cho biết mã giáo viên, họ tên giáo viên thuộc bộ
môn ‘Hệ thống thông tin’.
67
Ví dụ - Lồng phân cấp (tt)
Cho biết mã giáo viên, họ tên giáo viên chưa tham
gia đề tài nào.
Tìm những giáo viên có lương lớn hơn lương của ít
nhất một giáo viên thuộc bộ môn ‘Hệ thống thông
tin’.
Tìm những giáo viên có lương lớn hơn lương tất cả
giáo viên thuộc bộ môn ‘Mạng máy tính’.
Tìm những giáo viên có tham gia ít nhất một đề tài.
68
Ví dụ 5- Lồng tương quan
Cho biết mã giáo viên, họ tên giáo viên thuộc bộ
môn ‘Hệ thống thông tin’
69
Ví dụ - Lồng tương quan (tt)
Cho biết mã giáo viên, họ tên giáo viên chưa tham
gia đề tài nào.
Tìm những giáo viên có lương lớn hơn lương của ít
nhất một giáo viên thuộc bộ môn ‘Hệ thống thông
tin’.
Tìm những trưởng bộ môn có tham gia ít nhất một
đề tài.
Tìm họ tên giáo viên tham gia tất cả các đề tài.
70
Nhận xét IN và EXISTS
IN
- <tên cột> IN <câu truy vấn con>
- Thuộc tính ở mệnh đề SELECT của truy vấn con phải có
cùng kiểu dữ liệu với thuộc tính ở mệnh đề WHERE của
truy vấn cha
EXISTS
- Không cần có thuộc tính, hằng số hay biểu thức nào
khác đứng trước
- Không nhất thiết liệt kê tên thuộc tính ở mệnh đề
SELECT của truy vấn con
- Những câu truy vấn có = ANY hay IN đều có thể chuyển
thành câu truy vấn có EXISTS
71
Nhận xét IN và EXISTS
Ví dụ: Những câu truy vấn có = ANY hay IN đều có
thể chuyển thành câu truy vấn có EXISTS
---Cho biết mã giáo viên, họ tên giáo viên thuộc bộ môn ‘Hệ
thống thông tin’.
SELECT GV.MAGV, GV.HOTEN
FROM GIAOVIEN GV
WHERE GV.MABM IN ( SELECT BM.MABM
FROM BOMON BM
WHERE BM.TENBM = N'Hệ thống thông tin’)
73
Hàm kết hợp
COUNT
- COUNT(*) đếm số dòng
- COUNT(<tên thuộc tính>) đếm số giá trị khác NULL của
thuộc tính
- COUNT(DISTINCT <tên thuộc tính>) đếm số giá trị khác
nhau và khác NULL của thuộc tính
MIN
MAX
SUM
AVG
Các hàm kết hợp được đặt ở mệnh đề SELECT
74
Ví dụ 7
Tìm tổng lương, lương cao nhất, lương thấp nhất và
lương trung bình của các nhân viên
75
Ví dụ 8
Cho biết số lượng nhân viên của phòng ‘Nghien
cuu’
76
Ví dụ 9
Cho biết số lượng nhân viên của từng phòng ban
PHG SL_NV
5 3
4 3
1 1
MANV HONV TENLOT TENNV NGSINH DCHI PHAI LUONG MA_NQL PHG
333445555 Nguyen Thanh Tung 12/08/1955 638 NVC Q5 Nam 40000 888665555 5
987987987 Nguyen Manh Hung 09/15/1962 Ba Ria VT Nam 38000 333445555 5
453453453 Tran Thanh Tam 07/31/1972 543 MTL Q1 Nu 25000 333445555 5
999887777 Bui Ngoc Hang 07/19/1968 33 NTH Q1 Nu 38000 987654321 4
987654321 Le Quynh Nhu 07620/1951 219 TD Q3 Nu 43000 888665555 4
987987987 Tran Hong Quang 04/08/1969 980 LHP Q5 Nam 25000 987654321 4
888665555 Pham Van Vinh 11/10/1945 450 TV HN Nam 55000 NULL 1
77
Gom nhóm
Cú pháp
78
Ví dụ 9 (tt)
Cho biết số lượng nhân viên của từng phòng ban
79
Ví dụ 10
Với mỗi nhân viên cho biết mã số, họ tên, số lượng
đề án và tổng thời gian mà họ tham gia
MA_NVIEN SODA THOIGIAN
SELECT123456789
MA_NVIEN, 1COUNT(*)
32.5 AS SL_DA,
SUM(THOIGIAN)
123456789 AS 2TONG_TG
7.5
FROM PHANCONG
333445555 2 10.0
GROUP 333445555
BY MA_NVIEN
3 10.0
333445555 10 10.0
888665555 20 20.0
987987987 10 35.0
SELECT HONV, TENNV, COUNT(*) AS SL_DA,
987987987 30 5.0
SUM(THOIGIAN) AS TONG_TG
987654321 30 20.0
FROM PHANCONG, NHANVIEN
987654321 20 15.0
WHERE MA_NVIEN=MANV
453453453 1 20.0
GROUP 453453453
BY MA_NVIEN,
2 HONV,
20.0TENNV
80
Ví dụ 11
Cho biết những nhân viên tham gia từ 2 đề án trở
lên
MA_NVIEN SODA THOIGIAN
123456789 1 32.5
123456789 2 7.5
333445555 2 10.0
333445555 3 10.0
333445555 10 10.0
888665555 20 20.0 bị loại ra
987987987 10 35.0
987987987 30 5.0
987654321 30 20.0
987654321 20 15.0
453453453 1 20.0
453453453 2 20.0
81
Điều kiện trên nhóm
Cú pháp
SELECT MA_NVIEN
FROM PHANCONG
GROUP BY MA_NVIEN
HAVING COUNT(*) >= 2
83
Ví dụ 12
Cho biết những phòng ban (TENPHG) có lương
trung bình của các nhân viên lớn lơn 20000
SELECT PHG, AVG(LUONG) AS LUONG_TB
FROM NHANVIEN
GROUP BY PHG
HAVING AVG(LUONG) > 20000
84
Nhận xét
Mệnh đề GROUP BY
- Các thuộc tính trong mệnh đề SELECT (trừ những thuộc
tính trong các hàm kết hợp) phải xuất hiện trong mệnh
đề GROUP BY
Mệnh đề HAVING
- Sử dụng các hàm kết hợp trong mệnh đề SELECT để
kiểm tra một số điều kiện nào đó
- Chỉ kiểm tra điều kiện trên nhóm, không là điều kiện lọc
trên từng bộ
- Sau khi gom nhóm điều kiện trên nhóm mới được thực
hiện
85
Nhận xét (tt)
Thứ tự thực hiện câu truy vấn có mệnh đề GROUP
BY và HAVING
- (1) Chọn ra những dòng thỏa điều kiện trong mệnh đề
WHERE
- (2) Những dòng này sẽ được gom thành nhiều nhóm
tương ứng với mệnh đề GROUP BY
- (3) Áp dụng các hàm kết hợp cho mỗi nhóm
- (4) Bỏ qua những nhóm không thỏa điều kiện trong
mệnh đề HAVING
- (5) Rút trích các giá trị của các cột và hàm kết hợp trong
mệnh đề SELECT
86
Ví dụ 13
Tìm những phòng ban có lương trung bình cao nhất
87
Ví dụ 14
Tìm 3 nhân viên có lương cao nhất
SELECT TENNV
FROM NHANVIEN NV1
WHERE 2 >= (
SELECT COUNT(*)
FROM NHANVIEN NV2
WHERE NV2.LUONG>NV1.LUONG )
88
Ví dụ 15
Tìm tên các nhân viên được phân công làm tất cả
các đồ án
89
Nội dung chi tiết
Giới thiệu
Định nghĩa dữ liệu
Truy vấn dữ liệu
- Truy vấn cơ bản
- Tập hợp, so sánh tập hợp và truy vấn lồng
- Hàm kết hợp và gom nhóm
- Một số dạng truy vấn khác
Cập nhật dữ liệu
Khung nhìn (view)
90
Một số dạng truy vấn khác
Truy vấn con ở mệnh đề FROM
91
Truy vấn con ở mệnh đề FROM
Kết quả trả về của một câu truy vấn phụ là một bảng
- Bảng trung gian trong quá trình truy vấn
- Không có lưu trữ thật sự
Cú pháp
92
Ví dụ 16
Cho biết những phòng ban (TENPHG) có lương
trung bình của các nhân viên lớn lơn 20000
SELECT PHG, AVG(LUONG) AS LUONG_TB
FROM NHANVIEN
SELECT TENPHG, TEMP.LUONG_TB
GROUPPHONGBAN,
FROM BY PHG (SELECT PHG, AVG(LUONG) AS LUONG_TB
HAVING AVG(LUONG) > 20000
FROM NHANVIEN
GROUP BY PHG
HAVING AVG(LUONG)> 20000 ) AS TEMP
SELECT PHG, TENPHG, AVG(LUONG) AS LUONG_TB
WHERE MAPHG=TEMP.PHG
FROM NHANVIEN, PHONGBAN
WHERE PHG=MAPHG
GROUP BY PHG, TENPHG
HAVING AVG(LUONG) > 20000
93
Điều kiện kết ở mệnh đề FROM
Kết bằng
Kết ngoài
94
Ví dụ 17
Tìm mã và tên các nhân viên làm việc tại phòng
‘Nghien cuu’
95
Ví dụ 18
Cho biết họ tên nhân viên và tên phòng ban mà họ
là trưởng phòng nếu có
96
Ví dụ 18 (tt)
NHANVIEN
PHONGBAN join PHONGBAN
NHANVIEN
MANV=TRPHG
TRPHG=MANV
97
Ví dụ 19
Tìm họ tên các nhân viên và tên các đề án nhân
viên tham gia nếu có
MA_NVIEN=MANV
98
Cấu trúc CASE
Cho phép kiểm tra điều kiện và xuất thông tin theo
từng trường hợp
Cú pháp
99
Ví dụ 20
Cho biết họ tên các nhân viên đã đến tuổi về hưu
(nam 60 tuổi, nữ 55 tuổi)
100
Ví dụ 21
Cho biết họ tên các nhân viên và năm về hưu
101
Kết luận
102
Nội dung chi tiết
Giới thiệu
Định nghĩa dữ liệu
Truy vấn dữ liệu
Cập nhật dữ liệu
- Thêm (insert)
- Xóa (delete)
- Sửa (update)
Khung nhìn (view)
103
Lệnh INSERT
Dùng để thêm 1 hay nhiều dòng vào bảng
Để thêm dữ liệu
- Tên quan hệ
- Danh sách các thuộc tính cần thêm dữ liệu
- Danh sách các giá trị tương ứng
104
Lệnh INSERT (tt)
Cú pháp (thêm 1 dòng)
105
Ví dụ
106
Lệnh INSERT (tt)
Nhận xét
- Thứ tự các giá trị phải trùng với thứ tự các cột
107
Lệnh INSERT (tt)
Cú pháp (thêm nhiều dòng)
108
Ví dụ
CREATE TABLE THONGKE_PB (
TENPHG VARCHAR(20),
SL_NV INT,
LUONG_TC INT
)
109
Lệnh DELETE
Dùng để xóa các dòng của bảng
Cú pháp
110
Ví dụ
111
Ví dụ 22
Xóa đi những nhân viên ở phòng ‘Nghien cuu’
112
Lệnh DELETE (tt)
Nhận xét
- Số lượng số dòng bị xóa phụ thuộc vào điều kiện ở
mệnh đề WHERE
113
Lệnh DELETE (tt)
MANV HONV TENLOT TENNV NGSINH DCHI PHAI LUONG MA_NQL PHG
333445555 Nguyen Thanh Tung 12/08/1955 638 NVC Q5 Nam 40000 888665555 5
987987987 Nguyen Manh Hung 09/15/1962 Ba Ria VT Nam 38000 333445555 5
453453453 Tran Thanh Tam 07/31/1972 543 MTL Q1 Nu 25000 333445555 5
999887777 Bui Ngoc Hang 07/19/1968 33 NTH Q1 Nu 38000 987654321 4
987654321 Le Quynh Nhu 07620/1951 219 TD Q3 Nu 43000 888665555 4
987987987 Tran Hong Quang 04/08/1969 980 LHP Q5 Nam 25000 987654321 4
888665555 Pham Van Vinh 11/10/1945 450 TV HN Nam 55000 NULL 1
333445555 10 10.0
888665555 20 20.0
987987987 10 35.0
987987987 30 5.0
987654321 30 20.0
453453453 1 20.0
114
Lệnh DELETE (tt)
MANV HONV TENLOT TENNV NGSINH DCHI PHAI LUONG MA_NQL PHG
333445555 Nguyen Thanh Tung 12/08/1955 638 NVC Q5 Nam 40000 888665555 NULL
5
987987987 Nguyen Manh Hung 09/15/1962 Ba Ria VT Nam 38000 333445555 NULL
5
453453453 Tran Thanh Tam 07/31/1972 543 MTL Q1 Nu 25000 333445555 NULL
5
999887777 Bui Ngoc Hang 07/19/1968 33 NTH Q1 Nu 38000 987654321 4
987654321 Le Quynh Nhu 07620/1951 219 TD Q3 Nu 43000 888665555 4
987987987 Tran Hong Quang 04/08/1969 980 LHP Q5 Nam 25000 987654321 4
888665555 Pham Van Vinh 11/10/1945 450 TV HN Nam 55000 NULL 1
115
Lệnh UPDATE
Dùng để thay đổi giá trị của thuộc tính cho các dòng
của bảng
Cú pháp
116
Ví dụ
UPDATE NHANVIEN
SET NGSINH=’08/12/1965’
WHERE MANV=‘333445555’
UPDATE NHANVIEN
SET LUONG=LUONG*1.1
117
Ví dụ 23
Với đề án có mã số 10, hãy thay đổi nơi thực hiện
đề án thành ‘Vung Tau’ và phòng ban phụ trách là
phòng 5
UPDATE DEAN
SET DIADIEM_DA=’Vung Tau’, PHONG=5
WHERE MADA=10
118
Lệnh UPDATE
Nhận xét
- Những dòng thỏa điều kiện tại mệnh đề WHERE sẽ
được cập nhật giá trị mới
119
Nội dung chi tiết
Giới thiệu
Định nghĩa dữ liệu
Truy vấn dữ liệu
Cập nhật dữ liệu
Khung nhìn
- Định nghĩa
- Truy vấn
- Cập nhật
120
Khung nhìn
Bảng là một quan hệ được tổ chức lưu trữ vật lý
trong CSDL
121
Khung nhìn (tt)
Tại sao phải sử dụng khung nhìn?
- Che dấu tính phức tạp của dữ liệu
- Đơn giản hóa các câu truy vấn
- Hiển thị dữ liệu dưới dạng tiện dụng nhất
- An toàn dữ liệu
122
Định nghĩa khung nhìn
Cú pháp
Bảng ảo này có
- Danh sách thuộc tính trùng với các thuộc tính trong
mệnh đề SELECT
- Số dòng phụ thuộc vào điều kiện ở mệnh đề WHERE
- Dữ liệu được lấy từ các bảng ở mệnh đề FROM
123
Ví dụ
124
Truy vấn trên khung nhìn
Tuy không chứa dữ liệu nhưng có thể thực hiện các
câu truy vấn trên khung nhìn
SELECT TENNV
FROM NV_P5
WHERE HONV LIKE ‘Nguyen’
125
Truy vấn trên khung nhìn (tt)
Có thể viết câu truy vấn dữ liệu từ khung nhìn và
bảng
126
Cập nhật trên khung nhìn
Có thể dùng các câu lệnh INSERT, DELETE và
UPDATE cho các khung nhìn đơn giản
- Khung nhìn được xây dựng trên 1 bảng và có khóa
chính của bảng
127
Cập nhật trên khung nhìn (tt)
Sửa lại họ cho nhân viên mã ‘123456789’ ở phòng 5
là ‘Pham’
UPDATE NV_P5
SET HONV=‘Pham’
WHERE MANV= ‘123456789’
128
129