高考申論題
112年
[資訊處理] 資料庫應用
第 一 題
📖 題組:
承上題的資料庫綱目(schema),請用 SQL 回答下列查詢: (每小題 10 分,共 20 分) (一)我們想要查出有那些旅客,他們從來沒有搭乘過“甲航空”的任何一個航班的,列出這些旅客的護照號碼和姓名。 (二)我們想要找出有那些航班的乘客人數是低於 10 人的(i.e.,<10),請列出這些航班所屬的航空公司,和該航班的航班編號,以及搭乘該航班的人數(注意,是低於 10 人的)。
承上題的資料庫綱目(schema),請用 SQL 回答下列查詢: (每小題 10 分,共 20 分) (一)我們想要查出有那些旅客,他們從來沒有搭乘過“甲航空”的任何一個航班的,列出這些旅客的護照號碼和姓名。 (二)我們想要找出有那些航班的乘客人數是低於 10 人的(i.e.,<10),請列出這些航班所屬的航空公司,和該航班的航班編號,以及搭乘該航班的人數(注意,是低於 10 人的)。
📝 此題為申論題,共 2 小題
小題 (一)
我們想要查出有那些旅客,他們從來沒有搭乘過“甲航空”的任何一個航班的,列出這些旅客的護照號碼和姓名。
思路引導 VIP
看到「從來沒有搭乘過...的任何一個...」這種包含否定全稱的條件,應直覺聯想到使用 NOT IN 或 NOT EXISTS 子查詢。解題關鍵是「反向思考」:先利用子查詢找出「曾經搭乘過甲航空」的旅客護照號碼,再從旅客主表中將這些人排除。
小題 (二)
我們想要找出有那些航班的乘客人數是低於 10 人的(i.e.,<10),請列出這些航班所屬的航空公司,和該航班的航班編號,以及搭乘該航班的人數(注意,是低於 10 人的)。
思路引導 VIP
看到「計算人數」與「低於特定數量」,應立即聯想到使用 GROUP BY 進行分組,並搭配 HAVING COUNT() 來篩選聚合結果。需特別注意隱藏陷阱:「低於 10 人」包含「0 人搭乘」的情況,因此必須以航班資料表為主表進行 LEFT JOIN 乘客搭乘紀錄表,否則會遺漏無人搭乘的航班。