MSJetSQLforAccess2000中級篇(III)

字號:

中級數據操縱語言
    《基礎Microsoft Jet SQL for access 2000》一文告訴我們如何使用SQL來檢索和管理存儲在數據庫中的信息。本文的后面部分將討論中級數據操縱語言(DML)語句,這將使得用戶可以更好的控制信息檢索和處理的方式。
    謂詞
    謂詞指限定一個SELECT 語句的子句,同WHERE 子句類似,但是謂詞是在書寫列的列表之前定義的。謂詞還可以進一步的限制用戶所提取的記錄集,在某些情況下,過濾出任何可能存在的重復值。
    ALL關鍵字
    在SQL語句中,如果沒有定義任何謂詞的話,將使用缺省的ALL關鍵字。它意味著所有的符合SQL語句所設定的條件的記錄都將被提取出來?;氐轿覀兊陌l(fā)票數據庫中,從顧客表中提取所域的記錄如下:
    SELECT *
    FROM tblCustomers
    注意盡管這里ALL關鍵詞并沒有定義,但它是缺省值。我們也可以如下書寫該語句:
    SELECT ALL *
    FROM tblCustomers
    DISTINCT關鍵字
    DISTINCT關鍵字用來控制結果集中重復的值如何進行處理,那些對于指定的列來說用戶相同值的行將被過濾掉。如果多于指定的列大于一,則所有指定的列的結合將作為過濾條件。例如,如果用戶查詢Customers表中姓氏不同的記錄,則返回的值都將是的,任何重復姓氏的名字都將以結果集中的一個記錄作為其結果。
    SELECT DISTINCT [Last Name]
    FROM tblCustomers
    尤其要注意的是,使用DISTINCT關鍵字的查詢所返回的結果集不能更新,即是只讀的。
    DISTINCTROW 關鍵字
    DISTINCTROW 關鍵字和DISTINCT關鍵字類似,但前者是基于整行而非個別的域的。他只有在處理多個表時,并且只有在用戶從某幾個但非全部的表中選擇數據域時才是有用的。如果用戶的查詢是基于一個表的,或者要從所有的表中選擇數據域,則DISTINCTROW 關鍵字本質上和ALL關鍵字相同。
    例如,在我們的發(fā)票數據庫中,每個顧客都可能沒有、有一個或多個發(fā)票記錄。假設我們希望找出有多少擁有多于一張發(fā)票的顧客,這時可以使用DISTINCTROW關鍵字來進行選擇。
    SELECT DISTINCTROW [Last Name], [First Name]
    FROM tblCustomers INNER JOIN tblInvoices
    ON tblCustomers.CustomerID = tblInvoices.CustomerID
    如果我們不使用DISTINCTROW 關鍵字,得到的將是每個顧客的所有發(fā)票記錄的行。(這里的 INNER JOIN 語句將在后面的部分講解)。
    關鍵字
    關鍵字用來返回通過ORDER BY子句所指定的數據行中頂部或底部的某些行。ORDER BY 子句用來指定這些數據列是用升序還是降序排列。如果存在相等值,則關鍵字將返回所有值相等的行。比如我們希望確定我們的發(fā)票數據庫中額的三條發(fā)票記錄,可以如下書寫SQL語句:
    SELECT 3 InvoiceDate, Amount
    FROM tblInvoices
    ORDER BY Amount DESC
    我們也可以將PERCENT關鍵字和關鍵字同時使用,來返回由ORDER BY子句所指定的數據行中頂部或底部的一定比例的行,如下所示:
    SELECT 25 PERCENT InvoiceDate, Amount
    FROM tblInvoices
    ORDER BY Amount DESC
    注意如果用戶沒有定義ORDER BY 子句,則關鍵字將毫無意義,返回的是隨機采樣的一些行。
    要了解有關謂詞的更多信息,請在Office 助手中或在Microsoft access 幫助的回答向導的標簽頁中輸入ALL、DISTINCT等謂詞,然后單擊查找。
    SQL 表達式
    一個SQL表達式就是作為SQL語句的一部分的一個字符串,并可以得到一個值。你可以任意組合運算符、常數、文字值、函數、域名、控制和屬性來建立你的SQL表達式。而" Microsoft Jet SQL for access 2000高級版"一文就向你描述了如何在WHERE子句中使用表達式來限制SQL語句;而且在本文隨后的部分,我們將學習各種能夠用于表達式的SQL操作符。
    IN操作
    IN操作是用來判斷一個表達式的值是否屬于一個指定列表中的值。如果這個表達式等于列表中的一個值,IN操作的返回值為True。而當沒有找到,IN操作返回值為False。讓我們假設我們想找到所有住在華盛頓州或喬治亞州的銷售部成員。我們可以寫一個帶著長長的WHERE 子句,并使用AND邏輯操作符的SQL語句,而使用IN操作符會縮短我們寫的語句。
    SELECT *
    FROM tblShipping
    WHERE State IN ('WA','GA')
    通過使用NOT邏輯操作符,我們可以檢索出IN操作的反操作結果,這個語句會返回所有不住在華盛頓州的銷售部成員。
    SELECT *
    FROM tblShipping
    WHERE State NOT IN ('WA')
    BETWEEN操作
    BETWEEN操作用于判斷一個表達式的值是否介于一個特定的范圍之間。如果這個表達式的值介于這個特定范圍之間,包括范圍開始和結束的值,這個BETWEEN操作返回True。如果這個表達式得值不屬于這個范圍,則BETWEEN操作返回值為False。假設我們想找到所以金額介于50美圓到100美圓之間的所有發(fā)票。我們在WHERE 子句使用BETWEEN 操作以及關鍵字AND設定范圍。
    SELECT *
    FROM tblInvoices
    WHERE Amount BETWEEN 50 and 100
    通過使用NOT邏輯操作符,我們可以檢索出BETWEEN操作的反操作結果,找到不在范圍中的所有發(fā)票數量。