CHƯƠNG 5 NGÔN NGỮ SQL
KNOWLEDGE FOR SHARE
Tài liệu tham khảo
[1] Đỗ Phúc, Nguyễn Đăng Tỵ. Giáo trình cơ sở dữ liệu. Đại học Quốc gia Tp.HCM.
[2] Đồng Thị Bích Thủy.
Giáo trình cơ sở dữ liệu. Đại học Quốc gia Tp.HCM.
[3] Trần Ngọc Bảo.
Slide bài giảng CSDL Đại học Sư Phạm TP.HCM
[4] Lê Minh Triết.
Slide bài giảng CSDL Đại học Sư Phạm TP.HCM
2 3/16/2015
KNOWLEDGE FOR SHARE
Nội dung
1. Giới thiệu về SQL
2. Kiểu dữ liệu
3. Định nghĩa dữ liệu
4. Truy vấn dữ liệu
5. Cập nhật dữ liệu
6. Một số vấn đề khác
3 3/16/2015
KNOWLEDGE FOR SHARE
1. Giới thiệu
Ngôn ngữ ĐSQH
– Cách thức truy vấn dữ liệu – Khó khăn cho người sử dụng
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 chuẩn
• SQL-86 • SQL-92 • SQL-99
4 3/16/2015
KNOWLEDGE FOR SHARE
1. Giới thiệu
SQL gồm
Lý thuyết Chuẩn SQL-92, SQL Server 2000
– Định nghĩa dữ liệu (DDL) – Thao tác dữ liệu (DML) – Định nghĩa khung nhìn – Ràng buộc toàn vẹn – Phân quyền và bảo mật – Điều khiển giao tác
SQL sử dụng thuật ngữ
Minh họa SQL Server 2000
– Bảng ~ quan hệ – Cột ~ thuộc tính – Dòng ~ bộ
5 3/16/2015
KNOWLEDGE FOR SHARE
1. Giới thiệu về SQL
Ngôn ngữ định nghĩa dữ liệu DDL - Data Definition Language Các lệnh dùng để định nghĩa CSDL: tạo lập (create), thay đổi (alter) và hủy bỏ (drop) các đối tượng dữ liệu, thiết lập các ràng buộc. Ngôn ngữ thao tác dữ liệu
DML - Data Manipulation Language Các lệnh dùng để bảo trì và truy vấn CSDL:
thêm (insert), sửa (update), xóa (delete) dữ liệu của bảng, truy vấn (select).
Ngôn ngữ điều khiển dữ liệu DCL - Data Control Language Các lệnh dùng để điều khiển CSDL: quản trị các quyền
(grant, revoke).
6 3/16/2015
KNOWLEDGE FOR SHARE
1. Giới thiệu về SQL
7 3/16/2015
KNOWLEDGE FOR SHARE
2. Kiểu dữ liệu
Kiểu dữ liệu trong SQL Server
8 3/16/2015
KNOWLEDGE FOR SHARE
2. Kiểu dữ liệu
Kiểu dữ liệu trong SQL Server
9 3/16/2015
KNOWLEDGE FOR SHARE
2. Kiểu dữ liệu
Kiểu dữ liệu trong SQL Server
10 3/16/2015
KNOWLEDGE FOR SHARE
3. Đị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ệ
Các lệnh thông dụng
– CREATE TABLE (tạo bảng) – ALTER TABLE (sửa bảng) – DROP TABLE (xóa bảng) – CREATE DOMAIN (tạo miền giá trị) – CREATE DATABASE – …
11 3/16/2015
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
Để định nghĩa một bảng
Tạo 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
(
)
12 3/16/2015
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
Tạo bảng
CREATE TABLE NHANVIEN (
MANV
CHAR(9),
HONV
NVARCHAR(10),
TENLOT
NVARCHAR(20),
TENNV
NVARCHAR(10),
NGSINH
DATETIME,
DCHI
NVARCHAR(50),
PHAI
CHAR(3),
LUONG
INT,
MA_NQL
CHAR(9),
PHG
INT
)
13 3/16/2015
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
Tạo bảng
NOT NULL NULL UNIQUE (khóa chỉ định) DEFAULT PRIMARY KEY FOREIGN KEY / REFERENCES CHECK
(đk ràng buộc)
Đặt tên cho RBTV
CONSTRAINT
14 3/16/2015
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
Tạo bảng
CREATE TABLE NHANVIEN (
CHAR(9) PRIMARY KEY,
NVARCHAR(50), NCHAR(4) CHECK (PHAI IN (N‘Nam’, N‘Nữ’)), INT DEFAULT (10000),
HONV NVARCHAR(10) NOT NULL, TENLOT NVARCHAR(20) NOT NULL, TENNV NVARCHAR(10) NOT NULL, MANV NGSINH DATETIME, DCHI PHAI LUONG MA_NQL CHAR(9), PHG
INT
)
15 3/16/2015
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
CREATE TABLE PHONGBAN
Tạo bảng
(
TENPB NVARCHAR(20) UNIQUE,
MAPHG INT NOT NULL,
TRPHG CHAR(9),
NG_NHANCHUC DATETIME DEFAULT (GETDATE())
)
CREATE TABLE PHANCONG
(
MANV CHAR(9) FOREIGN KEY (MANV)
REFERENCES NHANVIEN(MANV),
MADA INT REFERENCES DEAN(MADA),
THOIGIAN DECIMAL(3,1),
PRIMARY KEY(MANV,MADA)
)
16 3/16/2015
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
CREATE TABLE NHANVIEN
Tạo bảng
(
HONV NVARCHAR(10) CONSTRAINT NV_HONV_NN NOT NULL,
TENLOT NVARCHAR(20) NOT NULL,
TENNV NVARCHAR(10) NOT NULL,
MANV CHAR(9) CONSTRAINT NV_MANV_PK PRIMARY KEY,
NGSINH
DATETIME,
DCHI NVARCHAR(50),
PHAI NCHAR(3) CONSTRAINT NV_PHAI_CHK
CHECK (PHAI IN (N‘Nam’,N ‘Nữ’)),
LUONG INT CONSTRAINT NV_LUONG_DF DEFAULT (10000),
MA_NQL CHAR(9),
PHG INT
)
17 3/16/2015
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
CREATE TABLE PHANCONG
Tạo bảng
(
MANV CHAR(9),
MADA INT,
THOIGIAN DECIMAL(3,1),
CONSTRAINT PC_MANV_MADA_PK
PRIMARY KEY (MANV, MADA),
CONSTRAINT PC_MANV_FK FOREIGN KEY (MANV)
REFERENCES NHANVIEN(MANV),
CONSTRAINT PC_MADA_FK FOREIGN KEY (MADA)
REFERENCES DEAN(MADA)
)
18 3/16/2015
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
Sửa bảng
Thay đổi cấu trúc bảng
– Thêm cột
– Xóa cột
– Mở rộng cột
Thay đổi ràng buộc toàn vẹn (RBTV)
– Thêm RBTV
– Xóa RBTV
19 3/16/2015
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
ALTER TABLE ADD COLUMN
ALTER TABLE DROP COLUMN
ALTER TABLE ALTER COLUMN
ALTER TABLE ADD
CONSTRAINT ,
S ử a b ả n g
CONSTRAINT ,
…
ALTER TABLE DROP
20 3/16/2015
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
Sửa bảng
ALTER TABLE NHANVIEN
ADD NGHENGHIEP CHAR(20)
ALTER TABLE NHANVIEN
DROP COLUMN NGHENGHIEP
ALTER TABLE NHANVIEN
ALTER COLUMN NGHENGHIEP CHAR(50)
21 3/16/2015
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
CREATE TABLE PHONGBAN
Sửa bảng
(
TENPB
VARCHAR(20),
MAPHG
INT NOT NULL,
TRPHG
CHAR(9),
NG_NHANCHUC DATETIME
)
ALTER TABLE PHONGBAN ADD
CONSTRAINT PB_MAPHG_PK PRIMARY KEY (MAPHG),
CONSTRAINT PB_TRPHG FOREIGN KEY (TRPHG)
REFERENCES NHANVIEN(MANV),
CONSTRAINT PB_NGNHANCHUC_DF DEFAULT (GETDATE())
FOR (NG_NHANCHUC),
CONSTRAINT PB_TENPB_UNI UNIQUE (TENPB)
22 3/16/2015
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
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
Ví dụ
DROP TABLE NHANVIEN
DROP TABLE PHONGBAN
DROP TABLE PHANCONG
23 3/16/2015
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
Xóa bảng
NHANVIEN
HONV TENLOT TENNV MANV NGSINH DCHI PHAI LUONG MA_NQL PHG
PHONGBAN
TENPHG MAPHG TRPHG NG_NHANCHUC
24 3/16/2015
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
Tạo ra một kiểu dữ liệu mới kế thừa
những kiểu dữ liệu có sẳn
Cú pháp
CREATE DOMAIN AS
Ví dụ
Tạo miền GT
CREATE DOMAIN kieu_MANV AS CHAR(9)
25 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
1. Truy vấn cơ bản
2. Tập hợp, so sánh tập hợp
3. Truy vấn lồng
4. Hàm kết hợp, gom nhóm
5. Một số kiểu truy vấn khác
26 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Là ngôn ngữ rút trích dữ liệu thỏa một số
điều kiện nào đó
Dựa trên
Phép toán ĐSQH
Một số bổ sung
Lệnh cơ bản để rút trích thông tin: SELECT Cho phép 1 bảng có nhiều dòng trùng nhau Bảng là bag(đa bộ) quan hệ là set (tập hợp)
27 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
SELECT
FROM
WHERE <điều kiện>
– Tên các cột cần được hiển thị trong kết quả truy vấn
– Tên các bảng liên quan đến câu truy vấn
<điều kiện>
– Biểu thức boolean xác định dòng nào sẽ được rút
trích
– Nối các biểu thức: AND, OR, và NOT – Phép toán: , , , , (<>) , , LIKE và BETWEEN
28 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
SELECT
FROM
WHERE <điều kiện>
SELECT L
FROM R,S
L (C (RxS))
WHERE C
29 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
Lấy tất cả các cột của quan hệ kết quả
SELECT *
FROM NHANVIEN
WHERE PHG=5
333445555
Nguyen
Thanh
Tung
12/08/1955
638 NVC Q5
Nam
40000
888665555
5
MANV HONV TENLOT TENNV NGSINH DCHI PHAI LUONG MA_NQL PHG
PHG=5 (NHANVIEN)
987987987 Nguyen Manh Hung 09/15/1962 Ba Ria VT Nam 38000 333445555 5
30 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
SELECT MANV, HONV, TENLOT, TENNV
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
MANV HONV TENLOT TENNV
333445555 Nguyen Thanh Tung
MANV,HONV,TENLOT,TENNV(PHG=5 PHAI=‘Nam’ (NHANVIEN))
987987987 Nguyen Manh Hung
31 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
SELECT MANV, HONV AS [HỌ], TENLOT AS [TÊN LÓT], TENNV AS [TÊN]
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
Tên bí danh
MANV HỌ TÊN LÓT TÊN
333445555 Nguyen Thanh Tung
MANV,HỌ,TÊN LÓT,TÊN(MANV,HONV,TENLOT,TENNV(PHG=5PHAI=‘Nam’(NHANVIEN)))
987987987 Nguyen Manh Hung
32 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
SELECT MANV, HONV + ‘ ’ + TENLOT + ‘ ’ + TENNV AS [HỌ TÊN]
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
Mở rộng
MANV HỌ TÊN
987987987
Nguyen Manh Hung
333445555 Nguyen Thanh Tung
33 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
Mở rộng
SELECT MANV, LUONG*1.1 AS [LUONG10%]
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
333445555
33000
MANV LUONG10%
MANV,LUONG10%(MANV,LUONG*1.1(PHG=5PHAI=‘Nam’(NHANVIEN)))
987987987 27500
34 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
SELECT DISTINCT LUONG SELECT LUONG
FROM NHANVIEN FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’ WHERE PHG=5 AND PHAI=‘Nam’
LUONG LUONG
- Tốn chi phí
Loại bỏ các dòng trùng nhau
30000 30000
- Người dùng muốn thấy
25000 25000
38000
38000 25000
35 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
Cho biết MANV và TENNV làm việc ở
phòng ‘Nghien cuu’
R1 NHANVIEN PHG=MAPHG PHONGBAN KQ MANV, TENNV (TENPHG=‘Nghien cuu’(R1))
SELECT MANV, TENNV
Biểu thức luận lý
FROM NHANVIEN, PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG
TRUE
TRUE
36 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE (TENPHG=‘Nghien cuu’ OR TENPHG=‘Quan ly’) AND PHG=MAPHG
Độ ưu tiên
37 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
BETWEEN
SELECT MANV, TENNV
SELECT MANV, TENNV
FROM NHANVIEN
FROM NHANVIEN
WHERE LUONG>=20000 AND
WHERE LUONG BETWEEN 20000 AND 30000
LUONG<=30000
NOT BETWEEN
SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG NOT BETWEEN 20000 AND 30000
38 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
SELECT MANV, TENNV
SELECT MANV, TENNV
FROM NHANVIEN
FROM NHANVIEN
WHERE HONV NOT NOT LIKE ‘Nguyen’
WHERE DCHI LIKE ‘Nguyen _ _ _ _’
LIKE
SELECT MANV, TENNV
FROM NHANVIEN
WHERE DCHI LIKE ‘Nguyen %’
Ký tự bất kỳ
Chuỗi bất kỳ
39 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
SELECT MANV, TENNV
FROM NHANVIEN
WHERE DCHI LIKE ‘% Nguyens_%’ ESCAPE ‘s’
‘Nguyen_’
ESCAPE
40 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
SELECT MANV, TENNV
Ngày giờ
FROM NHANVIEN
WHERE NGSINH = ‘1955-12-08’
SELECT MANV, TENNV
FROM NHANVIEN
WHERE NGSINH BETWEEN ‘1955-12-08’ AND ‘1966-07-19’
’17:30:00’
‘1955-12-08’
’12/08/1955’
’05:30 PM’
HH:MI:SS YYYY-MM-DD
‘December 8, 1955’
‘1955-12-08 17:30:00’
MM/DD/YYYY
41 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
Hàm CONVERT
Convert(kiểu_dữ_liệu, biểu_thức [,kiểu_chuyển_đổi])
Hàm có chức năng chuyển đổi giá trị của biểu thức
sang kiểu_dữ_liệu.
Tham số kiểu_chuyển_đổi là một giá trị số thường được sử dụng khi chuyển đổi giá trị kiểu ngày sang kiểu chuỗi nhằm quy định khuôn dạng dữ liệu được hiển thị.
42 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
HOADON(SoHD, MaKH, ngaylap, trigia)
Ví dụ: định dạng ngày theo dạng dd/mm/yyyy
SELECT SoHD, MaKH, CONVERT(varchar(10),ngaylap,103) as ngaylap
FROM HOADON
43 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
44 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
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
45 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
SELECT MANV, TENNV
NULL
FROM NHANVIEN
WHERE MA_NQL IS NULL
SELECT MANV, TENNV
FROM NHANVIEN
WHERE MA_NQL IS NOT NULL
46 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
SELECT MANV, MAPHG
FROM NHANVIEN, PHONGBAN
Không sử dụng mệnh đề WHERE (Tích chéo RxS)
WHERE TRUE
MANV MAPHG
333445555 1
333445555 4
333445555 5
987987987 1
987987987 4
987987987 5
… …
47 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản
Tên bí danh
SELECT TENPHG, DIADIEM
SELECT TENPHG, DIADIEM
FROM PHONGBAN, DDIEM_PHG
FROM PHONGBAN PB, DDIEM_PHG DD
WHERE MAPHG=MAPHG
WHERE PB.MAPHG=DD.MAPHG
SELECT TENNV, NGSINH, TENTN, NGSINH
FROM NHANVIEN, THANNHAN
SELECT TENNV, NV.NGSINH, TENTN, TN.NGSINH
WHERE MANV=MA_NVIEN
FROM NHANVIEN NV, THANNHAN TN
WHERE MANV=MA_NVIEN
48 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản – Bài tập
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
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ờ 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 đó
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
49 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản – Sắp xếp
Dùng để hiển thị kết quả câu truy vấn
theo một thứ tự nào đó
ORDER BY
Cú pháp
SELECT
FROM
WHERE <điều kiện>
ORDER BY
– ASC: tăng (mặc định) – DESC: giảm
50 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản – Sắp xếp
ORDER BY
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
51 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn cơ bản – Tổng kết
DISTINCT BETWEEN LIKE ESCAPE NGÀY GIỜ CONVERT NULL TÍCH CHÉO ĐẶT TÊN ORDER BY
52 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
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)
Kết quả trả về là tập hợp – Loại bỏ các bộ trùng nhau – Để giữ lại các bộ trùng nhau
• UNION ALL • INTERSECT ALL • EXCEPT ALL
53 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Phép toán tập hợp trong SQL
SELECT FROM WHERE <điều kiện>
UNION [ALL]
SELECT FROM WHERE <điều kiện>
SELECT FROM WHERE <điều kiện>
INTERSECT [ALL]
SELECT FROM WHERE <điều kiện>
SELECT FROM WHERE <điều kiện>
EXCEPT [ALL]
SELECT FROM WHERE <điều kiện>
54 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Phép toán tập hợp trong SQL
Cho biết các mã đề án có
– Nhân viên với họ là ‘Nguyen’ tham gia đề án
hoặc
– Trưởng phòng chủ trì đề án với họ là ‘Nguyen’
SELECT MADA
Phép hợp
FROM NHANVIEN, PHANCONG
WHERE MANV=MA_NVIEN AND HONV=‘Nguyen’
UNION
SELECT MADA
FROM NHANVIEN, PHONGBAN, DEAN
WHERE MANV=TRPHG AND MAPHG=PHONG AND HONV=‘Nguyen’
55 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Phép toán tập hợp trong SQL Tìm nhân viên có người thân cùng
tên và cùng giới tính
Phép giao
SELECT TENNV, PHAI, MANV FROM NHANVIEN
INTERSECT
SELECT TENTN, PHAI, MA_NVIEN FROM THANNHAN
SELECT NV.*
FROM NHANVIEN NV, THANNHAN TN
WHERE NV.MANV=TN.MA_NVIEN
AND NV.TENNV=TN.TENTN AND NV.PHAI=TN.PHAI
56 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Phép toán tập hợp trong SQL Tìm những nhân viên không có thân
nhân nào
Phép trừ
SELECT MANV FROM NHANVIEN
EXCEPT
SELECT MA_NVIEN AS MANV FROM THANNHAN
SELECT MANV
FROM NHANVIEN
WHERE MANV NOT IN
(SELECT MANV FROM THANNHAN)
57 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn lồng
Tìm nhân viên có người thân
SELECT DISTINCT NV.MANV,HONV + ‘ ’ + TENNV [HỌ TÊN]
FROM NHANVIEN NV, THANNHAN TN
WHERE NV.MANV=TN.MANV
SELECT MANV
FROM NHANVIEN
WHERE MANV IN
(SELECT MANV FROM THANNHAN)
58 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn lồng
SELECT
FROM
Câu truy vấn cha (Outer query)
WHERE (
SELECT
FROM
Câu truy vấn con (Subquery)
WHERE <điều kiện>)
59 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Các 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
–
• IN, NOT IN • ALL • ANY hoặc SOME – Kiểm tra sự tồn tại
Truy vấn lồng
• EXISTS • NOT EXISTS
60 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn lồng
SELECT *
FROM NHANVIEN
WHERE MLUONG >= ALL
(SELECT MLUONG FROM NHANVIEN)
SELECT *
FROM NHANVIEN
WHERE MLUONG >= ANY/SOME
(SELECT MLUONG FROM NHANVIEN)
61 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
1. Lồng phân cấp
Truy vấn lồng
– 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
2. 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
62 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn lồng – Phân cấp
SELECT MADA
FROM NHANVIEN NV, PHANCONG PC
WHERE NV.MANV=PC.MA_NVIEN AND NV.HONV=‘Nguyen’
UNION
SELECT MADA
FROM NHANVIEN NV, PHONGBAN PB, DEAN DA
WHERE NV.MANV=PB.TRPHG AND PB.MAPHG=DA.PHONG
AND NV.HONV=‘Nguyen’
Hãy tìm Đề án mà nhân viên tham gia đề án có họ ‘Nguyen’ HOẶC Đề án có trưởng phòng chủ trì đề án có họ ‘Nguyen’
63 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn lồng – Phân cấp
SELECT DISTINCT TENDA
FROM DEAN
WHERE MADA IN (
SELECT MADA
FROM NHANVIEN, PHANCONG
WHERE MANV=MA_NVIEN AND HONV=‘Nguyen’ )
OR
MADA IN (
SELECT MADA
FROM NHANVIEN, PHONGBAN PB, DEAN DA
WHERE MANV=TRPHG AND PB.MAPHG=DA.PHONG
AND HONV=‘Nguyen’ )
64 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn lồng – Phân cấp
SELECT *
FROM NHANVIEN
WHERE MANV NOT IN (
SELECT MA_NVIEN
Hãy tìm những nhân viên không có thân nhân
FROM THANNHAN )
SELECT *
FROM NHANVIEN
WHERE MANV <> ALL (
SELECT MA_NVIEN
FROM THANNHAN )
65 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn lồng – Phân cấp
1. Tìm những nhân viên có lương lớn hơn lương của ít nhất một nhân viên phòng 4
2. Tìm những nhân viên có lương lớn hơn lương của tất cả nhân viên phòng 4
3. Tìm những trưởng phòng có tối thiểu
một thân nhân
66 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn lồng – Phân cấp
SELECT NV1.*
SELECT *
FROM NHANVIEN NV1, NHANVIEN NV2
FROM NHANVIEN
WHERE LUONG > ANY (
WHERE NV1.LUONG > NV2.LUONG AND NV2.PHG=4
SELECT LUONG
FROM NHANVIEN
SELECT *
WHERE PHG=4 )
FROM NHANVIEN
WHERE LUONG > ALL (
SELECT *
SELECT LUONG
FROM NHANVIEN
FROM NHANVIEN
WHERE MANV IN (SELECT MA_NVIEN FROM THANNHAN)
WHERE PHG=4 )
AND MANV IN (SELECT TRPHG FROM PHONGBAN)
67 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn lồng – Tương quan
SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHONG=MAPHG
SELECT MANV, TENNV
Tìm nhân viên Phòng nghiên cứu
FROM NHANVIEN
WHERE EXISTS (
SELECT *
FROM PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHONG=MAPHG )
68 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn lồng – Tương quan
SELECT *
FROM NHANVIEN NV
Tìm nhân viên có thân nhân cùng tên, cùng phái
WHERE EXISTS (
SELECT *
FROM THANNHAN TN
WHERE NV.MANV=TN.MA_NVIEN
AND NV.TENNV=TN.TENTN
AND NV.PHAI=TN.PHAI )
69 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn lồng – Tương quan
1. Tìm những nhân viên không có thân
nhân nào
2. Tìm những nhân viên có lương lớn hơn lương của ít nhất một nhân viên phòng 4
3. Tìm những trưởng phòng có tối thiểu
một thân nhân
70 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Truy vấn lồng – Tương quan
IN
– IN
– 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 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Phép chia trong SQL
S D E A B C R A B C D E RS
bi
ai
a 1 a a a 1
a
b
1
b 1 a a a 1
a a 1
a b 3
a a 1
a b 1
a b 1
RS là tập các giá trị ai trong R sao cho không có giá trị bi nào trong S làm cho bộ (ai, bi) không tồn tại trong R
72 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
SELECT R1.A, R1.B, R1.C
Phép chia trong SQL
FROM R R1
WHERE NOT EXISTS (
SELECT *
FROM S
WHERE NOT EXISTS (
Sử dụng NOT EXISTS để biểu diễn
SELECT *
FROM R R2
WHERE R2.D=S.D AND R2.E=S.E
AND R1.A=R2.A AND R1.B=R2.B AND R1.C=R2.C
)
)
73 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Phép chia trong SQL
Sử dụng truy vấn lồng để biểu diễn phép chia
SELECT R.A,R.B,R.C FROM R WHERE R.A+R.B+R.C NOT IN
(
SELECT Q2.A+Q2.B+Q2.C FROM (SELECT R.A,R.B,R.C,S.* FROM R,S) Q2 WHERE Q2.A+Q2.B+Q2.C+Q2.D+Q2.E NOT IN
(SELECT R.A+R.B+R.C+R.D+R.E FROM R)
) -- Q3 LÀ A,B,C KHÔNG THAM GIA ĐẦY ĐỦ VÀO S
74 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Phép chia trong SQL
Sử dụng hàm count
SELECT MANV,COUNT(MADA) FROM PHANCONG GROUP BY MANV HAVING COUNT(MADA)=(SELECT COUNT(MADA) FROM DEAN)
75 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Phép chia trong SQL
Tìm tên các nhân viên được phân công làm tất
cả các đề án
– Tìm tên các nhân viên mà không có đề án nào là
không được phân công làm
– Tập bị chia: PHANCONG(MA_NVIEN, MADA)
– Tập chia: DEAN(MADA)
– Tập kết quả: KQ(MA_NVIEN)
– Kết KQ với NHANVIEN để lấy ra TENNV
76 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Phép chia trong SQL
SELECT NV.TENNV
FROM NHANVIEN NV, PHANCONG PC1
WHERE NV.MANV=PC1.MANV
AND NOT EXISTS (
SELECT *
FROM DEAN DA
WHERE NOT EXISTS (
SELECT *
FROM PHANCONG PC2
WHERE PC2.MADA=DA.MADA
AND PC1.MANV=PC2.MANV ))
77 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Hàm kết hợp
COUNT
1. COUNT(*) đếm số dòng
2. COUNT() đếm số giá trị khác NULL của
thuộc tính
3. COUNT(DISTINCT ) đế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
78 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Hàm kết hợp
SELECT SUM(LUONG), MAX(LUONG), MIN(LUONG), AVG(LUONG)
FROM NHANVIEN
SELECT COUNT(*) AS SL_NV
FROM NHANVIEN, PHONGBAN
WHERE PHG=MAPHG AND TENPHG=‘Nghien cuu’
79 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Gom nhóm
Cú pháp
SELECT
FROM
WHERE <điều kiện>
GROUP BY
Sau khi gom nhóm: mỗi nhóm các bộ sẽ có cùng giá trị tại các thuộc tính gom nhóm
80 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Gom nhóm
SELECT PHG, COUNT(*) AS SL_NV
FROM NHANVIEN
GROUP BY PHG
SELECT TENPHG, COUNT(*) AS SL_NV
FROM NHANVIEN, PHONGBAN
WHERE PHG=MAPHG
SELECT cột nào GROUP BY cột đó (ngoại trừ hàm kết hợp)
GROUP BY TENPHG
81 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Gom nhóm
MA_NVIEN SODA THOIGIAN
123456789 1 32.5
333445555
2
10.0
123456789 2 7.5
333445555 3 10.0
333445555 10 10.0
888665555 20 20.0
1. 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
987987987 10 35.0
987987987 30 5.0
2. Cho
biết
987654321 30 20.0
987654321 20 15.0
453453453 1 20.0
những nhân viên tham gia từ 2 đề án trở lên
453453453 2 20.0
82 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Gom nhóm
SELECT
FROM
WHERE <điều kiện>
GROUP BY
HAVING <điều kiện trên nhóm>
SELECT MANV
FROM PHANCONG
GROUP BY MANV
HAVING COUNT(*) >= 2
83 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Gom nhóm
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 PHONG, AVG(LUONG) AS LUONG_TB
FROM NHANVIEN
SELECT TENPHG, AVG(LUONG) AS LUONG_TB
GROUP BY PHONG
FROM NHANVIEN, PHONGBAN
HAVING AVG(LUONG) > 20000
WHERE PHG=MAPHG
GROUP BY TENPHG
HAVING AVG(LUONG) > 20000
84 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Gom nhóm
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 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Gom nhóm – Thứ tự câu lệnh
Chọn ra những dòng thỏa điều kiện trong
mệnh đề WHERE
Những dòng này sẽ được gom thành nhiều nhóm tương ứng với mệnh đề GROUP BY Áp dụng các hàm kết hợp cho mỗi nhóm Bỏ qua những nhóm không thỏa điều kiện
trong mệnh đề HAVING
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 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Một số dạng truy vấn khác
87 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Một số dạng truy vấn khác
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
SELECT
FROM R1, R2, () AS tên_bảng
WHERE <điều kiện>
88 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Một số dạng truy vấn khác
Kết bằng
SELECT
FROM R1 [INNER] JOIN R2 ON
WHERE <điều kiện>
FULL JOIN
Kết ngoài
SELECT
FROM R1 LEFT|RIGHT [OUTER] JOIN R2 ON
FULL
WHERE <điều kiện>
89 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
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
CASE
WHEN THEN
WHEN THEN
…
[ELSE
END
90 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
SELECT HONV, TENNV
FROM NHANVIEN
WHERE YEAR(GETDATE()) – YEAR(NGSINH) >= (CASE PHAI
WHEN 'Nam' THEN 60
WHEN 'Nu' THEN 55
END )
SELECT HONV, TENNV,
( CASE PHAI
CASE
WHEN 'Nam' THEN YEAR(NGSINH) + 60
WHEN 'Nu‘ THEN YEAR(NGSINH) + 55
END ) AS NAMVEHUU
FROM NHANVIEN
91 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
QUY TRÌNH XỬ LÝ CÂU TRUY VẤN
92 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
93 3/16/2015
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Cross-Tab
SELECT Year,
SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1, SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2, SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3, SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4
FROM Pivot GROUP BY Year
94 3/16/2015
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
THÊM DỮ LIỆU VÀO BẢNG
Sử dụng để thêm 1 hay nhiều dòng vào bảng Cú pháp:
INSERT INTO ()
VALUES ()
Ví dụ:
95 3/16/2015
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
THÊM DỮ LIỆU VÀO BẢNG
INSERT INTO NHANVIEN(HONV, TENLOT, TENNV, MANV)
VALUES (N‘Lê’, N‘Văn’, N‘Tuyển’, ‘635635635’)
INSERT INTO NHANVIEN(HONV, TENLOT, TENNV, MANV, DCHI)
VALUES (‘Le’, ‘Van’, ‘Tuyen’, ‘635635635’, NULL)
INSERT INTO NHANVIEN
VALUES (‘Le’, ‘Van’, ‘Tuyen’, ‘635635635’, ’12/30/1952’, ’98 HV’, ‘Nam’, ‘37000’, 4)
96 3/16/2015
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
THÊM DỮ LIỆU VÀO BẢNG
Thứ tự các giá trị phải trùng với thứ tự các
cột
Có thể thêm giá trị NULL ở những thuộc tính
không là khóa chính và NOT NULL
Câu lệnh INSERT sẽ gặp lỗi nếu vi phạm
RBTV – Khóa chính – Tham chiếu – NOT NULL - các thuộc tính có ràng buộc NOT
NULL bắt buộc phải có giá trị
97 3/16/2015
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
THÊM NHIỀU DÒNG DL VÀO BẢNG
INSERT INTO ()
CREATE TABLE THONGKE_PB (
TENPHG VARCHAR(20), SL_NV INT, LUONG_TC INT
)
INSERT INTO THONGKE_PB(TENPHG, SL_NV, LUONG_TC)
SELECT TENPHG, COUNT(MANV), SUM(LUONG) FROM NHANVIEN, PHONGBAN WHERE PHG=MAPHG GROUP BY TENPHG
98 3/16/2015
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
XÓA DỮ LIỆU TRONG BẢNG
DELETE FROM
[WHERE <điều kiện>]
DELETE FROM NHANVIEN
DELETE FROM NHANVIEN
DELETE FROM NHANVIEN
WHERE MANV=‘345345345’
WHERE HONV=‘Tran’
99 3/16/2015
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
XÓA DỮ LIỆU TRONG BẢNG
Xóa nhân viên
ở phòng nghiên cứu
DELETE FROM NHANVIEN
WHERE PHG IN (
SELECT MAPHG
FROM PHONGBAN
WHERE TENPHG=‘Nghien cuu’)
100 3/16/2015
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
XÓA DỮ LIỆU TRONG BẢNG Số lượng số dòng bị xóa phụ thuộc vào điều kiện ở
mệnh đề WHERE
Nếu không chỉ định điều kiện ở mệnh đề WHERE, tất
cả các dòng trong bảng sẽ bị xóa
Lệnh DELETE có thể gây ra vi phạm RB tham chiếu
– Không cho xóa
– Xóa luôn những dòng có giá trị đang tham chiếu
đến
• CASCADE
– Đặt NULL cho những giá trị tham chiếu
101 3/16/2015
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
XÓA DỮ LIỆU TRONG BẢNG
MANV
HONV
TENLOT
TENNV
NGSINH
DCHI
PHAI
LUONG
MA_NQL
PHG
333445555 Nguyen Thanh Tung 12/08/1955 638 NVC Q5 40000 888665555 Nam 5
987987987 Nguyen Manh Hung 09/15/1962 Ba Ria VT 38000 333445555 Nam 5
999887777
Bui
Ngoc
Hang
07/19/1968
33 NTH Q1
38000
987654321
Nu
4
453453453 Tran Thanh Tam 07/31/1972 543 MTL Q1 25000 333445555 Nu 5
987654321 Le Quynh Nhu 07620/1951 219 TD Q3 43000 888665555 Nu 4
987987987 Tran Hong Quang 04/08/1969 980 LHP Q5 25000 987654321 Nam 4
888665555 Pham Van Vinh 11/10/1945 450 TV HN 55000 NULL Nam 1
MA_NVIEN SODA THOIGIAN
333445555 10 10.0
987987987
10
35.0
888665555 20 20.0
987987987 30 5.0
987654321 30 20.0
453453453 1 20.0 102 3/16/2015
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
CẬP NHẬT DỮ LIỆU TRONG BẢNG
UPDATE NHANVIEN
UPDATE
SET NGSINH=’08/12/1965’
SET =,
WHERE MANV=‘333445555’
…
UPDATE NHANVIEN
[WHERE <điều kiện>]
SET LUONG=LUONG*1.1
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
103 3/16/2015
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
CẬP NHẬT DỮ LIỆU TRONG BẢNG
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
Nếu không chỉ định điều kiện ở mệnh đề WHERE,
tất cả các dòng trong bảng sẽ bị cập nhật
Lệnh UPDATE có thể gây ra vi phạm RB tham
chiếu – Không cho sửa – Sửa luôn những dòng có giá trị đang tham
chiếu đến
• CASCADE
104 3/16/2015
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
KHUNG NHÌN - VIEW
Bảng là một quan hệ được tổ chức lưu
trữ vật lý trong CSDL
Khung nhìn cũng là một quan hệ – Không được lưu trữ vật lý (bảng ảo) – Không chứa dữ liệu – Được định nghĩa từ những bảng khác – Có thể truy vấn hay cập nhật thông qua
khung nhìn
105 3/16/2015
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
KHUNG NHÌN - VIEW
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
106 3/16/2015
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
KHUNG NHÌN - VIEW
Cú pháp
CREATE VIEW AS
DROP VIEW
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
107 3/16/2015
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
KHUNG NHÌN - VIEW
CREATE VIEW NV_P5 AS
SELECT MANV, HONV, TENLOT, TENVN
FROM NHANVIEN
WHERE PHG=5
CREATE VIEW TONGLNG_SLNV_PB AS
SELECT MAPHG, TENPHG, COUNT(*) AS SLNV, SUM(LUONG) AS TONGLNG
FROM NHANVIEN, PHONGBAN
WHERE PHG=MAPHG
GROUP BY TENPHG, MAPHG
108 3/16/2015
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
TRUY VẤN TRÊN KHUNG NHÌN
SELECT TENNV
SELECT HONV, TENVN, TENDA, THOIGIAN
FROM NV_P5
FROM NV_P5, PHANCONG, DEAN
WHERE HONV LIKE ‘Nguyen’
WHERE MANV=MA_NVIEN AND SODA=MADA
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
Có thể viết câu truy vấn dữ liệu
từ khung nhìn và bảng
109 3/16/2015
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
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
Không thể cập nhật dữ liệu nếu
– Khung nhìn có dùng từ khóa DISTINCT – Khung nhìn có sử dụng các hàm kết hợp – Khung nhìn có mệnh đề SELECT mở rộng – Khung nhìn được xây dựng từ bảng có RB trên
cột
– Khung nhìn được xây dựng từ nhiều bảng
110 3/16/2015
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
CẬP NHẬT TRÊN KHUNG NHÌN
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’
111 3/16/2015
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
INDEX – CHỈ MỤC Chỉ mục trên thuộc tính A là một cấu trúc dữ liệu làm cho việc tìm kiếm mẫu tin có chứa A hiệu quả hơn
SELECT *
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nu’
112 3/16/2015
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
INDEX – CHỈ MỤC
Cú pháp
CREATE INDEX ON ()
DROP INDEX
Ví dụ
CREATE INDEX PHG_IND ON NHANVIEN(PHG)
CREATE INDEX PHG_PHAI_IND ON NHANVIEN(PHG, PHAI)
113 3/16/2015
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
INDEX – CHỈ MỤC
Nhận xét
– Tìm kiếm nhanh trong trường hợp so sánh
với hằng số và phép kết
– Làm chậm đi các thao tác thêm, xóa và
sửa
– Tốn chi phí
• Lưu trữ chỉ mục • Truy xuất đĩa nhiều
Chọn lựa cài đặt chỉ mục hợp lý???
114 3/16/2015