Tải bản đầy đủ (.pdf) (24 trang)

Bài giảng cơ sở dữ liệu chương 5 SQL (structured query language)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (296.49 KB, 24 trang )

Chương 5
SQL

(Structured Query Language)

Nội dung chi tiết

ƒ Giới thiệu
ƒ Định nghĩa dữ liệu
ƒ Truy vấn dữ liệu
ƒ Cập nhật dữ liệu
ƒ Khung nhìn (view)
ƒ Chỉ mục (index)

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

2

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
y SQL-86
y SQL-92
y SQL-99
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

3

Giới thiệu (tt)
ƒ 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ộ
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

Lý thuyết : Chuẩn SQL-92
Ví dụ : SQL Server

4

2



Nội dung chi tiết

ƒ Giới thiệu
ƒ Định nghĩa dữ liệu
- Kiểu dữ liệu
- Các lệnh định nghĩa dữ liệu
ƒ Truy vấn dữ liệu
ƒ Cập nhật dữ liệu
ƒ Khung nhìn (view)
ƒ Chỉ mục (index)
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

5

Định nghĩa dữ liệu
ƒ Là ngôn ngữ mô tả
- Lược đồ cho mỗi quan hệ
- Miền giá trị tương ứng của từng thuộc tính
- Ràng buộc toàn vẹn
- Chỉ mục trên mỗi quan hệ
ƒ Gồm
- CREATE TABLE (tạo bảng)
- DROP TABLE (xóa bảng)
- ALTER TABLE (sửa bảng)
- CREATE DOMAIN (tạo miền giá trị)
- CREATE DATABASE
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

6


3


Kiểu dữ liệu
ƒ Số (numeric)
- INTEGER
- SMALLINT
- NUMERIC, NUMERIC(p), NUMERIC(p,s)
- DECIMAL, DECIMAL(p), DECIMAL(p,s)
- REAL
- DOUBLE PRECISION
- FLOAT, FLOAT(p)

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

7

Kiểu dữ liệu (tt)
ƒ Chuỗi ký tự (character string)
- CHARACTER, CHARACTER(n)
- CHARACTER VARYING(x)
ƒ Chuỗi bit (bit string)
- BIT, BIT(x)
- BIT VARYING(x)
ƒ Ngày giờ (datetime)
- DATE gồm ngày, tháng và năm
- TIME gồm giờ, phút và giây
- TIMESTAMP gồm ngày và giờ
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN


8

4


Lệnh tạo Database - bảng
ƒ CREATE DATABASE <Ten_Database>
ƒ Để định nghĩa một bảng
- Tên bảng
- Các thuộc tính
y Tên thuộc tính
y Kiểu dữ liệu
y Các RBTV trên thuộc tính

ƒ Cú pháp

CREATE TABLE <Tên_bảng> (
<Tên_cột> <Kiểu_dữ_liệu> [<RBTV>],
<Tên_cột> <Kiểu_dữ_liệu> [<RBTV>],

[<RBTV>]
)

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

9

Ví dụ - Tạo bảng
CREATE TABLE NHANVIEN (
MANV CHAR(9),

HONV VARCHAR(50),
TENNV VARCHAR(10),
NGSINH DATETIME,
DCHI VARCHAR(50),
PHAI CHAR(3),
LUONG INT,
MA_NQL CHAR(9),
PHG INT
)
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

10

5


Lệnh tạo bảng (tt)
ƒ <RBTV>
- NOT NULL
- NULL
- UNIQUE
- DEFAULT
- PRIMARY KEY
- FOREIGN KEY / REFERENCES
- CHECK
ƒ Đặt tên cho RBTV
CONSTRAINT <Ten_RBTV> <RBTV>
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

11


Ví dụ - RBTV
CREATE TABLE NHANVIEN (
HONV VARCHAR(50) NOT NULL,
TENNV VARCHAR(10) NOT NULL,
MANV CHAR(9) PRIMARY KEY,
NGSINH DATETIME,
DCHI VARCHAR(50),
PHAI CHAR(3) CHECK (PHAI IN (‘Nam’, ‘Nu’)),
LUONG INT DEFAULT (10000),
MA_NQL CHAR(9),
PHG INT
)
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

12

6


Ví dụ - RBTV
CREATE TABLE PHONGBAN (
TENPB VARCHAR(20) UNIQUE,
MAPHG INT NOT NULL,
TRPHG CHAR(9),
NG_NHANCHUC DATETIME DEFAULT (GETDATE())
)
CREATE TABLE PHANCONG (
MA_NVIEN CHAR(9) FOREIGN KEY (MA_NVIEN)
REFERENCES NHANVIEN(MANV),

SODA INT REFERENCES DEAN(MADA),
THOIGIAN DECIMAL(3,1)
)
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

13

Ví dụ - Đặt tên cho RBTV
CREATE TABLE NHANVIEN (
HONV VARCHAR(50) CONSTRAINT NV_HONV_NN NOT NULL,
TENNV VARCHAR(10) NOT NULL,
MANV CHAR(9) CONSTRAINT NV_MANV_PK PRIMARY KEY,
NGSINH DATETIME,
DCHI VARCHAR(50),
PHAI CHAR(3) CONSTRAINT NV_PHAI_CHK
CHECK (PHAI IN (‘Nam’, ‘Nu’)),
LUONG INT CONSTRAINT NV_LUONG_DF DEFAULT (10000),
MA_NQL CHAR(9),
PHG INT
)
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

14

7


Ví dụ - Đặt tên cho RBTV
CREATE TABLE PHANCONG (
MA_NVIEN CHAR(9),

SODA INT,
THOIGIAN DECIMAL(3,1),
CONSTRAINT PC_MANVIEN_SODA_PK PRIMARY KEY
(MA_NVIEN, SODA),
CONSTRAINT PC_MANVIEN_FK FOREIGN KEY
(MA_NVIEN) REFERENCES NHANVIEN(MANV),
CONSTRAINT PC_SODA_FK FOREIGN KEY (SODA)
REFERENCES DEAN(MADA)
)
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

15

Lệnh sửa bảng
ƒ Được dùng để
- Thay đổi cấu trúc bảng
- Thay đổi RBTV
ƒ Thêm cột
ALTER TABLE <Tên_bảng> ADD COLUMN
<Tên_cột> <Kiểu_dữ_liệu> [<RBTV>]
ƒ Xóa cột
ALTER TABLE <Tên_bảng> DROP COLUMN <Tên_cột>

ƒ Mở rộng cột
ALTER TABLE <Tên_bảng> ALTER COLUMN
<Tên_cột> <Kiểu_dữ_liệu_mới>
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

16


8


Ví dụ - Thay đổi cấu trúc bảng
ALTER TABLE NHANVIEN
ADD NGHENGHIEP CHAR(20)
ALTER TABLE NHANVIEN
DROP COLUMN NGHENGHIEP
ALTER TABLE NHANVIEN
ALTER COLUMN NGHENGHIEP CHAR(50)
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

17

Lệnh sửa bảng (tt)
ƒ Thêm RBTV
ALTER TABLE <Tên_bảng> ADD
CONSTRAINT <Ten_RBTV> <RBTV>,
CONSTRAINT <Ten_RBTV> <RBTV>,

ƒ Xóa RBTV
ALTER TABLE <Tên_bảng>
DROP <Tên_RBTV>
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

18

9



Ví dụ - Thay đổi RBTV
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)
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

19

Lệnh xóa bảng
ƒ Được dùng để xóa cấu trúc bảng
- Tất cả dữ liệu của bảng cũng bị xóa
ƒ Cú pháp
DROP TABLE <Tên_bảng>
ƒ Ví dụ
DROP TABLE PHONGBAN
DROP TABLE NHANVIEN
DROP TABLE PHANCONG
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

20


10


Lệnh xóa bảng (tt)

NHANVIEN
HONV

TENLOT

TENNV

MANV

NGSINH

DCHI

PHAI

LUONG

MA_NQL

PHG

PHONGBAN
TENPHG


MAPHG

TRPHG

NG_NHANCHUC

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

21

Lệnh tạo và xóa miền giá trị
ƒ 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 <Tên_kdl_mới> AS <Kiểu_dữ_liệu>
DROP DOMAIN <Tên_kdl_mới> AS <Kiểu_dữ_liệu>

ƒ Ví dụ
CREATE DOMAIN Chuoi AS VARCHAR(50)
DROP DOMAIN Chuoi
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

22

11


Nội dung chi tiết
ƒ Giới thiệu
ƒ Định nghĩa dữ liệu

ƒ Truy vấn dữ liệu
- Truy vấn cơ bản
- Tập hợp, so sánh tập hợp và truy vấn lồng
- Hàm kết hợp và gom nhóm
- Một số kiểu truy vấn khác
ƒ Cập nhật dữ liệu
ƒ Khung nhìn (view)
ƒ Chỉ mục (index)
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

23

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

- Cho phép 1 bảng có nhiều dòng trùng nhau

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

24

12



Truy vấn cơ bản (SELECT)
ƒ Cú pháp tổng quát
SELECT <Danh sách các cột được chọn>
FROM < Danh sách các bảng>
WHERE <Điều kiện chọn>
GROUP BY <Danh sách cột cần nhóm>
HAVING < Điều kiện nhóm>
ORDER BY < Danh sách cột cần sắp xếp>

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

25

Truy vấn cơ bản
ƒ <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, BETWEEN,
EXISTS, ANY/SOME, ALL, IN
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

26


13


Truy vấn cơ bản (tt)
ƒ SQL và ĐSQH
πSELECT <danh sách các cột>
×FROM <danh sách các bảng>
σ
WHERE <điều kiện>

πSELECT
L (σC (R))L
FROM R
WHERE C
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

27

Ví dụ
Lấy tất cả các cột của
quan hệ kết quả

SELECT *
FROM NHANVIEN
WHERE PHG=5
MANV

HONV

TENLOT


333445555

Nguyen

Thanh

987987987

Nguyen

Manh

TENNV

NGSINH

DCHI

PHAI

LUONG

MA_NQL

PHG

Tung

12/08/1955


638 NVC Q5

Nam

40000

888665555

5

Hung

09/15/1962

Ba Ria VT

Nam

38000

333445555

5

σPHG=5 (NHANVIEN)
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

28


14


Mệnh đề SELECT
SELECT MANV, HONV, TENLOT, TENNV
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
MANV
333445555
987987987

π

HONV
Nguyen
Nguyen

MANV,HONV,TENLOT,TENNV(

σ

TENLOT
Thanh
Manh

PHG=5 ∧ PHAI=‘Nam’

TENNV
Tung
Hung


(NHANVIEN))

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

29

Mệnh đề SELECT (tt)
Tên bí danh

SELECT MANV, HONV AS HO, TENLOT AS ‘TEN LOT’,
TENNV AS TEN
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
MANV
33344555
98798798
5
7

ρ

MANV,HO,TEN LOT,TEN

(

π

HO
TEN LOT

Nguyen Thanh
Nguyen Manh

MANV,HONV,TENLOT,TENNV(

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

TEN
Tung
Hung

σ

PHG=5∧PHAI=‘Nam’(NHANVIEN)))

30

15


Mệnh đề SELECT (tt)
Mở rộng

SELECT MANV,
HONV + ‘ ’ + TENLOT + ‘ ’ + TENNV AS ‘HO TEN’
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
MANV
333445555
987987987


ρ

MANV,HO TEN(

π

HO TEN
Nguyen Thanh Tung
Nguyen Manh Hung

MANV,HONV+TENLOT+TENNV(

σ

PHG=5∧PHAI=‘Nam’(NHANVIEN)))

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

31

Mệnh đề SELECT (tt)
Mở rộng

SELECT MANV, LUONG*1.1 AS ‘LUONG10%’
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
MANV
333445555
987987987


ρ

MANV,LUONG10%(

π

MANV,LUONG*1.1(

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

LUONG10%
33000
27500

σ

PHG=5∧PHAI=‘Nam’(NHANVIEN)))

32

16


Mệnh đề SELECT (tt)
Loại bỏ các dòng trùng nhau

SELECT LUONG
DISTINCT LUONG
FROM NHANVIEN

WHERE PHG=5 AND PHAI=‘Nam’

LUONG
30000
25000
25000
38000
38000

- Tốn chi phí
- Người dùng muốn thấy

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

33

Ví dụ
ƒ Cho biết MANV và TENNV làm việc ở phòng
‘Nghien cuu’

R1 ← NHANVIEN
KQ ← MANV, TENNV (

π

PHONGBAN
TENPHG=‘Nghien cuu’(R1))

σ


PHG=MAPHG

SELECT MANV, TENNV
FROM

NHANVIEN, PHONGBAN

WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

34

17


Mệnh đề WHERE

SELECT MANV, TENNV

Biểu thức luận lý

FROM NHANVIEN, PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG
TRUE

TRUE

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

35


Mệnh đề WHERE (tt)
Độ ưu tiên

SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE (TENPHG=‘K Toan’ OR TENPHG=‘Quan ly’)
AND PHG=MAPHG

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

36

18


Mệnh đề WHERE (tt)

BETWEEN

SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG>20000 AND LUONG<30000

SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG BETWEEN 20000 AND 30000

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN


Mệnh đề WHERE (tt)

37

NOT BETWEEN

SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG NOT BETWEEN 20000 AND 30000

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

38

19


Mệnh đề WHERE (tt)

LIKE

SELECT MANV, TENNV
FROM NHANVIEN
WHERE DCHI LIKE ‘Nguyen _ _ _ _’
Ký tự bất kỳ

SELECT MANV, TENNV
FROM NHANVIEN
WHERE DCHI LIKE ‘Nguyen %’
Chuỗi bất kỳ

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

39

Mệnh đề WHERE (tt)
NOT LIKE

SELECT MANV, TENNV
FROM NHANVIEN
WHERE HONV LIKE ‘Nguyen’
SELECT MANV, TENNV
FROM NHANVIEN
WHERE HONV NOT NOT LIKE ‘Nguyen’

Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

40

20


Mệnh đề WHERE (tt)

ESCAPE

SELECT MANV, TENNV
FROM NHANVIEN
WHERE DCHI LIKE ‘% Nguyens_%’ ESCAPE ‘s’

‘Nguyen_’


Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

41

Mệnh đề WHERE (tt)
Ngày giờ

SELECT MANV, TENNV
FROM NHANVIEN
WHERE NGSINH BETWEEN ‘1955-12-08’ AND ‘1966-07-19’

‘1955-12-08’
’12/08/1955’

YYYY-MM-DD

’17:30:00’

MM/DD/YYYY

’05:30 PM’

HH:MI:SS

‘December 8, 1955’
‘1955-12-08 17:30:00’
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

42


21


Mệnh đề WHERE (tt)

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
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

Mệnh đề WHERE (tt)

43

NULL

SELECT MANV, TENNV

FROM NHANVIEN
WHERE MA_NQL IS NULL
SELECT MANV, TENNV
FROM NHANVIEN
WHERE MA_NQL IS NOT NULL
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

44

22


Mệnh đề FROM

Không sử dụng mệnh đề WHERE

SELECT MANV, MAPHG
FROM NHANVIEN, PHONGBAN
WHERE TRUE
MANV

MAPHG

333445555
333445555
333445555
987987987
987987987
987987987



1
4
5
1
4
5


Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

Mệnh đề FROM (tt)

45

Tên bí danh (Alias)

SELECT TENPHG, DIADIEM
FROM PHONGBAN
PB, DDIEM_PHG AS DD
PHONGBAN,AS
DDIEM_PHG
WHERE PB.MAPHG=DD.MAPHG
MAPHG=MAPHG

SELECT TENNV, NV.NGSINH,
TENTN,
TN.NGSINH
NGSINH, TENTN,
NGSINH

FROM NHANVIEN
THANNHAN TN
NHANVIEN,NV,
THANNHAN
WHERE MANV=MA_NVIEN
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

46

23


Mệnh đề ORDER BY
ƒ Dùng để hiển thị kết quả câu truy vấn theo
một thứ tự nào đó
ƒ Cú pháp
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <điều kiện>
ORDER BY <danh sách các cột>
- ASC: tăng (mặc định)
- DESC: giảm
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

47

Mệnh đề ORDER BY (tt)
ƒ Ví dụ

SELECT MA_NVIEN, SODA

FROM PHANCONG
ORDER BY MA_NVIEN DESC, SODA

MA_NVIEN
999887777
999887777
987987987
987987987
987654321
987654321
987654321
Cơ sở dữ liệu - Khoa ĐT-TH - CĐ KTCN-ĐN

SODA
10
30
10
30
10
20
30
48

24



×