阿摩線上測驗 登入

申論題資訊

試卷:111年 - 111 高等考試_二級_資訊處理:高等資料庫設計#111030
科目:高等資料庫設計
年份:111年
排序:0

題組內容

一、在某個圖書館的關聯式資料庫系統中,定義了如下的 BORROWER 表格:
BORROWER(ID, ISBN, Date)
該表格所記錄的借閱資料,包含借書者編號(ID)、書號(ISBN)和借 閱日期(Date)三個屬性,且這些屬性皆為字串(varchar)型態。假設 我們希望查詢出那些借書者所借閱的書籍數量,比借書者編號“A001”所 借閱的書籍多。請根據以下兩小題的指示,分別利用不同的方法達到所 求。若非使用 SQL 標準語法,請註明所使用的語法為那個軟體所支援。

申論題內容

(二)首先設計一個函數稱為“BookCount”,該函數定義一個名為“id”的參數 對應到借書者編號,然後根據該參數回傳其所借閱的書籍數目。接著 利用 BookCount 函數撰寫一個 SQL 查詢句來輸出題目所需求之資訊。 (15 分)

詳解 (共 1 筆)

詳解 提供者:hchungw
在某些資料庫管理系統(例如 SQL Server)中,我們可以創建自定義函數來實現這一需求。首先,我們定義一個名為 BookCount 的函數,該函數接受一個 id 參數並返回該借書者所借閱的書籍數量。然後,我們使用該函數來撰寫查詢語句,輸出那些借書者所借閱的書籍數量比借書者編號 “A001” 所借閱的書籍多的資訊。
定義 BookCount 函數
這是一個基於 SQL Server 的範例,其他資料庫系統可能會有些許差異。
sql
複製程式碼
-- 創建函數 BookCount
CREATE FUNCTION BookCount (@id VARCHAR(255))
RETURNS INT
AS
BEGIN
    DECLARE @count INT;
    SELECT @count = COUNT(ISBN)
    FROM BORROWER
    WHERE ID = @id;
    RETURN @count;
END;
使用 BookCount 函數的查詢語句
sql
複製程式碼
-- 使用 BookCount 函數撰寫查詢語句
SELECT ID
FROM BORROWER
GROUP BY ID
HAVING COUNT(ISBN) > BookCount('A001');
說明
定義函數:
CREATE FUNCTION BookCount (@id VARCHAR(255)) RETURNS INT AS BEGIN ... END;
這段 SQL 語句定義了一個名為 BookCount 的函數,它接受一個 id 參數並返回該借書者所借閱的書籍數量。
在函數體內,使用 SELECT @count = COUNT(ISBN) FROM BORROWER WHERE ID = @id; 查詢並計算該借書者的借閱書籍數量,然後返回該數量。
使用函數的查詢語句:
SELECT ID FROM BORROWER GROUP BY ID HAVING COUNT(ISBN) > BookCount('A001');
這段 SQL 語句使用 GROUP BY 將借閱記錄按借書者編號分組,並使用 HAVING 子句來篩選那些借閱書籍數量大於 BookCount('A001') 的借書者。
這個解決方案結合了自定義函數和標準 SQL 查詢,滿足了查詢那些借書者所借閱的書籍數量比借書者編號 “A001” 所借閱的書籍多的需求。