115
CHƯƠNG 5 NGÔN NGỮ SQL

Lý Thuyết SQL

Embed Size (px)

Citation preview

Page 1: Lý Thuyết SQL

CHƯƠNG 5NGÔN NGỮ SQL

Page 2: Lý Thuyết 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

Page 3: Lý Thuyết SQL

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

Page 4: Lý Thuyết SQL

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

Page 5: Lý Thuyết SQL

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

Page 6: Lý Thuyết SQL

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).

Page 7: Lý Thuyết SQL

KNOWLEDGE FOR SHARE

1. Giới thiệu về SQL

3/22/20137

Page 8: Lý Thuyết SQL

KNOWLEDGE FOR SHARE

2. Kiểu dữ liệu

3/22/20138

Kiểu dữ liệu trong SQL Server

Page 9: Lý Thuyết SQL

KNOWLEDGE FOR SHARE

2. Kiểu dữ liệu

3/22/20139

Kiểu dữ liệu trong SQL Server

Page 10: Lý Thuyết SQL

KNOWLEDGE FOR SHARE

2. Kiểu dữ liệu

3/22/201310

Kiểu dữ liệu trong SQL Server

Page 11: Lý Thuyết SQL

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

Page 12: Lý Thuyết SQL

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

Page 13: Lý Thuyết SQL

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

Page 14: Lý Thuyết SQL

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

Page 15: Lý Thuyết SQL

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

Page 16: Lý Thuyết SQL

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

Page 17: Lý Thuyết SQL

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

Page 18: Lý Thuyết SQL

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

Page 19: Lý Thuyết SQL

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

Page 20: Lý Thuyết SQL

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>

Page 21: Lý Thuyết SQL

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)

Page 22: Lý Thuyết SQL

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

Page 23: Lý Thuyết SQL

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

Page 24: Lý Thuyết SQL

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

Page 25: Lý Thuyết SQL

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)

Page 26: Lý Thuyết SQL

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

Page 27: Lý Thuyết SQL

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

Page 28: Lý Thuyết SQL

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>

Page 29: Lý Thuyết SQL

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))

Page 30: Lý Thuyết SQL

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

Page 31: Lý Thuyết SQL

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

Page 32: Lý Thuyết SQL

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

Page 33: Lý Thuyết SQL

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

Page 34: Lý Thuyết SQL

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

Page 35: Lý Thuyết SQL

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’

Page 36: Lý Thuyết SQL

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

Page 37: Lý Thuyết SQL

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

Page 38: Lý Thuyết SQL

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

Page 39: Lý Thuyết SQL

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’

Page 40: Lý Thuyết SQL

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_’

Page 41: Lý Thuyết SQL

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’

Page 42: Lý Thuyết SQL

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

Page 43: Lý Thuyết SQL

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

Page 44: Lý Thuyết SQL

KNOWLEDGE FOR SHARE

4. Truy vấn dữ liệu

3/22/201344

Page 45: Lý Thuyết SQL

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

Page 46: Lý Thuyết SQL

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

Page 47: Lý Thuyết SQL

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

… …

Page 48: Lý Thuyết SQL

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

Page 49: Lý Thuyết SQL

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

Page 50: Lý Thuyết SQL

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

Page 51: Lý Thuyết SQL

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

Page 52: Lý Thuyết SQL

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

Page 53: Lý Thuyết SQL

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

Page 54: Lý Thuyết 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>

Page 55: Lý Thuyết SQL

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

Page 56: Lý Thuyết SQL

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

Page 57: Lý Thuyết SQL

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)

Page 58: Lý Thuyết SQL

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

Page 59: Lý Thuyết SQL

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)

Page 60: Lý Thuyết SQL

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

Page 61: Lý Thuyết SQL

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

Page 62: Lý Thuyết SQL

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

Page 63: Lý Thuyết SQL

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’

Page 64: Lý Thuyết SQL

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

Page 65: Lý Thuyết SQL

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

Page 66: Lý Thuyết SQL

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

Page 67: Lý Thuyết SQL

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)

Page 68: Lý Thuyết SQL

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

Page 69: Lý Thuyết SQL

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 )

Page 70: Lý Thuyết SQL

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

Page 71: Lý Thuyết SQL

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

Page 72: Lý Thuyết SQL

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

Page 73: Lý Thuyết SQL

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

Page 74: Lý Thuyết 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

Page 75: Lý Thuyết SQL

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

Page 76: Lý Thuyết SQL

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

Page 77: Lý Thuyết 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 ))

Page 78: Lý Thuyết SQL

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

Page 79: Lý Thuyết SQL

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’

Page 80: Lý Thuyết SQL

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>

Page 81: Lý Thuyết SQL

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)

Page 82: Lý Thuyết SQL

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

Page 83: Lý Thuyết SQL

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

Page 84: Lý Thuyết SQL

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

Page 85: Lý Thuyết SQL

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

Page 86: Lý Thuyết SQL

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

Page 87: Lý Thuyết SQL

KNOWLEDGE FOR SHARE

4. Truy vấn dữ liệu

3/22/2013 87

Một số dạng truy vấn khác

Page 88: Lý Thuyết SQL

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>

Page 89: Lý Thuyết SQL

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

Page 90: Lý Thuyết SQL

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

Page 91: Lý Thuyết SQL

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

Page 92: Lý Thuyết SQL

KNOWLEDGE FOR SHARE

4. Truy vấn dữ liệu

3/22/2013 92

QUY TRÌNH XỬ LÝ CÂU TRUY VẤN

Page 93: Lý Thuyết SQL

KNOWLEDGE FOR SHARE

4. Truy vấn dữ liệu

3/22/2013 93

Page 94: Lý Thuyết SQL

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

Page 95: Lý Thuyết SQL

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ị>)

Page 96: Lý Thuyết SQL

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)

Page 97: Lý Thuyết SQL

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

Page 98: Lý Thuyết SQL

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

Page 99: Lý Thuyết SQL

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

Page 100: Lý Thuyết SQL

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

Page 101: Lý Thuyết SQL

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

Page 102: Lý Thuyết SQL

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

Page 103: Lý Thuyết SQL

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

Page 104: Lý Thuyết SQL

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

Page 105: Lý Thuyết SQL

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

Page 106: Lý Thuyết SQL

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

Page 107: Lý Thuyết SQL

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>

Page 108: Lý Thuyết SQL

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

Page 109: Lý Thuyết SQL

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

Page 110: Lý Thuyết SQL

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

Page 111: Lý Thuyết SQL

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’

Page 112: Lý Thuyết SQL

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’

Page 113: Lý Thuyết SQL

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>

Page 114: Lý Thuyết SQL

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

Page 115: Lý Thuyết SQL

HẾT