1. Trang chủ
  2. » Giáo án - Bài giảng

Bài giảng cơ sở dữ liệu chương 3 ngôn ngữ truy vấn SQL

43 514 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 43
Dung lượng 892,41 KB

Nội dung

Ví dụ Cho biết MANV và TENNV làm việc ở phòng ‘Nghien cuu’ Chương 3 - Ngôn ngữ truy vấn SQL 15 SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE PHG=MAPHG AND TENPGH=‘ Nghien cuu ’ Mệnh đ

Trang 1

6 Các lệnh liên quan tới cấu trúc

7 Các lệnh giao quyền truy cập CSDL

8 Bài tập

Trang 2

ngôn ngữ SEQUEL (Structured English QUEry

Language), ngôn ngữ được thiết kế tại tập đoàn IBMnhằm khi đưa ra hệ quản trị CSDL có tên là SYSTEM-R

Chương 3 - Ngôn ngữ truy vấn SQL 3

3.1 Giới thiệu SQL (tt)

Năm 1976: SEQUEL được cải tiến thành SEQUEL2 Năm 1978-1979: SEQUEL2 được nâng cấp và đổi tên thành SQL (nhưng vẫn đọc là SEQUEL)

Chuẩn SQL đầu tiên có tên gọi SQL-86 ( SQL1 ) được công nhận và chuẩn hóa bởi ANSI và ISO.

Năm 1992: SQL1 được mở rộng với nhiều tính năng mới và được gọi là SQL-92 ( SQL2 ).

Năm 1999: Chuẩn SQL-99 ( SQL3 ) ra đời

Phiên bản mới nhất hiện nay là SQL-2011

Trang 3

3.1 Giới thiệu SQL (tt)

Ngôn ngữ giao thiết CSLD gồm:

– DDL – Data Definition Language

– DML – Data Manipulation Language

– SQL – Structured Query Language

– DCL – Data Control Language

• INSERT, UPDATE, DELETE…

Chương 3 - Ngôn ngữ truy vấn SQL 5

Lược đồ CSDL sử dụng

NHANVIEN (MANV,HONV, TENLOT, TENNV, PHAI,

LUONG, DIACHI, NGAYSINH, MA_NQL, PHG)

PHONGBAN (MAPB, TENPB, TRPHG, NGAYBĐ)

DIADIEM_PHG (MAPB, DIADIEM)

DEAN (MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA)

PHANCONG (MANV, MADA, THOIGIAN)

THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE)

Trang 4

• Nối các biểu thức: AND, OR, NOT

• Phép toán: >, <, <=, >=, =, <>, LIKE, BETWEEN

Chương 3 - Ngôn ngữ truy vấn SQL 7

Trang 5

Mệnh đề SELECT

Trang 6

WHERE PHG=5 AND PHAI=‘ Nam ’

ρMANV,HO,TEN LOT,TEN (πMaNV,HONV,TENLOT,TENNVσPHG=5∧PHAI=‘Nam’ ( NHANVIEN )))

Chương 3 - Ngôn ngữ truy vấn SQL 11

Trang 7

Mệnh đề SELECT (tt)

Mở rộng:

Chương 3 - Ngôn ngữ truy vấn SQL 13

SELECT MANV, LUONG*1.1 AS ‘LUONG10%’

WHEREPHG=5 AND PHAI=‘ Nam ’

SELECT DISTINCT LUONG

FROMNHANVIEN

WHERE PHG=5 AND PHAI=‘ Nam ’

Trang 8

Ví dụ

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

Chương 3 - Ngôn ngữ truy vấn SQL 15

SELECT MANV, TENNV

FROM NHANVIEN, PHONGBAN

WHERE PHG=MAPHG AND TENPGH=‘ Nghien cuu ’

Mệnh đề WHERE

SELECT MANV, TENNV

FROM NHANVIEN, PHONGBAN

WHERE PHG=MAPHG AND TENPHG=‘ Nghien cuu ’

Biểu thức luận lý

Trang 9

Mệnh đề WHERE (tt)

Độ ưu tiên

– Viết trước thực hiện trước

– Trong ngoặc thực hiện trước

Chương 3 - Ngôn ngữ truy vấn SQL 17

SELECT MANV, TENNV

FROM NHANVIEN, PHONGBAN

WHERE ( TENPHG=‘ Nghien cuu ’ OR TENPHG=‘ Quan ly ’) AND PHG=MAPHG

WHERE LUONG>=2000000 AND LUONG<=3000000

SELECT MANV, TENNV

FROM NHANVIEN

WHERE LUONG BETWEEN 2000000 AND 3000000

SELECT MANV, TENNV

FROM NHANVIEN

WHERE LUONG NOT BETWEEN 2000000 AND 3000000

Trang 10

– Lấy tất cả những chuỗi không giống

SELECT MANV, TENNV

FROM NHANVIEN

WHERE HONV LIKE ‘ Nguyen_ _ _ _’

SELECT MANV, TENNV

FROM NHANVIEN

WHERE HONV LIKE ‘Nguyen %’

1 Ký tự bất kỳ

Nhiều ký tự bất kỳ

Trang 11

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

Chương 3 - Ngôn ngữ truy vấn SQL 21

SELECT MANV, TENNV

FROM NHANVIEN

WHERE MA_NQL IS NULL

SELECT MANV, TENNV

Trang 12

Mệnh đề FROM

Tên, Bí danh

Chương 3 - Ngôn ngữ truy vấn SQL 23

SELECT TENPHG, DIADIEM

FROM PHONGBAN, DDIEM_PHG

WHERE MAPHG=MAPHG

SELECT TENPHG, DIADIEM

FROM PHONGBAN, DDIEM_PHG

Trang 13

Mệnh đề ORDER BY (tt)

Ví dụ:

Chương 3 - Ngôn ngữ truy vấn SQL 25

SELECT MANV, MADA

– Tất cả các thuộc tính sau SELECT phải xuất hiện ở sau

mệnh đề GROUP BY (Trừ thuộc tính có giá trị là hàm )

– Có thể có thuộc tính xuất hiện ở GROUP BY nhưng không

xuất hiện ở SELECT

SELECT<danh sách cột>

FROM<danh sách các bảng>

WHERE<điều kiện>

GROUP BY <danh sách cột gom nhóm>

Trang 14

Mệnh đề GROUP BY (tt)

Ví dụ: Cho biết số lượng nhân viên ở mỗi phòng ban

Chương 3 - Ngôn ngữ truy vấn SQL 27

SELECT PHG, COUNT(*) AS ‘So NV’

FROM NHANVIEN

GROUP BY PHG

Hoặc

SELECT T ENPHG, COUNT(*) AS ‘So NV’

FROM NHANVIEN, PHONGBAN

SELECT MaNV, COUNT(*) AS ‘ So DA’,

SUM (THOIGIAN) AS ‘Tong TG’

FROM PHANCONG

GROUP BY MaNV

SELECT NV.MaNV, TENV,

COUNT(*) AS ‘So DA’,

SUM (THOIGIAN) AS ‘Tong TG’

FROM PHANCONG PC, NHANVIEN NV

WHERE PC.MaNV = NV.MaNV

GROUP BY PC MaNV, TenNV

Trang 15

WHERE<điều kiện>

GROUP BY <danh sách cột gom nhóm>

HAVING<điều kiện chọn nhóm>

SELECT MaNV, COUNT(*) AS ‘ So DA’, FROM PHANCONG

GROUP BY MaNV

HAVING COUNT (*) > 2

Trang 16

Mệnh đề HAVING (tt)

Cho biết những phòng ban có lương trung bình của nhân viên lớn hơn 3 triệu

Chương 3 - Ngôn ngữ truy vấn SQL 31

SELECT PHG, AVG (LUONG) AS ‘Luong TB’

FROM NHANVIEN

GROUP BY PHG

HAVING AVG (LUONG) > 3000000

Hoặc

SELECT NV.PHG, PB.TenPB, Avg(NV.Luong) AS "TB Luong"

FROM NhanVien AS NV , PhongBan AS PB

WHERE NV.Phg = PB.MaPB

GROUP BY NV.PHG, PB.TenPB

HAVING AVG (LUONG) > 3000000;

3.3 Các hàm thao tác dữ liệu (tt)

Các hàm tính toán trên bản ghi

– ABS: tính trị tuyệt đối

– POWER(x, y): trả về xy

– EXP: Tính ex

– SIGN (x): Kiểm tra dấu của x (trả về -1 | 0 | 1)

– Các hàm lượng giác: SIN, COS, TAN, ASIN, ACOS,…

Trang 17

3.3 Các hàm thao tác dữ liệu (tt)

Các hàm xử lý chuỗi

– LEN (str) : Cho chiều dài chuỗi ký tự

– LEFT (str, n): Lấy n ký tự phía trái của chuỗi str

– MID (str, p, n): Lấy n ký tự của chuỗi str kể từ vị trí p trong dãy

Chương 3 - Ngôn ngữ truy vấn SQL 33

3.3 Các hàm thao tác dữ liệu (tt)

Các hàm xử lý thời gian

thức ngày dd

thức ngày dd

Trang 18

– Kết bằng (phép kết nội – inner join)

– Kết ngoài (outter join)

WHERE<điều kiện kết nối>

SELECT HoNV, Tenlot, TenNV, TenPB

FROM Nhanvien, PhongBan

WHERE PHG = MaPB

SELECT<danh sách cột>

FROM<bảng 1> INNER JOIN <bảng 2> ON<điều kiện kết nối>

WHERE<điều kiện chọn dòng>

Trang 19

3.4 Truy vấn từ nhiều bảng (tt)

Ví dụ: Tìm mã và họ tên các nhân viên làm việc ở phòng ‘Kinh doanh’

Chương 3 - Ngôn ngữ truy vấn SQL 37

SELECT MaNV, HoNV +’ ‘ + Tenlot + ‘ ‘ + TenNV AS ‘Ho ten’, TenPB

FROM Nhanvien INNER JOIN PhongBan ON PHG = MaPB

WHERE TenPB LIKE ‘%Kinh doanh’

Hoặc:

SELECT MaNV, HoNV +’ ‘ + Tenlot + ‘ ‘ + TenNV AS ‘Ho ten’, TenPB

FROM Nhanvien, PhongBan

WHERE PHG = MaPB AND TenPB LIKE ‘%Kinh doanh’

Trang 20

3.4 Truy vấn từ nhiều bảng (tt)

Ví dụ: Cho biết nhân viên và tên của phòng ban mà

họ là trưởng phòng (nếu có)

Chương 3 - Ngôn ngữ truy vấn SQL 39

SELECT HoNV, Tenlot, TenNV, TenPB

FROM NhanVien NV LEFT JOIN PhongBan PB

ON NV.MaNV=PhongBan.TrgPhg

3.4 Truy vấn từ nhiều bảng (tt)

Ví dụ: Tìm họ tên nhân viên và tên thân nhân của họ (nếu có)

SELECT NV.MaNV, HoNV, TenLot, TenNV, TenTN, Quanhe

FROM ThanNhan TN RIGHT JOIN NhanVien NV

ON TN.MaNV = NV.MaNV

Trang 21

– Câu truy vấn con thường trả về 1 tập các giá trị

– Nếu có nhiều truy vấn con sau WHERE thì thường

được kết hợp với nhau bởi các phép toán logic

Chương 3 - Ngôn ngữ truy vấn SQL 41

Trang 22

• Mệnh đề WHERE của Subquery tham chiếu đến ít nhất

1 thuộc tính của bảng trong mệnh đề FROM của truy

vấn cha

• Khi thực hiện, câu truy vấn con được thực nhiều lần – mỗi lần ứng với 1 bộ của câu truy vấn cha

Trang 23

Ví dụ - Truy vấn lồng phân cấp

Đưa ra mã nhân viên, họ tên nhân viên thuộc phòng

‘Tài chính’ hoặc phòng ‘Kế hoạch’

Chương 3 - Ngôn ngữ truy vấn SQL 45

SELECTMaNV, HoNV, TenLot, TenNV

FROM PHANCONG PC, NHANVIEN NV

WHERE PC.MaNV = NV.MaNV AND

NV.HoNV LIKE ‘%Nguyễn%’

)

Trang 24

Ví dụ - Truy vấn lồng phân cấp (tt)

Hãy tìm những nhân viên không có thân nhân nào

Chương 3 - Ngôn ngữ truy vấn SQL 47

Trang 25

Ví dụ - Truy vấn lồng phân cấp (tt)

Tìm những trưởng phòng có tối thiểu 1 thân nhân

Tìm những Nhân viên có lương cao hơn lương của mọi nhân viên phòng 4

Chương 3 - Ngôn ngữ truy vấn SQL 49

SELECT *

FROM NHANVIEN

WHERE MANV IN (SELECTMaNV FROMTHANNHAN) AND

MANV IN (SELECTTRPHG FROM PHONGBAN)

Truy vấn lồng tương quan

– Mệnh đề WHERE của Subquery tham chiếu đến ít nhất 1 thuộc tính của bảng trong mệnh đề FROM của truy vấn cha

– Khi thực hiện, câu truy vấn con được thực nhiều lần –mỗi lần ứng với 1 bộ của câu truy vấn cha

Ví dụ:

– Tìm những trưởng phòng có ít nhất 1 thân nhân

SELECT*

FROMNHANVIEN NV

WHEREEXISTS (SELECT * FROMTHANNHAN TN

WHERE TN.MaNV = NV.MaNV) AND

EXISTS (SELECT TrgPHG FROM PHONGBAN

WHERE TrgPHG = NV.MaNV)

Trang 26

Ví dụ - Truy vấn lồng lương quan (tt)

Tìm những nhân viên không có thân nhân nào

Chương 3 - Ngôn ngữ truy vấn SQL 51

Ví dụ - Truy vấn lồng lương quan (tt)

Tìm những nhân viên có lương cao hơn lương trung bình của phòng

Trang 27

Ví dụ - Truy vấn lồng lương quan (tt)

Tìm những nhân viên có lương bằng lương cao hơn lương của ít nhất 1 nhân viên thuộc phòng ‘Tài chính’

Chương 3 - Ngôn ngữ truy vấn SQL 53

SELECT *

FROM NHANVIEN NV1

WHERE EXISTS (

SELECT *

FROMNHANVIEN NV2, PHONGBAN PB

WHERE NV2.Phg = PB.MaPB AND

PB.TenPB LIKE ‘%Tài chính%’ AND

NV1.Luong > NV2.Luong )

Nhận xét IN và EXISTS

IN

– <tên cột> IN <câu truy vấn con>

– Thuộc tính ở mệnh đề SELECT câu truy vấn con phải

có cùng kiểu dữ liệu với thuộc tính ở mệnh đề WHERE trong câu truy vấn cha

– Những câu truy vấn có = ANY hoặc IN đều có thể

chuyển thành câu truy vấn dùng EXISTS

Trang 28

Ví dụ: Tìm các mã đề án có nhân viên họ ‘Nguyễn’

tham gia hoặc trưởng phòng chủ trì đề án có họ

‘Nguyễn’

SELECT MaDA

FROM PHANCONG PC, NHANVIEN NV

WHERE (PC.MaNV = NV.MaNV) AND (HoNV = ‘Nguyễn’)

UNION (

SELECTMaDA

FROM NHANVIEN NV, PHONGBAN PB, DEAN DA

WHERE (NV.MaNV=PB.TrgPhg) AND (DA.Phong= PB.MaPB)

AND (NV.HoNV = ‘Nguyễn’) )

Trang 29

Tạo mới 1 quan hệ (bảng) với nội dung từ CSDL

Chương 3 - Ngôn ngữ truy vấn SQL 57

3.5.1 Thêm dòng vào bảng

Cú pháp

Ví dụ:

INSERT INTO <tên bảng> ( <danh sách các thuộc tính>)

VALUES (<danh sách các giá trị>)

Trang 30

• Thuộc tính NOT NULL

Chương 3 - Ngôn ngữ truy vấn SQL 59

3.5.1 Thêm dòng vào bảng (tt)

Thêm nhiều dòng

Ví dụ:

INSERT INTO <tên bảng> ( <danh sách các thuộc tính>)

<câu truy vấn con>

Trang 31

3.5.2 Sửa dòng trong bảng

Cú pháp

Ví dụ: Tăng lương 30% cho những người là ‘nữ’

Chương 3 - Ngôn ngữ truy vấn SQL 61

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

• Không cho chỉnh sửa

• Sửa luôn dòng có giá trị tham chiếu đến (CASCADE)

Trang 32

3.5.3 Xóa dòng trong bảng

Cú pháp

Ví dụ:

Chương 3 - Ngôn ngữ truy vấn SQL 63

DELETE FROM <tên bảng>

WHERE <điều kiện>

3.5.3 Xóa dòng trong bảng (tt)

Ví dụ: Xóa đi những nhân viên làm ở phòng ‘Dự án’

DELETE FROM NHANVIEN

WHERE PHG IN (

SELECT MaPB

FROM PHONGBAN

WHERE TenPB = ‘Phòng Dự án’ )

Trang 33

3.5.3 Xóa dòng trong bảng (tt)

Nhận xét

– Số dòng bị xóa phụ thuộc vào điều kiện sau WHERE

– Nếu không chỉ rõ điều kiện sau WHERE tất cả các

dòng trong bảng sẽ bị xóa

– Lệnh DELETE FROM có thể gây ra vi phạm RBTV

• Không cho xóa

• Xóa luôn những dòng có giá trị đang tham chiếu đến

• Đặt Null cho những giá trị tham chiếu

Chương 3 - Ngôn ngữ truy vấn SQL 65

3.5.3 Xóa dòng trong bảng (tt)

Trang 34

3.5.4 Tạo bảng từ CSDL

Cú pháp:

Chương 3 - Ngôn ngữ truy vấn SQL 67

SELECT <danh sách cột/biểu thức>

FROM <tên bảng nguồn>

SELECT PB.TenPB, AVG(NV.Luong) AS TBLuong

INTO TABLE TBLUONG_PHONGBAN

WHERE NV.PHG = PB.MaPB

GROUP BY PHG, TenPB

Trang 35

3.6 Các lệnh liên quan cấu trúc CSDL

Các kiểu dữ liệu trong SQL

Chương 3 - Ngôn ngữ truy vấn SQL 69

Tên kiểu Ý nghĩa

Char (w) Kiểu ký tự độ rộng cố định (w)

Varchar(w) Kiểu ký tự có độ rộng thay đổi 0 ÷ w

Integer Kiểu số nguyên

Byte Kiểu số nguyên nhỏ (0÷255)

Numberic (w,s) Số thực rộng w vị trí (cả dấu chấm) có s chữ số thập

phân Real, Double Số thực dấu phẩy động

Float (n) Số thực dấu phẩy động có ít nhất n chữ số

Date Kiểu ngày tháng

Time Kiểu thời gian (giờ/phút/giây)

Logical Kiểu logic (True/False)

3.6.1 Lệnh tạo bảng CREATE TABLE

Trang 40

3.6.2 Lệnh sửa bảng (tt)

Ví dụ - thay đổi cấu trúc

Chương 3 - Ngôn ngữ truy vấn SQL 79

3.6.2 Lệnh sửa bảng (tt)

Ví dụ - thay đổi RBTV

Trang 43

3.8 Bài tập

(Tài liệu, trang 59 – 62)

Chương 3 - Ngôn ngữ truy vấn SQL 85

Ngày đăng: 01/04/2016, 08:26

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w