1. Trang chủ
  2. » Giáo Dục - Đào Tạo

SQL (STRUCTURED QUERY LANGUAGE) (DATA WARE HOUSE SLIDE)

102 17 0

Đ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 102
Dung lượng 0,94 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trắc nghiệm, bài giảng pptx các môn chuyên ngành Y dược và các ngành khác hay nhất có tại “tài liệu ngành Y dược hay nhất”; https://123doc.net/users/home/user_home.php?use_id=7046916. Slide bài giảng môn data ware house ppt dành cho sinh viên chuyên ngành công nghệ - kỹ thuật và các ngành khác. Trong bộ sưu tập có trắc nghiệm kèm đáp án chi tiết các môn, giúp sinh viên tự ôn tập và học tập tốt môn data ware house bậc cao đẳng đại học chuyên ngành công nghệ - kỹ thuật và các ngành khác

Trang 2

Giới thiệu

SQL: Structured Query Language

 SQL là ngôn ngữ chuẩn cho mô hình dữ liệu quan hệ:

 Có nguồn gốc từ SEQUEL (Structured English QUEry

Language) được nghiên cứu bởi IBM cho SYSTEM R

 Đã trở thành ngôn ngữ chuẩn cho mô hình dữ liệu quan hệ

 Đã qua nhiều phiên bản: SQL-86 (SQL1), SQL-89, SQL-92

(SQL2),…

 Là chuẩn, do vậy dễ dàng thay đổi HQTCSDL

 Nhiều ngôn ngữ lập trình cho phép nhúng câu lệnh SQL: Visual Basic, C#, java,…

 Được cài đặt trong hầu hết các DBMS quan hệ

 SQL là ngôn ngữ đầy đủ: Cho phép định nghĩa dữ liệu, truy vấn dữ liệu và cập nhật dữ liệu,…

Trang 3

Các kiểu dữ liệu cơ cản

 Số

 Số nguyên: INTEGER, INT, SMALLINT

 Số thực:

 FLOAT, REAL, DOUBLE PRECISION

 DEC(i,j), DECIMAL(i,j) hay NUMERIC(i,j): i là độ chính xác, j: số lượng chữ

số sau dấu chấm thập phân

Chuỗi ký tự:

 Đồ dài cố định: CHAR(n) hay CHARACTER(n)

 Độ dài biến đổi: VARCHAR(n) hay CHAR VARYING(n)

 Quy ước: Hằng chuỗi viết giữa cặp nháy đơn (móc lửng):

‘Nguyen Van Tu’, ‘CSDL1’,…

So sánh theo thứ tự alphabetic

Trang 4

Các kiểu dữ liệu cơ cản

Chuỗi bit:

 Độ dài cố định: BIT(n) : n là số lượng BIT

 Đồ dài biến đổi: BIT VARYING(n) – n là số lượng tối đa các BIT

 Mặc định: Độ dài bằng 1

 Quy ước: Hằng chuỗi BIT (B’010110’, B’…’)

Kiểu luận lý: Boolean

 Giá trị: TRUE, FALSE

Kiểu ngày: DATE (dạng YYYY-MM-DD)

Kiểu giờ: TIME (dạng HH:MM:SS)

Trang 8

Các nhóm lệnh của SQL

Nhóm lệnh tạo kiến tạo CSDL:

Tạo cấu trúc các quan hệ, khai báo các ràng buộc toàn vẹn, …

Trang 9

SQL

Trang 10

1 DẠNG TRUY VẤN CƠ

BẢN

SELECT A1, A2,…., AnFROM r1, r2, …, rm[WHERE <điều kiện>]

Trong đó:

• A1, A2,…., An: Các thuộc tính cần truy vấn

• r1, r2,…, rm: Các quan hệ chứa nguồn dữ liệu

• <điều kiện>: Điều kiện chọn các bộ

Trang 11

1.1 Truy vấn tương ứng với

phép chiếu

SELECT [DISTINCT] A1, A2, , A n

Ý nghĩa: Lấy ra giá trị trên các thuộc tính A1, A2, , A n từ

quan hệ r (DISTINCT : Loại bỏ các bộ trùng lặp)

Biểu thức đại số quan hệ tương ứng: A1, A2, , An (r)

SELECT A, B FROM r

SELECT DISTINCT A, B FROM r

Trang 12

Thuộc tính truy vấn có thể được

dẫn xuất (được tính) từ các

thuộc tính khác

Ví dụ: Xét LĐQH ChiTiet_PX(SOPX, MAMH, SOLG, DONGIA)

Lệnh SQL lấy các dòng chi tiết xuất với các thông tin: SOPX, MAMH, SOLG, DONGIA, SOLG*DONGIA

Kết quả

SELECT SOPX, MAMH, SOLG, DONGIA, SOLG*DONGIA

FROM Chitiet_PX

Trang 13

Có thể đặt lại tên cho thuộc tính cần truy vấn (<thuộc tính> AS

<tên mới>)

Kết quả

SELECT SOPX, MAMH, SOLG, DONGIA, SOLG*DONGIA AS TTIEN

FROM Chitiet_PX

Trang 14

1.2.Truy vấn tương ứng với

phép chọn

SELECT *

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

Ý nghĩa: Lấy các bộ trong quan hệ r thỏa <điều kiện chọn> (*: tất cả các thuộc tính)

Biểu thức ĐSQH tương ứng: <điều kiện chọn> (rr)

SELECT * FROM r WHERE B=‘b2’

Kết quả

Trang 15

Truy vấn tương ứng với

phép chọn

Ví dụ: NV(MANV, HO, TEN, NS, GT, LCB, MAPB)

b) Lệnh SQL lấy ra danh sách nhân viên nam có

Trang 16

Truy vấn tương ứng với

Trang 17

1.3 Truy vấn tương ứng với

Trang 18

Truy vấn tương ứng với

phép chọn và chiếu

SELECT A,B FROM r WHERE B=‘b2’

Kết quả

Vi dụ:

SELECT A,B FROM r WHERE A=‘a1’ AND C=‘c3’ Kết quả

Trang 19

Truy vấn tương ứng với

phép chọn và chiếu

Ví dụ : Xét lược đồ QH:

SINHVIEN(MASV,HOSV,TENSV,PHAINU,NGAYSINH,QQUAN,MANGANH)

- Lệnh SQL lấy danh sách gồm mã số, họ, tên, quê quán của các sinh viên ngành TH.

Biểu thức đại số quan hệ:

MASV, HOSV,TENSV,QQUAN(MANGANH=‘TH’ (rSINHVIEN))

Trang 20

Ví dụ : xét LĐQH: KETQUA(rMASV, MAMH, LANTHI, DIEM)

Lệnh SQL lấy MASV, DIEM lần 1 môn CSDL1

SELECT MASV, DIEM

FROM KETQUA

WHERE MAMH=‘CSDL1’ AND LANTHI=1

Truy vấn tương ứng với

phép chọn và chiếu

KETQUA

Kết quả

Trang 22

Xét LĐCSDL trong bài tập

số 2

“Quản lý thuê bao”

KHÁCH(Mã_KH, Tên, Địa_Chỉ_K, Số_CMND)

Tân từ: Mỗi khách hàng được gán một mã số để phân biệt với các khách

hàng khác Tên, Địa_Chỉ_K, Số_CMND lần lượt là tên, địa chỉ và số CMND của khách hàng.

THUE_BAO(Số_TB, Mã_KH, Ngày_ĐK, Nơi_Đặt)

Tân từ: Mỗi điện thoại có một số thuê bao (Số_TB) duy nhất, thuộc về một

chủ thuê bao (Mã_KH), đăng ký vào một ngày (Ngày_ĐK) xác định và đặt

(NƠI_ĐẶT) tại một nơi duy nhất Một khách hàng có thể là chủ của nhiều số thuê bao khác nhau.

CUOC(Số_TB, Tháng, Năm, Cước_PS)

Tân từ: Cước phát sinh (Cước_PS) từng tháng trong năm của mỗi số thuê

bao được ghi nhận bởi một bộ trong quan hệ Cước này được tính dựa trên nhật ký cuộc gọi phát sinh thực tế của số thuê bao.

Trang 23

c) Cho biết Nơi đặt của số thuế bao 8251469

d) Cho biết thông tin cước (tháng, Cước_PS) của số thuê

bao 8251469 trong các tháng 5 và 6 năm 2012

e) Cho biết danh sách các số thuê bao có cước phát sinh

tháng 06 năm 2012 từ 600000 đến 700000

Trang 24

Ví dụ:

Trang 25

Chỉ định tường minh tên quan

hệ cho thuộc tính

 Nếu có nhiều thuộc tính cùng tên giữa các quan hệ

khác nhau, khi dùng chúng trong SQL, phải chỉ định tường minh tên quan hệ chứa thuộc tính đó

<quan hệ>.<thuộc tính>

SELECT A,B, r2.C ,D FROM r1,r2

 Thuộc tính C tồn tại trong cả 2 quan hệ, do vậy phải dùng r2.C để nói rằng muốn lấy giá trị trên thuộc tính C từ quan hệ r2.

r1

r2

Trang 26

1.5 Thực hiện phép kết với

mệnh đề WHERE

SELECT … FROM r1, r2, …

Trang 27

1.5 Thực hiện phép kết với

mệnh đề WHERE

Ví dụ: HANGHOA(MAMH, TENMH, DVT, GIABAN)

DONHANG(SODH, MAMH, SOLG)

DONHANG HANGHOA Xét biểu thức ĐSQH:

SELECT *

FROM DONHANG, HANGHOA

Lệnh SQL:

Điều kiện kết

Trang 28

Ví dụ: Cho biết kết qua thi môn T001 với các thông tin MASV,

HOSV, TENSV, LANTHI, DIEM

Biểu thức ĐSQH:

Lệnh SQL:

SELECT Sinhvien.MASV, HOSV, TENSV, LANTHI, DIEM

FROM Sinhvien, Ketqua

WHERE Sinhvien.MASV=Ketqua.MASV and MAMH=‘T001’

Thực hiện phép kết với mệnh

đề WHERE

Điều kiện kết Điều kiện chọn

MASV,HOSV,TENSV,LANTHI,DIEM(MAMH=‘T001’(KETQUA SINHVIEN))))

Trang 29

Phieunhap Chitiet_pn DmHang

Select NGAY, ct.MAMH, TENMH, DVT, SLNHAP

From Chitiet_pn as ct, Phieunhap as pn, DmHang as dmh

Where ct.SOPN=pn.SOPN and ct.MAMH=dmh.MAMH and ct.SOPN=‘N003’

Điều kiện kết Điều kiện chọn

NGAY,MAMH,TENMH,DVT,SLNHAP(SOPN=‘N003’(PhieuNhap Chitiet_pn DmHang))))

Trang 30

SẮP THỨ TỰ KẾT QUẢ

ORDER BY <thuộc tính> [DESC|ASC],…

- Lệnh SQL lấy ra danh sách gồm MANV, HO, TEN của các nhân viên, sắp tăng dần theo tên, cùng tên sắp theo họ:

SELECT MANV, HO,TEN

FROM NV

ORDER BY TEN, HO

NV

Kết quả

Ví dụ: Cho LĐQH: NV(MANV, HO, TEN, NS, GT, LCB, MAPB)

Tân từ: Mỗi bộ lưu trữ thông tin về một nhân viên MANV: Mã số

nhân viên (Khóa), HO: Họ và họ đệm, TEN: Tên, NS: năm sinh, LCB: Lương căn bản, MAPB: Mã phòng ban làm việc

Trang 32

Điều kiện so khớp mẫu

_ : (Dấu gạch dưới) một kí tự bất kỳ tại vị trí nó đứng

Ví dụ: Lấy tất cả sinh viên có họ bắt đầu ‘Tran’

SELECT *

FROM SINHVIEN

WHERE HO LIKE ‘Tran%’

Trang 33

Điều kiện so khớp mẫu

(LIKE)

Ví dụ: NHANVIEN(MANV, TENNV, DIACHI)

a) Lấy danh sách các nhân viên có kí tự thứ 3 trong mã

Trang 34

Điều kiện so khớp mẫu

(LIKE)

Ví dụ: SV(MASV, TENSV, DIACHI)

a) Lấy danh sách các sinh viên mà trong địa chỉ có

chuỗi Q3

???

a) Lấy danh sách các sinh viên mà trong HOHV có

chuỗi ‘Thi’???

b) Lấy danh sách các sinh viên mà cuối cùng bên phải

của địa chỉ là chuỗi ‘Ho Chi Minh’

???

Trang 35

Dạng sử dụng của toán tử

Between và IN

<biểu thức> BETWEEN <giá trị 1> AND <giá trị 2> : biểu diễn điều kiện

<giá trị 1>  <biểu thức>  <giá trị 2>

<biểu thức> NOT BETWEEN <giá trị1> AND <giá trị2> : biểu diễn điều kiện :

<biểu thức> < <giá trị 1> hoặc <biểu thức> > <giá trị 2>

<biểu thức> IN (<tập hợp>) : biểu diễn điều kiện

<biểu thức> bằng một trong các giá trị của <tập hợp>

<biểu thức> NOT IN (<tập hợp>) : biểu diễn điều kiện

<biểu thức> không thuộc về <tập hợp>

<biểu thức ký tự> [NOT] LIKE <chuỗi ký tự>: biểu diễn điều kiện

<biểu thức ký tự> [không] giống <chuỗi ký tự>

Trong <chuỗi ký tự> có thể dùng các kí tự đại diện:

% (dấu phần trăm, một số DBMS sử dụng kí tự *) đại diện cho nhóm ký tự bất kỳ

_ (dấu nối, một số DBMS sử dụng kí tự ?) đại diện cho một ký tự bất kỳ

 Biểu thức: <thuộc tính> IS [NOT] NULL: biểu diễn điều kiện

Giá trị của <thuộc tính> là [khác] NULL

Trang 37

Sinhvien

Trang 38

Các toán tử

IN (tập hợp)

 Tập hợp để kiểm tra có thể là kết quả của một SQL con

Ví dụ: Xét KETQUA(MASV, MAMH, LANTHI, DIEM)

SINHVIEN(MASV,HOSV, TENSV, MANG,…)

- Lệnh SQL lấy mã số, họ, tên của các sinh viên đã có điểm thi môn ‘CSDL1’

SELECT MASV,HOSV,TENSV

FROM SINHVIEN

WHERE MASV IN (SELECT MASV

FROM KETQUA WHERE MAMH=‘CSDL1’)

Trang 39

So sánh với giá trị Null

 Không thể dùng các phép toán =, <> để so sánh với giá trị null

 Phải sử dụng dạng so sánh:

- Bằng null:

<thuộc tính> IS NullHoặc:

- Khác null:

<thuộc tính> IS NOT Null

Trang 40

Ví dụ:

 HOADON(SOHD, NGAYHD,MAKH, MANV, NGAYTT)

 SOHD: Số hiệu hóa đơn

 NGAYHD: Ngày lập hóa đơn

 MAKH: Mã số của khách hàng

 MANV: Mã số của nhân viên bán

 NGAYTT: Ngày thanh toán, nếu khách chưa thanh toán thì NGAYTT có giá trị Null.

 Viết lệnh SQL lấy danh sách các hóa đơn chưa thanh thanh toán

Trang 42

2 Các kiểu kết nối (Join

types) SQL

Từ SQL-92, cung cấp 4 kiểu kết nối: inner join, left

outer join, right outer join và full outer join

r1 left outer join r2 on r1.B=r2.B

r1 r2

r1 inner join r2 on r1.B=r2.B r1 r2

Trang 43

Các kiểu kết nối(tt)

r1 right outer join r2 on r1.B=r2.B

r1 full outer join r2 on r1.B=r2.B

r1 r2

r1 r2

Trang 45

KetQua(MASV, MAMH, LANTHI, DIEM))

SinhVien(MASV, HOSV, TENSV, MANGANH,…))

Điều kiện kết

Trang 46

LEFT OUTER JOIN

Left Outer join

… r1 LEFT OUTER JOIN r2 ON <đk>

Trang 47

RIGHT OUTER JOIN

Right Outer join

… r1 RIGHT OUTER JOIN r2 ON <đk>

Trang 48

3 Đổi tên thuộc tính hay quan

hệ

<tên cũ> AS <Tên mới>

Ví dụ: Từ CSDL “QLSV” đã cho, lấy ra danh sách các sinh viên

cùng ngành với sinh viên mã số 104:

Tương ứng với biểu thức đại số quan hệ:

Câu lệnh SQL tương ứng:

select Sinhvien.*

where sv.MASV='104' and

sv.MANGANH=Sinhvien.MANGANH

))) (

(

(

' 104 '

.MANGANH Sinhvien MANGANH sv MASV Sinhvien sv Sinhvien

Đặt lại tên mới cho quan hệ là sv

Trang 49

Câu hỏi tương tự

 Viết lệnh SQL cho biết danh sách sinh viên có cùng quê quán với sinh viên có mã số 101?

 Cho biết danh sách sinh viên có điểm môn CSDL1, lần 1 bằng với điểm môn CSDL1, lần 1 của sinh viên

mã số 104

Trang 50

ASC : Sắp tăng trên <thuộc tính>.

DESC : Sắp giảm trên <thuộc tính>.

Ưu tiên sắp trên <thuôc tính 1> , rồi đến <thuộc tính 2>,…

Ví dụ:

select * from Sinhvien order by TENSV ASC, HOSV ASC

Trang 52

Xét LĐCSDL trong bài tập

số 2

“Quản lý thuê bao”

KHÁCH(Mã_KH, Tên, Địa_Chỉ_K, Số_CMND)

Tân từ: Mỗi khách hàng được gán một mã số để phân biệt với các khách

hàng khác Tên, Địa_Chỉ_K, Số_CMND lần lượt là tên, địa chỉ và số CMND của khách hàng.

THUE_BAO(Số_TB, Mã_KH, Ngày_ĐK, Nơi_Đặt)

Tân từ: Mỗi điện thoại có một số thuê bao (Số_TB) duy nhất, thuộc về một

chủ thuê bao (Mã_KH), đăng ký vào một ngày (Ngày_ĐK) xác định và đặt

(NƠI_ĐẶT) tại một nơi duy nhất Một khách hàng có thể là chủ của nhiều số thuê bao khác nhau.

CUOC(Số_TB, Tháng, Năm, Cước_PS)

Tân từ: Cước phát sinh (Cước_PS) từng tháng trong năm của mỗi số thuê

bao được ghi nhận bởi một bộ trong quan hệ Cước này được tính dựa trên nhật ký cuộc gọi phát sinh thực tế của số thuê bao.

Trang 53

Viết lệnh SQL đáp ứng yêu

cầu sau

a) Cho bết danh sách khách hàng có địa chỉ tại TP HCM

(trong địa chỉ có chứa cụm từ Tp HCM)

b) Cho biết tên và địa chỉ của khách hàng là chủ của số

thuê bao số 3819256

c)Cho biết danh sách các số thuê bao mà khách hàng có số

chứng minh nhân dân 3819256 đăng ký cùng với nơi đặt số thuê bao đó

d) Cho biết thông tin gồm số thuê bao, tháng, cước phát

sinh trong năm 2011 cùng thông tin về khách hàng

(mã số, tên và địa chỉ) là chủ đăng ký thuê bao

Trang 56

Các phép toán tập hợp

Ví dụ: Từ CSDL “QLSV” đã cho, cho biết danh sách mã số các

sinh viên có điểm thi cả 2 môn T001 và CSDL1.

(Select distinct MASV

From Sinhvien Where MAMH=‘T001’))

Intersect

(Select distinct MASV

From Sinhvien Where MAMH=‘CSDL1’))

Trang 58

(Select MASV From Ketqua Where MAMH=‘CSDL1’))

MASV(MANGANH=‘TH’ KHOAHOC=’04’ (Sinhvien))))- MASV(MAMH=‘CSDL1’(Ketqua))))

SQL:

Trang 59

Hàm EXISTS

 Hàm EXISTS(<tập hợp>) dùng để kiểm tra tập hợp có khác rỗng hay không Nếu tập hợp cần kiểm tra khác rỗng thì hàm cho giá trị True, ngược lại hàm cho giá trị False

Ví dụ: Lấy danh sách sinh viên đã có điểm môn CSDL1

SELECT *

FROM SINHVIEN AS SV

WHERE

EXISTS (SELECT * FROM KETQUA AS KQ

WHERE MAMH=‘CSDL1’ AND

KQ.MASV=SV.MASV)

Trang 60

 Với phép giao có biểu thức đại số quan hệ là:

A,B (r 1 ) A,B (r 2 )

Trang 61

Sử dụng truy vấn lồng nhau

Ví dụ: Từ CSDL “QLSV” đã cho, cho biết danh sách mã số các

sinh viên có điểm thi cả 2 môn T001 và CSDL1

Select MASV

from Ketqua as t

where MAMH=‘CSDL1’) and

exists (Select * from Ketqua

where t.MASV=Ketqua.MASV

and ketqua.MAMH=‘T001’)

Trang 63

Truy vấn lồng nhau

Ví dụ: Lệnh SQL trong có thể viết lại:

Select MASV from Sinhvien as sv where MANGANH='TH' and KHOAHOC='04‘ and

not exists (select *

from Ketqua where MASV=sv.MASV and

MAMH='CSDL1')

Trang 64

Các toán tử <, <=, = ,> ,>=,<> với ANY / ALL

F <comp> all r t r, (F <comp> t)

0 5 6

(5 < all ) = false

6 10 4

) = true

5 4 6

(5 > all ) = false

5

3 ) = true

(5 >= all

Trang 65

F <comp> any r t r sao cho (F <comp> t )

trong đó <comp> có thể là:  <= >=,  <>

0 5 6

(5 < any ) = true

0 5 0

) = false

5 0 5

Trang 66

Các toán tử <, <=, = ,> ,>=,<> với ANY / ALL

Trang 68

Các toán tử <, <=, = ,> ,>=,<> với ANY / ALL

Kết quả của câu lệnh sau?

Select *

from Nhanvien

where NamSinh= (Select min(NamSinh)

from Nhanvien)

Trang 69

Các toán tử <, <=, = ,> ,>=,<> với ANY / ALL

Where MAMH=‘CSDL1’ and LANTHI=1 and

DIEM >=all (Select DIEM

from ketqua where MAMH=‘CSDL1’ and LANTHI=1))

Trang 71

Các hàm tổng hợp dữ liệu

 Các hàm sau đây tính toán trên tâp giá trị của một thuộc tính

và trả về một kết quả:

avg(<thuộc tính>): Tính trung bình trên <thuộc tính>

sum(<thuộc tính>): Tính tổng giá trị trên <thuộc tính>.

min(<thuộc tính>): Lấy giá trị nhỏ nhất trên <thuộc tính> max(<thuộc tính>): Lấy giá trị lớn nhất trên <thuộc tính> count(*|<thuộc tính>|distinct <thuộc tính>): Đếm các bộ

trong quan hệ:

Count(*): Đếm tất cả các bộ

Count(<thuộc tính>): Chỉ đếm các bộ mà giá trị của <thuộc tính> khác null.

Count(distinct <thuộc tính>): Chỉ đếm các bộ mà giá trị của <thuộc tính>

khác null và mỗi nhóm các bộ có giá trị trên <thuộc tính> giống nhau chỉ được đếm 1 lần.

Trang 72

Các hàm tổng hợp dữ liệu

Ví dụ: Xét quan hệ Sinhvien

Lệnh:

Select Count(MANGANH)From Sinhvien

Trang 75

Cho biết số lượng SV mỗi ngành?

Trang 76

Tổng hợp dữ liệu theo nhóm

Ví dụ: Xét 2 quan hệ Chitiet_pn và Dmhang:

Lệnh sau đây cho biết tổng số lượng mỗi mặt hàng đã nhập

Select pn.MAMH,TENMH,DVT,sum(SLNHAP) as TONGNHAP

From Chitiet_pn as pn, dmhang as dmh

Where pn.MAMH=dmh.MAMH

Group by pn.MAMH,TENMH,DVT

Kết quả Dmhang Chitiet_pn

Trang 77

Where <điều kiện trên bộ> group by Ai1, Ai2,…Ain

having <điều kiện trên nhóm>  Select

Nghĩa là: “Chọn ra các bộ thỏa điều kiện trong mệnh đề where, kết quả sau

đó được phân nhóm theo mệnh đề group by, chỉ nhóm nào thỏa điều kiện trong phát biểu having mới được giữ lại trong kết quả”.

Ngày đăng: 22/03/2021, 20:28

TỪ KHÓA LIÊN QUAN