---
# System prepended metadata

title: BT HW#5
tags: [Lecture HCMUS, DataBase]

---

**Họ và Tên:** Lê Phước Phát
**MSSV:** 22127322
**Lớp:** 22CLC10

---
**Các câu bài tập ĐSQH trong slide bài giảng:**
* Cho biết họ tên và mức lương của các giáo viên nữ $$\Pi_{\text{HOTEN, LUONG}}(\sigma_{\text{PHAI = 'Nữ'}}(\text{GIAOVIEN}))$$
* Cho biết mã số các giáo viên thuộc bộ môn HTTT hoặc có tham gia đề tài mã 001 $$\Pi_{MAGV}(\sigma_{\text{MABM = 'HTTT'}}(\text{GIAOVIEN})) \cup \Pi_{\text{MAGV}}(\sigma_{\text{MADT='001'}}(\text{THAMGIADT}))$$
* Cho biết mã số các trưởng khoa có chủ nhiệm đề tài $$\Pi_{\text{TRUONGKHOA}}(\text{KHOA}) \cap \Pi_{\text{GVCNDT}}(\text{DETAI})$$
* Cho biết tên các công việc bắt đầu trong khoảng từ 01/01/2007 đến 01/08/2007 $$\Pi_{\text{TENCV}}(\sigma_{\text{NGAYBD $\geq$ '1/1/2007'} \wedge \text{NGAYBD $\leq$ '1/8/2007'}}(\text{CONGVIEC}))$$
* Given the schema **PHANCONG(MANV, MAĐA, THOIGIAN)** and the query “Cho biết danh sách mã nhân viên vừa có tham gia đề án số 1 vừa có tham gia đề án số 2”. $$\Pi_{\text{MANV}}(\sigma_{\text{MADA = 1}}(\text{PHANCONG})) \cap \Pi_{\text{MANV}}(\sigma_{\text{MADA = 2}}(\text{PHANCONG}))$$
* Cho biết họ tên của các giáo viên và lương của họ sau khi tăng $10\%$ $$\Pi_{\text{HOTEN, LUONG * 1.1}}(\text{GIAOVIEN})$$
* Cho biết mã số và họ tên giáo viên thuộc bộ môn HTTT 
	* Cách 01: $$\Pi_{\text{MAGV, HOTEN}}(\sigma_{\text{MABM = 'HTTT'}}(\text{GIAOVIEN}))$$
	* Cách 02: $$\begin{cases} \text{GV_HTTT} \gets \sigma_{\text{MABM = 'HTTT'}}(\text{GIAOVIEN}) \\ \text{KQ} \gets \Pi_{\text{MAGV, HOTEN}}(\text{GV_HTTT}) \end{cases}$$
* Cho biết thông tin của bộ môn cùng thông tin giảng viên làm trưởng bộ môn đó $$\begin{cases} \text{BM_GV} \gets (\text{GIAOVIEN $\times$ BOMON}) \\ \text{KQ} \gets \sigma_{\text{TRUONGBM = MAGV}}(\text{BM_GV})\end{cases}$$
* Cho biết mức lương cao nhất của các giảng viên
	* Bước 01: Chọn ra những lương không phải lớn nhất
		* $r_1 \gets \Pi_{\text{LUONG}}(\text{GIAOVIEN})$
		* $r_2 \gets \sigma_{\text{GIAOVIEN.LUONG} < r_1.\text{LUONG}}(\text{GIAOVIEN} \times r_1)$
		* $r_3 \gets \Pi_{r_2.\text{LUONG}}(r_2)$
	* Bước 02: Lấy tập hợp lương trừ đi lương trong $r_3$
		* $\text{KQ} \gets \Pi_{\text{LUONG}}(\text{GIAOVIEN}) - r_3$
* Cho biết họ tên các giáo viên cùng bộ môn với giáo viên ‘Trần Trà Hương’
	* Bước 01: Tìm bộ môn mà giáo viên "Trần Trà Hương" thuộc về
		* $r_1 \gets \Pi_{\text{MABM, MAGV}}(\sigma_{\text{HOTEN='Trần Trà Hương'}}(\text{GIAOVIEN}))$
	* Bước 02: Lấy ra họ tên các giáo viên cùng bộ môn.
		* $r_2 \gets \sigma_{\text{HOTEN <> 'Trần Trà Hương'}}(\text{GIAOVIEN})$
		* $r_3 \gets \sigma_{r_1.\text{MABM} = r_2.\text{MABM}}(r_1 \times r_2)$
		* $\text{KQ} \gets \Pi_{\text{HOTEN}}(r_3)$
* Cho biết lương cao nhất trong bộ môn ‘HTTT’
	* $r_1 \gets \Pi_{\text{LUONG}}(\sigma_{\text{TENBM = 'Hệ thống thông tin'}}(\text{GIAOVIEN} \bowtie \text{BOMON}))$
	* $\text{KQ} \gets \mathfrak{J}_{\text{MAX(LUONG)}}(r_1)$
* Với mỗi khoa cho biết thông tin trưởng khoa $$\text{KQ} \gets \Pi_{\text{MAGV, HOTEN}}(\text{GIAOVIEN} \bowtie_{\text{MAGV = TRUONGKHOA}} \text{KHOA})$$
* Cho biết mã giáo viên tham gia tất cả công việc thuộc đề tài 001 $$\text{KQ} \gets \Pi_{\text{MAGV}}(\sigma_{\text{MADT='001'}}(\text{CONGVIEC}))$$$$- \Pi_{\text{MAGV}}((\Pi_{\text{MADT}}(\sigma_{\text{MADT='001'}}(\text{CONGVIEC}))) - (\text{THAMGIADT}))$$

* Cho biết tên đề tài có tất cả giảng viên bộ môn ‘Hệ thống thông tin’ tham gia $$\text{KQ} \gets \Pi_{\text{MADT}}(\text{DETAI}) \div (\Pi_{\text{MADT}}(\sigma_{\text{MABM='HTTT'}}(\text{DETAI}))) $$$$- \Pi_{\text{TENDT}}((\Pi_{\text{MADT}}(\sigma_{\text{MABM='HTTT'}}(\text{DETAI}))) - \text{THAMGIADT})$$
* Cho biết số lượng giáo viên viên và tổng lương của họ $$\text{KQ}(\text{SL, TL}) \gets \mathfrak{J}_{\text{COUNT(MAGV), SUM(LUONG)}}(\text{GIAOVIEN})$$
* Cho biết số lượng giáo viên và lương trung bình của từng bộ môn $$\text{KQ}(\text{SLGV, LTB}) \gets _{\text{MABM, TENBM}}\mathfrak{J}_{\text{COUNT(MAGV), AVG(LUONG)}}(\text{GIAOVIEN} \bowtie \text{BOMON})$$
* Cho biết tên khoa có đông giáo viên nhất
	* Bước 01: Tính số lượng giáo viên có trong mỗi Khoa $$r_1(\text{COUNT_HOTEN}) \gets _{\text{MAKHOA, TENKHOA}}\mathfrak{J}_{\text{COUNT(HOTEN)}}(\text{GIAOVIEN} \times \text{BOMON} \times \text{KHOA})$$
	* Bước 02: Tính số lượng lớn nhất của số giáo viên $$r_2(\text{MAX_COUNT}) \gets \mathfrak{J}_{\text{MAX(COUNT_HOTEN)}}(r_1)$$
	* Bước 03: Tìm khoa có số giáo viên lớn nhất $$\text{KQ} \gets \Pi_{\text{MAKHOA, TENKHOA}}(r_1 \bowtie_{\text{COUNT_HOTEN = MAX_COUNT}} r_2)$$
* Cho biết tên chủ đề và số lượng đề tài thuộc về chủ đề đó
	* $r_1(\text{num_projects}) \gets _{\text{MACD, TENCD}}\mathfrak{J}_{\text{COUNT(MADT)}}(\text{DETAI} \bowtie \text{CHUDE})$
	* $\text{KQ} \gets \Pi_{\text{TENCD, num_projects}}(r_1 \bowtie \text{CHUDE})$
* Cho danh sách tên bộ môn và họ tên trưởng bộ môn đó nếu có.

	* $r_1 \gets \text{BOMON} =\bowtie_{\text{TRUONGBM = MAGV}} \text{GIAOVIEN}$
	* $\text{KQ} \gets \Pi_{\text{TENBM, HOTEN}}(r_1)$

---
**Sử dụng lược đồ Test#1, làm các câu sau dưới dạng ĐSQH:**
<center>
	<img src = https://scontent.fsgn5-10.fna.fbcdn.net/v/t1.15752-9/431206612_1102300197672006_1276315894961823442_n.png?_nc_cat=101&ccb=1-7&_nc_sid=5f2048&_nc_ohc=Nlmg_INnCIkAX_qlOZM&_nc_ht=scontent.fsgn5-10.fna&oh=03_AdRbiCVpMmu8OpYx10pLZSpm3NsIzw9R8BahJ10qQznSSg&oe=66162C6C>
</center>

1. **Find name of customers who don’t make any order**
	* Bước 01: Lấy ID và NAME của những customers đã mua hàng $$r_1\gets \Pi_{\text{ID, NAME}}(\text{CUSTOMER} \bowtie_{\text{ID = CUSTOMER_ID}} \text{ORDER})$$
	* Bước 02: Lấy tất cả khách hàng trừ cho những khách hàng đã có đơn hàng $$\text{KQ} \gets \Pi_{\text{NAME}}(\Pi_{\text{ID, NAME}}(\text{CUSTOMER}) - r_1)$$
2. **Find id, date and amount of all orders of "Brian"**
	* Bước 01: Equi join bảng CUSTOMER và ORDER với điều kiện ID = CUSTOMER_ID $$r_1 \gets \text{CUSTOMER} \bowtie_{\text{ID = CUSTOMER_ID}} \text{ORDER}$$
	* Bước 02: Lấy O_ID, Date, Amount của $r_1$ $$\text{KQ} \gets \Pi_{\text{O_ID, DATE, Amount}}(\sigma_{\text{NAME = 'Brian'}}(r_1))$$
3. **Find name of customers who have bought all items**
	* Bước 01: Equi join bảng CUSTOMER với bảng ORDER thỏa điều kiện ID = CUSTOMER_ID $$r_1 \gets \text{CUSTOMER} \bowtie_{\text{ID = CUSTOMER_ID}} \text{ORDER}$$
	* Bước 02: Natural join bảng $r_1$ với bảng DETAILS $$r_2 \gets r_1 \bowtie \text{DETAILS}$$
	* Bước 03: Đếm các P_ID phân biệt group by ID, NAME trong bảng $r_2$ $$r_3(\text{num_items}) \gets _{\text{ID, NAME}}\mathfrak{J}_{\text{COUNT(DISTINCT P_ID)}}(r_2)$$
	* Bước 04: Tìm max của num_items trong bảng $r_3$ $$r_4(\text{max_items}) \gets \mathfrak{J}_{\text{MAX(num_items)}}(r_3)$$
	* Bước 05: Lấy ID, NAME của các khách hàng có số lượng mua items cao nhất $$\text{KQ} \gets \Pi_{\text{ID, NAME}}(r_3 \bowtie_{\text{max_items = num_items}}r_4)$$

4. **Find name of customers who bought ‘Dell XYZ’**
	* Bước 01: Equi join bảng CUSTOMER và bảng ORDER với điều kiện ID = CUSTOMER_ID $$r_1 \gets \text{CUSTOMER} \bowtie_{\text{ID = CUSTOMER_ID}} \text{ORDER}$$
	* Bước 02: Lấy bảng $r_1$ natural join với bảng DETAILS $$r_2 \gets r_1 \bowtie \text{DETAILS}$$
	* Bước 03: Equi join bảng $r_2$ với bảng PRODUCT với điều kiện $r_2.\text{P_ID} = \text{PID}$ $$r_3 \gets r_2 \bowtie_{\text{$r_2$.P_ID = PID}} \text{PRODUCT}$$
	* Bước 04: Lấy NAME của những khách hàng từ bảng $r_3$ với điều kiện $r_3.\text{Pname = 'Dell XYZ'}$ $$\text{KQ} \gets \Pi_{\text{NAME}}(\sigma_{\text{$r_3$.Pname = 'Dell XYZ'}}(r_3))$$
5. **Retrieve the name, number of orders, and total purchase amount for each customer in Chicago**
	* Bước 01: Equi join bảng CUSTOMER và bảng ORDER với điều kiện ID = CUSTOMER_ID và City = 'Chicago' $$r_1 \gets \sigma_{\text{City = 'Chicago'}} (\text{CUSTOMER} \bowtie_{\text{ID = CUSTOMER_ID}} \text{ORDER})$$
	* Bước 02: Tính tổng Amount group by ID, NAME từ bảng $r_1$ $$r_2(\text{TOTAL_PURCHASE}) \gets _{\text{ID, NAME}}\mathfrak{J}_{\text{SUM(Amount)}}(r_1)$$
	* Bước 03: Đếm số orders của khách hàng group by ID, NAME từ bảng $r_1$ $$r_3(\text{NUM_ORDERS}) \gets _{\text{ID, NAME}}\mathfrak{J}_{\text{COUNT(O_ID)}}(r_1)$$
	* Bước 04: Lấy NAME, NUM_ORDERS, TOTAL_PURCHASE của bảng $r_2$ join $r_3$ $$\text{KQ} \gets \Pi_{\text{NAME, NUM_ORDERS ,TOTAL_PURCHASE}}(r_2 \bowtie r_3)$$
6. **Retrieve the names of products with the highest total sales revenue**
	* Bước 01: Equi join bảng PRODUCT và bảng DETAILS thỏa PID = P_ID $$r_1 \gets \text{PRODUCT} \bowtie_{\text{PID = P_ID}} \text{DETAILS}$$
	* Bước 02: Tính tổng doanh thu của từng kiện hàng dựa theo PID trong bảng $r_1$ $$r_2(\text{total_sales}) \gets _{\text{PID}}\mathfrak{J}_{\text{SUM(DTAmount)}}(r_1)$$
	* Bước 03: Tìm tổng doanh thu lớn nhất trong bảng $r_2$ $$r_3(\text{max_sales}) \gets _{\text{PID}}\mathfrak{J}_{\text{MAX(total_sales)}}(r_2)$$
	* Bước 04: Lấy NAME, TOTAL_SALES của bảng $r_2$ equi join $r_3$ $$\text{KQ} \gets \Pi_{\text{NAME, TOTAL_SALES}}(r_2 \bowtie_{\text{total_sales = max_sales}} r_3)$$
