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

Public cuối kì cơ sở dữ liệu k15 21 22

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 (2.17 MB, 78 trang )

CƠ SỞ DỮ LIỆU
BHT Đoàn khoa MMT&TT – Training cuối kì 1
kì I

Trainers:
Vũ Minh Đức – ATTT2020
Trần Đặng Hờng Loan - ATCL2020

1


NỘI DUNG CHÍNH

Ràng buộc
tồn vẹn
Ngơn ngữ
truy vấn

Phụ thuộc hàm
Dạng chuẩn

2


1

NGÔN NGỮ TRUY VẤN

3



Nội dung chính
5. Truy vấn có sắp xếp
1. Tốn tử cơ bản

6. Truy vấn có gom nhóm

2. Truy vấn tổng quát

7. Truy vấn lồng

3. Truy vấn cơ bản

8. Phép toán tập hợp

4. Truy vấn có kết bảng

9. Phép chia

4


1. Toán tử cơ bản
- Toán tử so sánh: =, >, >=, <=, <>
- Toán tử logic: AND, OR, NOT
- Phép toán: +, -, * , /
- Toán tử khác: BETWEEN .... AND; IS NULL, IS NOT NULL;
LIKE (_ , %); IN, NOT IN; EXISTS, NOT EXISTS; SOME, ANY, ALL

5



2. Truy vấn tổng quát

SELECT [DISTINCT] * | <tên cột>
FROM <tên bảng>
[WHERE <điều kiện>]
[GROUP BY <tên cột>]
[HAVING <điều kiện>]
[ORDER BY <tên cột> ASC | DESC]

6


3. Truy vấn cơ bản

SELECT <tên cột>
FROM <tên bảng>
[WHERE <điều kiện>]

Tên các cột cần
hiển thị trong kết
quả truy vấn

Tên các bảng
liên quan đến
truy vấn

Biểu thức điều kiện
sử dụng các toán
tử


7


4. Truy vấn có kết bảng
SELECT <danh sách cột>
FROM <bảng A> [INNER] JOIN <bảng B>
ON <bảng A>.<khóa ngoại> = <bảng B>.<khóa chính>
[WHERE <điều kiện> ]

Các phép kết:
- [INNER] JOIN : kết bảng
- LEFT JOIN : kết mở rộng về phía
bên trái
- RIGHT JOIN : kết mở rộng về phía
bên phải

VD:
SELECT H.MAKH,HOTEN
FROM HOADON AS H JOIN KHACHHANG AS K
ON K.MAKH=H.MAKH
WHERE YEAR(NGHD)=2017

8


Câu 1.2b:
Cho biết thông tin(MAKB, MABN, HOTEN) của những bệnh nhân sinh sau năm 2020
có khám bệnh chính là ‘Tim mạch’.
BENHNHAN(MABN, HOTEN, NGSINH, CMND, DIACHI, DOITUONG, SLPT)

KHAMBENH(MAKB, MABN, BENH, BENHKT, BATDAU, KETHUC, KETLUAN, TAIKHAM)

SELECT K.MAKB, B.MABN, HOTEN
FROM KHAMBENH K JOIN BENHNHAN B
ON K.MABN = B.MABN
WHERE YEAR(B.NGSINH) > 2020 AND K.BENH = ‘Tim mạch’

9


5. Truy vấn có sắp xếp
SELECT <danh sách cột>
FROM <danh sách bảng>
WHERE <điều kiện>
ORDER BY <danh sách cột> [ASC | DESC]

Lưu ý:

- ASC : tăng và DESC : giảm
- Khi sau mệnh đề ORDER BY chỉ có danh sách cột thì mặc định sẽ sắp
xếp ASC (tăng dần)

10


5. Truy vấn có sắp xếp
SELECT DOANHSO, NGDK
FROM KHACHHANG
ORDER BY DOANHSO, NGDK


=> Sắp xếp tăng dần theo
DOANHSO, nếu có cùng
DOANHSO sẽ sắp xếp tăng
dần theo NGDK

DOANHSO

NGDK

100,000

2/9/2018

100,000

10/10/2020

1,000,000

2/2/2008

3,000,000

11/4/2011

11


Câu 1.2a: (HK1 2020-2021)
Cho biết thông tin bệnh nhân (HOTEN, CMND) thuộc đối tượng ‘BHYT’

hoặc có địa chỉ ở ‘Đồng Nai’. Kết quả được sắp xếp theo số lần phẫu thuật
giảm dần.
BENHNHAN(MABN, HOTEN, NGSINH, CMND, DIACHI, DOITUONG, SLPT)

SELECT HOTEN, CMND
FROM BENHNHAN
WHERE DOITHUONG = ‘BHYT’ OR DIACHI = ‘Đồng Nai’
ORDER BY SLPT DESC

12


6. Truy vấn có gom nhóm
SELECT <danh sách cột>, <hàm kết hợp>
FROM <danh sách bảng>
WHERE <điều kiện>
GROUP BY <danh sách cột gom nhóm>
HAVING <điều kiện gom nhóm>

- Các hàm kết hợp: COUNT, MIN, MAX, SUM, AVG
- 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ính gom nhóm.
- Sử dụng HAVING để kiểm tra một số điều kiện nào đó và sau khi gom
nhóm, điều kiện gom nhóm mới được thực thi
13


6. Truy vấn có gom nhóm
Ví dụ: In ra thơng tin nhân viên có số lượng hóa đơn đã lập ít hơn 2:


SELECT NV.MANV, NV.HOTEN, COUNT(*) AS TongSoHD
FROM HOADON HD, NHANVIEN NV
WHERE HD.MANV = NV.MANV
GROUP BY NV.MANV, NV.HOTEN
HAVING COUNT(*) <= 2

14


Câu 1.2c: (HK1 2020-2021)
Cho biết số lần khám bệnh của từng bệnh nhân trong năm 2020. Thông tin hiển thị
gồm: MABN, HOTEN và SL.
BENHNHAN(MABN, HOTEN, NGSINH, CMND, DIACHI, DOITUONG, SLPT)
KHAMBENH(MAKB, MABN, BENH, BENHKT, BATDAU, KETHUC, KETLUAN, TAIKHAM)

SELECT B.MABN, HOTEN, COUNT(K.MAKB) AS SL
FROM BENHNHAN B JOIN KHAMBENH K
ON B.MABN = K.MABN
WHERE YEAR(K.BATDAU) = 2020 AND YEAR(K.KETTHUC) = 2020
GROUP BY B.MABN

15


7. Truy vấn lồng
Câu truy vấn cha
(Outer query)
SELECT < danh sách cột>
FROM <danh sách bảng>
WHERE <so sánh tập hợp>


(
SELECT <danh sách cột>
FROM <danh sách bảng>
WHERE <điều kiện>
)

Câu truy vấn con
(Subquery)
16


7. Truy vấn lồng
* 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

* 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ện trước.

* Lồng tương quan: Mệnh đề WHERE của truy vấn con tham chiếu ít

nhất mộ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ện nhiều
lần, mỗi lần tương ứng với một bộ của truy vấn cha


17


7. Truy vấn lồng
Ví dụ: Tìm hóa đơn của khách hàng có ngày đăng ký trùng với ngày hóa đơn.

SELECT *
FROM HOADON HD
WHERE EXISTS
( SELECT *
FROM KHACHHANG KH
WHERE KH.MAKH = HD.MAKH
AND KH.NGDK=HD.NGHD )

18


Câu 1.2d: (HK1 2020-2021)
Cho biết thông tin những bác sĩ (MABS, HOTEN) có chun mơn ‘Tai-MũiHọng’ chưa được phụ trách khám bệnh trong năm 2020 (BATDAUPT).
BACSI(MABS, HOTEN, NAMSINH, CHUYENMON, KHOA, BENHVIEN)
PHUTRACH(MABS, MAKB, BATDAUPT, KETTHUCPT)
SELECT MABS, HOTEN
FROM BACSI
WHERE CHUYEMON = ‘Tai–Mũi–Họng’ AND
MABS NOT EXISTS ( SELECT B.MABS
FROM BACSI B JOIN PHUTRACH P
ON B.MABS = P.MABS
WHERE B.CHUYEMON = ‘Tai–Mũi–Họng’ AND
YEAR(P.BATDAUPT) = 2020 )

19


8. Phép toán tập hợp
SELECT <danh sách cột 1>
FROM <danh sách bảng>
WHERE <điều kiện 1>
UNION (hội) |INTERSECT (giao) |EXCEPT (trừ)
SELECT <danh sách cột 2>
FROM <danh sách bảng>
WHERE <điều kiện 2>

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

Lưu ý: Để sử dụng các phép hội giao trừ thì 2 quan hệ phải khả hợp,
tức: <danh sách cột 1> = <danh sách cột 2>

20


8. Phép tốn tập hợp
VD1: Tìm mã hóa đơn có
chứa mã sản phẩm SP02

hoặc SP05
SELECT MAHD
FROM CTHD
WHERE MASP = ‘SP02’
UNION
SELECT MAHD
FROM CTHD
WHERE MASP = ‘SP05’

VD2: Tìm mã hóa đơn có
chứa cùng lúc mã sản
phẩm SP02 và SP05
SELECT MAHD
FROM CTHD
WHERE MASP = ‘SP02’
INTERSECT
SELECT MAHD
FROM CTHD
WHERE MASP = ‘SP05’

21


8. Phép tốn tập hợp
VD3: Tìm nhân viên khơng lập hoá đơn nào vào
ngày 1/10/2020
SELECT MANV, HOTEN
FROM NHANVIEN
EXCEPT
SELECT MANV, HOTEN

FROM NHANVIEN JOIN HOADON
ON NHANVIEN.MANV = HOADON.MANV
WHERE HOADON.NGHD = ‘1/10/2020’

22


9. Phép chia
R

A

B

C

D

E

D

E

A

B

C


α

a

α

a

1

a

1

a

a

γ

α

a

γ

a

1


b

1

γ

a

γ

α

a

γ

b

1

β

a

γ

a

1


β

a

γ

b

3

γ

a

γ

a

1

γ

a

γ

b

1


γ

a

β

b

1

S

=> R:S là tập các giá trị ai trong R sao cho khơng
có giá trị bi nào trong S làm cho bộ (ai , bi )
không tồn tại trong R

23


9. Phép chia
SELECT R1.A, R1.B, R1.C
FROM R R1
WHERE NOT EXISTS ( SELECT *
FROM S
WHERE NOT EXISTS ( SELECT *
FROM R R2
A
B
C
WHERE R2.D=S.D AND

R2.E=S.E AND
R1.A=R2.A AND
a
a
γ
R1.B=R2.B AND
R1.C=R2.C )
γ
a
γ
)
24


9. Phép chia
VD: Tìm trị giá hóa đơn đã mua tất cả các sản phẩm
SELECT HD.TRIGIA
FROM HOADON HD
WHERE NOT EXISTS ( SELECT *
FROM SANPHAM SP
WHERE NOT EXISTS ( SELECT *
FROM CTHD CT
WHERE CT.MASP = SP.MASP AND
CT.SOHD = HD.SOHD
)
)

25



×