Upload
shareslidenet010
View
81
Download
4
Embed Size (px)
Citation preview
CHƯƠNG 5NGÔ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
3/22/20132
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/22/20133
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
3/22/20134
KNOWLEDGE FOR SHARE
1. Giới thiệu
SQL gồm– Đị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ữ– Bảng ~ quan hệ– Cột ~ thuộc tính– Dòng ~ bộ
3/22/20135
Lý thuyếtChuẩn SQL-92,
SQL Server 2000
Minh họaSQL Server 2000
KNOWLEDGE FOR SHARE
1. Giới thiệu về SQL
3/22/20136
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).
KNOWLEDGE FOR SHARE
1. Giới thiệu về SQL
3/22/20137
KNOWLEDGE FOR SHARE
2. Kiểu dữ liệu
3/22/20138
Kiểu dữ liệu trong SQL Server
KNOWLEDGE FOR SHARE
2. Kiểu dữ liệu
3/22/20139
Kiểu dữ liệu trong SQL Server
KNOWLEDGE FOR SHARE
2. Kiểu dữ liệu
3/22/201310
Kiểu dữ liệu trong SQL Server
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– …
3/22/201311
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu Để đị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
3/22/201312
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>]
)
Tạo bảng
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
3/22/201313
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
)
Tạo bảng
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
3/22/201314
<RBTV>NOT NULLNULLUNIQUE (khóa chỉ định)DEFAULTPRIMARY KEYFOREIGN KEY / REFERENCESCHECK (đk ràng buộc)
Đặt tên cho RBTVCONSTRAINT <Ten_RBTV> <RBTV>
Tạo bảng
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
3/22/201315
CREATE TABLE NHANVIEN(
HONV NVARCHAR(10) NOT NULL,TENLOT NVARCHAR(20) NOT NULL,TENNV NVARCHAR(10) NOT NULL,MANV CHAR(9) PRIMARY KEY,NGSINH DATETIME,DCHI NVARCHAR(50),PHAI NCHAR(4) CHECK (PHAI IN (N‘Nam’, N‘Nữ’)),LUONG INT DEFAULT (10000),MA_NQL CHAR(9),PHG INT
)
Tạo bảng
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
3/22/201316
CREATE TABLE PHONGBAN(
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)
)
Tạo bảng
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
3/22/201317
CREATE TABLE NHANVIEN(
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
)
Tạo bảng
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
3/22/201318
CREATE TABLE PHANCONG
(
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)
)
Tạo bảng
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
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
3/22/201319
Sửa bảng
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
3/22/201320
Sửa bảng
ALTER TABLE <Tên_bảng> ADD COLUMN<Tên_cột> <Kiểu_dữ_liệu> [<RBTV>]
ALTER TABLE <Tên_bảng> DROP COLUMN <Tên_cột>
ALTER TABLE <Tên_bảng> ALTER COLUMN<Tên_cột> <Kiểu_dữ_liệu_mới>
ALTER TABLE <Tên_bảng> ADDCONSTRAINT <Ten_RBTV> <RBTV>,CONSTRAINT <Ten_RBTV> <RBTV>,…
ALTER TABLE <Tên_bảng> DROP <Tên_RBTV>
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
3/22/201321
Sửa bảng
ALTER TABLE NHANVIENADD NGHENGHIEP CHAR(20)
ALTER TABLE NHANVIENDROP COLUMN NGHENGHIEP
ALTER TABLE NHANVIENALTER COLUMN NGHENGHIEP CHAR(50)
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
3/22/201322
CREATE TABLE PHONGBAN(
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)
Sửa bảng
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
Đượ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
Ví dụ
3/22/201323
Xóa bảng
DROP TABLE <Tên_bảng>
DROP TABLE NHANVIEN
DROP TABLE PHONGBAN
DROP TABLE PHANCONG
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
3/22/201324
Xóa bảng
NHANVIEN
TENNVHONV TENLOT MANV NGSINH DCHI PHAI LUONG MA_NQL PHG
PHONGBAN
TRPHGTENPHG MAPHG NG_NHANCHUC
KNOWLEDGE FOR SHARE
3. Định nghĩa dữ liệu
Tạo ra một kiểu dữ liệu mới kế thừanhững kiểu dữ liệu có sẳn Cú pháp
Ví dụ
3/22/201325
Tạo miền GT
CREATE DOMAIN <Tên_kdl_mới> AS <Kiểu_dữ_liệu>
CREATE DOMAIN kieu_MANV AS CHAR(9)
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
3/22/201326
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
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)
3/22/201327
Phép toán ĐSQH Một số bổ sung
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
<danh sách các cột>– Tên các cột cần được hiển thị trong kết quả truy vấn
<danh sách các bảng>– 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
3/22/201328
Truy vấn cơ bảnSELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <điều kiện>
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201329
Truy vấn cơ bản
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <điều kiện>
SELECT L
FROM R,S
WHERE C
L (C (RxS))
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201330
Truy vấn cơ bản
SELECT *
FROM NHANVIEN
WHERE PHG=5
Lấy tất cả các cột củaquan hệ kết quả
PHG=5 (NHANVIEN)
TENNVHONV NGSINH DCHI PHAI LUONG PHG
TungNguyen 12/08/1955 638 NVC Q5 Nam 40000 5
HungNguyen 09/15/1962 Ba Ria VT Nam 38000 5
333445555
987987987
MANV MA_NQL
888665555
333445555
TENLOT
Thanh
Manh
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201331
Truy vấn cơ bảnSELECT MANV, HONV, TENLOT, TENNV
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
MANV,HONV,TENLOT,TENNV(PHG=5 PHAI=‘Nam’ (NHANVIEN))
TENNVHONV
TungNguyen
HungNguyen
TENLOT
Thanh
Manh
333445555
987987987
MANV
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201332
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’
MANV,HỌ,TÊN LÓT,TÊN(MANV,HONV,TENLOT,TENNV(PHG=5PHAI=‘Nam’(NHANVIEN)))
TÊNHỌ
TungNguyen
HungNguyen
TÊN LÓT
Thanh
Manh
333445555
987987987
MANV
Tên bí danh
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201333
Truy vấn cơ bản
SELECT MANV, HONV + ‘ ’ + TENLOT + ‘ ’ + TENNV AS [HỌ TÊN]
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
HỌ TÊN
Nguyen Thanh Tung
Nguyen Manh Hung
333445555
987987987
MANV
Mở rộng
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201334
Truy vấn cơ bảnSELECT MANV, LUONG*1.1 AS [LUONG10%]
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
MANV,LUONG10%(MANV,LUONG*1.1(PHG=5PHAI=‘Nam’(NHANVIEN)))
LUONG10%
33000
27500
333445555
987987987
MANV
Mở rộng
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201335
Truy vấn cơ bản
SELECT LUONG
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
Loại bỏ các dòng trùng nhau
- Tốn chi phí
- Người dùng muốn thấy
LUONG
30000
25000
25000
38000
LUONG
30000
25000
38000
SELECT DISTINCT LUONG
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Cho biết MANV và TENNV làm việc ởphòng ‘Nghien cuu’
3/22/201336
Truy vấn cơ bản
R1 NHANVIEN PHG=MAPHG PHONGBAN
KQMANV, TENNV (TENPHG=‘Nghien cuu’(R1))
SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG
Biểu thức luận lý
TRUE TRUE
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201337
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
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201338
Truy vấn cơ bản
SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG>=20000 AND
LUONG<=30000
BETWEEN
SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG BETWEEN 20000 AND 30000
NOT BETWEEN
SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG NOT BETWEEN 20000 AND 30000
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201339
Truy vấn cơ bản
SELECT MANV, TENNV
FROM NHANVIEN
WHERE DCHI LIKE ‘Nguyen _ _ _ _’
LIKE
SELECT MANV, TENNV
FROM NHANVIEN
WHERE DCHI LIKE ‘Nguyen %’
Chuỗi bất kỳ
Ký tự bất kỳ
SELECT MANV, TENNV
FROM NHANVIEN
WHERE HONV NOT NOT LIKE ‘Nguyen’
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201340
Truy vấn cơ bảnSELECT MANV, TENNV
FROM NHANVIEN
WHERE DCHI LIKE ‘% Nguyens_%’ ESCAPE ‘s’
ESCAPE
‘Nguyen_’
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201341
Truy vấn cơ bản
Ngày giờ
SELECT MANV, TENNV
FROM NHANVIEN
WHERE NGSINH BETWEEN ‘1955-12-08’ AND ‘1966-07-19’
YYYY-MM-DD
MM/DD/YYYY
‘1955-12-08’
’12/08/1955’
‘December 8, 1955’
HH:MI:SS’17:30:00’
’05:30 PM’
‘1955-12-08 17:30:00’
SELECT MANV, TENNV
FROM NHANVIEN
WHERE NGSINH = ‘1955-12-08’
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
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ứcsang 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 sangkiểu chuỗi nhằm quy định khuôn dạng dữ liệu đượchiển thị.
3/22/201342
Truy vấn cơ bảnHàm CONVERT
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201343
Truy vấn cơ bảnHOADON(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
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201344
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
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
3/22/201345
Truy vấn cơ bảnNULL
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201346
Truy vấn cơ bản
NULLSELECT MANV, TENNV
FROM NHANVIEN
WHERE MA_NQL IS NULL
SELECT MANV, TENNV
FROM NHANVIEN
WHERE MA_NQL IS NOT NULL
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201347
Truy vấn cơ bản
WHERE TRUE
SELECT MANV, MAPHG
FROM NHANVIEN, PHONGBAN
Không sử dụngmệnh đề WHERE(Tích chéo RxS)
MAPHG
1
4
333445555
333445555
MANV
5
1987987987
987987987
333445555
4
5987987987
… …
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201348
Truy vấn cơ bản
SELECT TENPHG, DIADIEM
FROM PHONGBAN, DDIEM_PHG
WHERE MAPHG=MAPHG
Tên bí danh
SELECT TENPHG, DIADIEM
FROM PHONGBAN PB, DDIEM_PHG DD
WHERE PB.MAPHG=DD.MAPHG
SELECT TENNV, NGSINH, TENTN, NGSINH
FROM NHANVIEN, THANNHAN
WHERE MANV=MA_NVIENSELECT TENNV, NV.NGSINH, TENTN, TN.NGSINH
FROM NHANVIEN NV, THANNHAN TN
WHERE MANV=MA_NVIEN
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
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ùngvớ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áchtrực tiếp nhân viên đó
4. Tìm họ tên của những nhân viên được “Nguyen ThanhTung” phụ trách trực tiếp
3/22/201349
Truy vấn cơ bản – Bài tập
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Dùng để hiển thị kết quả câu truy vấntheo một thứ tự nào đó Cú pháp
– ASC: tăng (mặc định)– DESC: giảm
3/22/2013 50
Truy vấn cơ bản – Sắp xế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>
ORDER BY
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/2013 51
Truy vấn cơ bản – Sắp xếpORDER BYSELECT MA_NVIEN, SODA
FROM PHANCONG
ORDER BY MA_NVIEN DESC, SODA
SODA
10
30
999887777
999887777
MA_NVIEN
10
30987987987
987654321
987987987
10
20987654321
30987654321
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
DISTINCT BETWEEN LIKE ESCAPE NGÀY GIỜ CONVERT NULL TÍCH CHÉO ĐẶT TÊN ORDER BY
3/22/2013 52
Truy vấn cơ bản – Tổng kết
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
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
3/22/2013 53
Phép toán tập hợp trong SQL
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/2013 54
Phép toán tập hợp trong SQLSELECT <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>
SELECT <ds cột> FROM <ds bảng> WHERE <điều kiện>
INTERSECT [ALL]
SELECT <ds cột> FROM <ds bảng> WHERE <điều kiện>
SELECT <ds cột> FROM <ds bảng> WHERE <điều kiện>
EXCEPT [ALL]
SELECT <ds cột> FROM <ds bảng> WHERE <điều kiện>
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
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’
3/22/2013 55
Phép toán tập hợp trong SQL
SELECT MADA
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’
Phép hợp
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Tìm nhân viên có người thân cùngtên và cùng giới tính
3/22/2013 56
Phép toán tập hợp trong SQL
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
Phép giao
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Tìm những nhân viên không có thânnhân nào
3/22/2013 57
Phép toán tập hợp trong SQL
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)
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Tìm nhân viên có người thân
3/22/201358
Truy vấn lồng
SELECT MANV
FROM NHANVIEN
WHERE MANV IN
(SELECT MANV FROM THANNHAN)
SELECT DISTINCT NV.MANV,HONV + ‘ ’ + TENNV [HỌ TÊN]
FROM NHANVIEN NV, THANNHAN TN
WHERE NV.MANV=TN.MANV
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201359
Truy vấn lồng
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <so sánh tập hợp> (
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <điều kiện>)
Câu truy vấn cha(Outer query)
Câu truy vấn con(Subquery)
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
– <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
3/22/201360
Truy vấn lồng
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201361
SELECT *
FROM NHANVIEN
WHERE MLUONG >= ALL
(SELECT MLUONG FROM NHANVIEN)
SELECT *
FROM NHANVIEN
WHERE MLUONG >= ANY/SOME
(SELECT MLUONG FROM NHANVIEN)
Truy vấn lồng
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu1. 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ệntrước
2. Lồng tương quan
– Mệnh đề WHERE của truy vấn con tham chiếu ít nhấtmộ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ệnnhiều lần, mỗi lần tương ứng với một bộ của truy vấncha
3/22/201362
Truy vấn lồng
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201363
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’
Truy vấn lồng – Phân cấpSELECT 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’
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201364
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’ )
Truy vấn lồng – Phân cấp
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/2013 65
Truy vấn lồng – Phân cấpSELECT *
FROM NHANVIEN
WHERE MANV NOT IN (
SELECT MA_NVIEN
FROM THANNHAN )
SELECT *
FROM NHANVIEN
WHERE MANV <> ALL (
SELECT MA_NVIEN
FROM THANNHAN )
Hãy tìmnhững nhân viên
không có thân nhân
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
1. Tìm những nhân viên có lương lớn hơnlương của ít nhất một nhân viênphòng 4
2. Tìm những nhân viên có lương lớn hơnlươ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ểumột thân nhân
3/22/201366
Truy vấn lồng – Phân cấp
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201367
Truy vấn lồng – Phân cấpSELECT *
FROM NHANVIEN
WHERE LUONG > ANY (
SELECT LUONG
FROM NHANVIEN
WHERE PHG=4 )
SELECT NV1.*
FROM NHANVIEN NV1, NHANVIEN NV2
WHERE NV1.LUONG > NV2.LUONG ANDNV2.PHG=4
SELECT *
FROM NHANVIEN
WHERE LUONG > ALL (
SELECT LUONG
FROM NHANVIEN
WHERE PHG=4 )
SELECT *
FROM NHANVIEN
WHERE MANV IN (SELECT MA_NVIEN FROM THANNHAN)
AND MANV IN (SELECT TRPHG FROM PHONGBAN)
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201368
SELECT MANV, TENNV
FROM NHANVIEN
WHERE EXISTS (
SELECT *
FROM PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHONG=MAPHG )
Truy vấn lồng – Tương quanSELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHONG=MAPHG
Tìm nhân viênPhòng nghiên cứu
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201369
Truy vấn lồng – Tương quan
Tìm nhân viêncó thân nhân
cùng tên, cùng phái
SELECT *
FROM NHANVIEN NV
WHERE EXISTS (
SELECT *
FROM THANNHAN TN
WHERE NV.MANV=TN.MA_NVIEN
AND NV.TENNV=TN.TENTN
AND NV.PHAI=TN.PHAI )
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
1. Tìm những nhân viên không có thânnhân nào
2. Tìm những nhân viên có lương lớn hơnlương của ít nhất một nhân viên phòng4
3. Tìm những trưởng phòng có tối thiểumột thân nhân
3/22/201370
Truy vấn lồng – Tương quan
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
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
3/22/201371
Truy vấn lồng – Tương quan
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
RS là tập các giá trị ai trong R sao chokhông có giá trị bi nào trong S làm cho bộ(ai, bi) không tồn tại trong R
3/22/201372
Phép chia trong SQLA B
a
a
a
a
a
a
a
a
C D
a
b
a
a
b
a
b
b
E
1
3
1
1
1
1
1
1
R D E
a
S
b
1
1
A B C
a
a
RS
aibi
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201373
SELECT R1.A, R1.B, R1.C
FROM R R1
WHERE NOT EXISTS (
SELECT *
FROM S
WHERE NOT EXISTS (
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
)
)
Sử dụngNOT EXISTSđể biểu diễn
Phép chia trong SQL
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201374
Phép chia trong SQL
SELECT R.A,R.B,R.CFROM RWHERE R.A+R.B+R.C NOT IN
( SELECT Q2.A+Q2.B+Q2.CFROM (SELECT R.A,R.B,R.C,S.* FROM R,S) Q2WHERE 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
Sử dụng truy vấn lồngđể biểu diễn phép chia
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201375
Phép chia trong SQL
SELECT MANV,COUNT(MADA)FROM PHANCONGGROUP BY MANVHAVING COUNT(MADA)=(SELECT COUNT(MADA) FROM DEAN)
Sử dụng hàm count
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Tìm tên các nhân viên được phân công làm tấtcả 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
3/22/201376
Phép chia trong SQL
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201377
Phép chia trong SQLSELECT 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 ))
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
COUNT1. COUNT(*) đếm số dòng2. COUNT(<tên thuộc tính>) đếm số giá trị khác NULL của
thuộc tính3. 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
3/22/201378
Hàm kết hợp
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201379
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’
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Cú pháp
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ínhgom nhóm
3/22/201380
Gom nhóm
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <điều kiện>
GROUP BY <danh sách các cột gom nhóm>
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/201381
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
GROUP BY TENPHG
SELECTcột nào
GROUP BYcột đó
(ngoại trừ hàm kết hợp)
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
1. Với mỗi nhân viêncho biết mã số, họtên, số lượng đề ánvà tổng thời gianmà họ tham gia
2. Cho biết nhữngnhân viên tham giatừ 2 đề án trở lên
3/22/2013 82
Gom nhómSODA THOIGIAN
1 32.5
2 7.5
123456789
123456789
MA_NVIEN
2 10.0
3 10.0
333445555
333445555
10 10.0333445555
20 20.0
10 35.0
888665555
987987987
30 5.0987987987
30 20.0987654321
20 15.0987654321
1 20.0453453453
2 20.0453453453
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/2013 83
Gom nhómSELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <điều kiện>
GROUP BY <danh sách các cột gom nhóm>
HAVING <điều kiện trên nhóm>
SELECT MANV
FROM PHANCONG
GROUP BY MANV
HAVING COUNT(*) >= 2
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/2013 84
Gom nhóm
SELECT PHONG, AVG(LUONG) AS LUONG_TB
FROM NHANVIEN
GROUP BY PHONG
HAVING AVG(LUONG) > 20000
SELECT TENPHG, AVG(LUONG) AS LUONG_TB
FROM NHANVIEN, PHONGBAN
WHERE PHG=MAPHG
GROUP BY TENPHG
HAVING AVG(LUONG) > 20000
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
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
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ệntrong 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
3/22/2013 85
Gom nhóm
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Chọn ra những dòng thỏa điều kiện trongmệnh đề WHERE
Những dòng này sẽ được gom thành nhiềunhó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
3/22/2013 86
Gom nhóm – Thứ tự câu lệnh
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/2013 87
Một số dạng truy vấn khác
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Kết quả trả về của một câu truy vấnphụ 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
3/22/2013 88
Một số dạng truy vấn khác
SELECT <danh sách các cột>
FROM R1, R2, (<truy vấn con>) AS tên_bảng
WHERE <điều kiện>
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Kết bằng
Kết ngoài
3/22/2013 89
Một số dạng truy vấn khác
SELECT <danh sách các cột>
FROM R1 [INNER] JOIN R2 ON <biểu thức>
WHERE <điều kiện>
SELECT <danh sách các cột>
FROM R1 LEFT|RIGHT [OUTER] JOIN R2 ON <biểu thức>
WHERE <điều kiện>
FULL JOIN
FULL
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
Cho phép kiểm tra điều kiện và xuấtthông tin theo từng trường hợp Cú pháp
3/22/2013 90
Cấu trúc CASE
CASE <tên cột>
WHEN <giá trị> THEN <biểu thức>
WHEN <giá trị> THEN <biểu thức>
…
[ELSE <biểu thức>]
END
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/2013 91
CASE
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
WHEN 'Nam' THEN YEAR(NGSINH) + 60
WHEN 'Nu‘ THEN YEAR(NGSINH) + 55
END ) AS NAMVEHUU
FROM NHANVIEN
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/2013 92
QUY TRÌNH XỬ LÝ CÂU TRUY VẤN
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/2013 93
KNOWLEDGE FOR SHARE
4. Truy vấn dữ liệu
3/22/2013 94
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 PivotGROUP BY Year
Cross-Tab
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
Sử dụng để thêm 1 hay nhiều dòng vào bảng Cú pháp:
Ví dụ:
3/22/201395
THÊM DỮ LIỆU VÀO BẢNG
INSERT INTO <tên bảng>(<danh sách các thuộc tính>)
VALUES (<danh sách các giá trị>)
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
3/22/201396
THÊM DỮ LIỆU VÀO BẢNGINSERT INTO NHANVIEN(HONV, TENLOT, TENNV, MANV)
VALUES (N‘Lê’, N‘Văn’, N‘Tuyển’, ‘635635635’)
INSERT INTO NHANVIEN
VALUES (‘Le’, ‘Van’, ‘Tuyen’, ‘635635635’, ’12/30/1952’, ’98 HV’, ‘Nam’, ‘37000’, 4)
INSERT INTO NHANVIEN(HONV, TENLOT, TENNV, MANV, DCHI)
VALUES (‘Le’, ‘Van’, ‘Tuyen’, ‘635635635’, NULL)
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
Thứ tự các giá trị phải trùng với thứ tự cáccộ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ị
3/22/201397
THÊM DỮ LIỆU VÀO BẢNG
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
3/22/201398
THÊM NHIỀU DÒNG DL VÀO BẢNGINSERT INTO <tên bảng>(<danh sách các thuộc tính>)
<câu truy vấn con>
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, PHONGBANWHERE PHG=MAPHGGROUP BY TENPHG
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
3/22/201399
XÓA DỮ LIỆU TRONG BẢNG
DELETE FROM <tên bảng>
[WHERE <điều kiện>]
DELETE FROM NHANVIEN
WHERE HONV=‘Tran’
DELETE FROM NHANVIEN
WHERE MANV=‘345345345’
DELETE FROM NHANVIEN
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
3/22/2013100
DELETE FROM NHANVIEN
WHERE PHG IN (
SELECT MAPHG
FROM PHONGBAN
WHERE TENPHG=‘Nghien cuu’)
XÓA DỮ LIỆU TRONG BẢNG
Xóa nhân viênở phòng nghiên cứu
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
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ấtcả 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ếu3/22/2013
101
XÓA DỮ LIỆU TRONG BẢNG
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
3/22/2013102
XÓA DỮ LIỆU TRONG BẢNGTENNVHONV NGSINH DCHI PHAI LUONG PHG
TungNguyen 12/08/1955 638 NVC Q5 Nam 40000 5
HungNguyen 09/15/1962 Ba Ria VT Nam 38000 5
333445555
987987987
MANV MA_NQL
888665555
333445555
TENLOT
Thanh
Manh
HangBui 07/19/1968 33 NTH Q1 Nu 38000 4999887777 987654321Ngoc
NhuLe 07620/1951 219 TD Q3 Nu 43000 4987654321 888665555Quynh
VinhPham 11/10/1945 450 TV HN Nam 55000 1888665555 NULLVan
TamTran 07/31/1972 543 MTL Q1 Nu 25000 5453453453 333445555Thanh
QuangTran 04/08/1969 980 LHP Q5 Nam 25000 4987987987 987654321Hong
SODA THOIGIANMA_NVIEN
10 10.0333445555
20 20.0888665555
30 20.0987654321
1 20.0453453453
10 35.0987987987
30 5.0987987987
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
3/22/2013103
CẬP NHẬT DỮ LIỆU TRONG BẢNG
UPDATE <tên bảng>
SET <tên thuộc tính>=<giá trị mới>,
<tên thuộc tính>=<giá trị mới>,
…
[WHERE <điều kiện>]
UPDATE NHANVIEN
SET NGSINH=’08/12/1965’
WHERE MANV=‘333445555’
UPDATE NHANVIEN
SET LUONG=LUONG*1.1
Với đề án có mã số 10, hãy thay đổinơi thực hiện đề án thành ‘Vung Tau’ vàphòng ban phụ trách là phòng 5
KNOWLEDGE FOR SHARE
5. Cập nhật dữ liệu
Những dòng thỏa điều kiện tại mệnh đề WHEREsẽ đượ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 thamchiếu– Không cho sửa– Sửa luôn những dòng có giá trị đang tham
chiếu đến• CASCADE
3/22/2013104
CẬP NHẬT DỮ LIỆU TRONG BẢNG
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
Bảng là một quan hệ được tổ chức lưutrữ 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
3/22/2013105
KHUNG NHÌN - VIEW
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
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
3/22/2013106
KHUNG NHÌN - VIEW
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
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
3/22/2013107
KHUNG NHÌN - VIEW
CREATE VIEW <tên khung nhìn> AS
<câu truy vấn>
DROP VIEW <tên khung nhìn>
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
3/22/2013108
KHUNG NHÌN - VIEWCREATE 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
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
3/22/2013109
TRUY VẤN TRÊN KHUNG NHÌNSELECT TENNV
FROM NV_P5
WHERE HONV LIKE ‘Nguyen’
Tuy không chứa dữ liệu nhưngcó thể thực hiện các câu truy vấntrên khung nhìn
Có thể viết câu truy vấn dữ liệutừ khung nhìn và bảng
SELECT HONV, TENVN, TENDA, THOIGIAN
FROM NV_P5, PHANCONG, DEAN
WHERE MANV=MA_NVIEN AND SODA=MADA
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
Có thể dùng các câu lệnh INSERT, DELETEvà 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
3/22/2013110
CẬP NHẬT TRÊN KHUNG NHÌN
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
Sửa lại họ cho nhân viên mã‘123456789’ ở phòng 5 là ‘Pham’
3/22/2013111
CẬP NHẬT TRÊN KHUNG NHÌN
UPDATE NV_P5
SET HONV=‘Pham’
WHERE MANV= ‘123456789’
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
Chỉ mục trên thuộc tính A là một cấutrúc dữ liệu làm cho việc tìm kiếm mẫutin có chứa A hiệu quả hơn
3/22/2013112
INDEX – CHỈ MỤC
SELECT *
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nu’
KNOWLEDGE FOR SHARE
6. Một số vấn đề khác
Cú pháp
Ví dụ
3/22/2013113
INDEX – CHỈ MỤC
CREATE INDEX <tên chỉ mục> ON <tên bảng>(<tên cột>)
CREATE INDEX PHG_IND ON NHANVIEN(PHG)
CREATE INDEX PHG_PHAI_IND ON NHANVIEN(PHG, PHAI)
DROP INDEX <tên chỉ mục>
KNOWLEDGE FOR SHARE
6. Một số vấn đề khá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ý???
3/22/2013114
INDEX – CHỈ MỤC
HẾT