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=5PHAI=‘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=5PHAI=‘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

– 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

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 RS

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  

RS 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

HẾT