**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)$$