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 2Giớ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 3Cá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 4Cá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 8Cá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 9SQL
Trang 101 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 111.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 12Thuộ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 13Có 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 141.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 15Truy 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 16Truy vấn tương ứng với
Trang 171.3 Truy vấn tương ứng với
Trang 18Truy 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 19Truy 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 20Ví 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 22Xé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 23c) 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 24Ví dụ:
Trang 25Chỉ đị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 261.5 Thực hiện phép kết với
mệnh đề WHERE
SELECT … FROM r1, r2, …
Trang 271.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 28Ví 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 29Phieunhap 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 30SẮ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 35Dạ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 37Sinhvien
Trang 38Cá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 39So 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 40Ví 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 422 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 43Cá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 45KetQua(MASV, MAMH, LANTHI, DIEM))
SinhVien(MASV, HOSV, TENSV, MANGANH,…))
Điều kiện kết
Trang 46LEFT OUTER JOIN
Left Outer join
… r1 LEFT OUTER JOIN r2 ON <đk>
Trang 47RIGHT OUTER JOIN
Right Outer join
… r1 RIGHT OUTER JOIN r2 ON <đk>
Trang 483 Đổ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 49Câ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 50ASC : 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 52Xé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 53Viế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 56Cá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 59Hà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 61Sử 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 63Truy 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 64Cá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 66Các toán tử <, <=, = ,> ,>=,<> với ANY / ALL
Trang 68Cá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 69Cá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 71Cá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 72Cá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 75Cho biết số lượng SV mỗi ngành?
Trang 76Tổ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 77Where <đ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ả”.