題組內容
一、在某個圖書館的關聯式資料庫系統中,定義了如下的 BORROWER 表格:
BORROWER(ID, ISBN, Date)
該表格所記錄的借閱資料,包含借書者編號(ID)、書號(ISBN)和借 閱日期(Date)三個屬性,且這些屬性皆為字串(varchar)型態。假設 我們希望查詢出那些借書者所借閱的書籍數量,比借書者編號“A001”所 借閱的書籍多。請根據以下兩小題的指示,分別利用不同的方法達到所 求。若非使用 SQL 標準語法,請註明所使用的語法為那個軟體所支援。
BORROWER(ID, ISBN, Date)
該表格所記錄的借閱資料,包含借書者編號(ID)、書號(ISBN)和借 閱日期(Date)三個屬性,且這些屬性皆為字串(varchar)型態。假設 我們希望查詢出那些借書者所借閱的書籍數量,比借書者編號“A001”所 借閱的書籍多。請根據以下兩小題的指示,分別利用不同的方法達到所 求。若非使用 SQL 標準語法,請註明所使用的語法為那個軟體所支援。
(一)撰寫一個 SQL 查詢句,直接利用標準的“count”函數輸出所需的資料。 (10 分)
詳解 (共 1 筆)
詳解
SELECT ID
FROM BORROWER
GROUP BY ID
HAVING COUNT(ISBN) > (
SELECT COUNT(ISBN)
FROM BORROWER
WHERE ID = 'A001'
)
FROM BORROWER
GROUP BY ID
HAVING COUNT(ISBN) > (
SELECT COUNT(ISBN)
FROM BORROWER
WHERE ID = 'A001'
)
說明:
-
子查詢:
- SELECT COUNT(ISBN) FROM BORROWER WHERE ID = 'A001'
- 這個子查詢計算借書者編號為 “A001” 的借閱書籍數量。
-
主查詢:
- SELECT ID FROM BORROWER GROUP BY ID HAVING COUNT(ISBN) > (...)
- 這個主查詢將借閱書籍數量按借書者編號分組,並使用 HAVING 子句來篩選那些借閱書籍數量大於 “A001” 的借閱書籍數量的借書者編號。
這個查詢語句符合 SQL 標準,可以在大多數支持 SQL 的資料庫管理系統(如 MySQL、PostgreSQL、SQL Server、Oracle 等)中執行。