2.高級型
在高級型查詢中,是將SELECT的語句的高級利用,和怎樣使用它查詢數(shù)據(jù)庫中符合條件的數(shù)據(jù),例如通過BETWEEN來限制查詢的范圍和條件,并將取得的結果保存到表或視圖。
2.1BETWEEN 限制查詢范圍
使用關鍵字BETWEEN可以方便的限制數(shù)據(jù)的范圍。BETWEEN用來指定1個范圍,可讓用戶對上邊界值、下邊界值及它們中的值進行搜索。
利用BETWEEN關鍵字來限定查詢條件的基本語法格式為:
SELECT <select_list>
FROM <table_reference>
WHERE test_expression [NOT] BETWEEN begin_expression AND end_expression
2.1.1舉例來講,利用BETWEEN關鍵字來限制日期,從數(shù)據(jù)庫“銷售關系系統(tǒng)”的“入庫單信息”表中,查詢“入庫日期”從2004年8月1日至2005年9月1日期間的入庫單信息。
SELECT 入庫單編號,供應商編號,庫存編號,商品編號,入庫日期,操作員編號
FROM 入庫單信息
WHERE 入庫日期 BETWEEN '2004⑻⑴' AND '2005⑼⑴'
2.1.2舉例來講,利用BETWEEN關鍵字來限制文本,從數(shù)據(jù)庫“銷售關系系統(tǒng)”的“入庫單信息”表中,查詢所在城市為北京市到南京市的供應商信息。
SELECT 供應商編號,供應商名稱,供應商所在城市,聯(lián)系人姓名,聯(lián)系電話,備注
FROM 供應商信息
WHERE 供應商所在城市 BETWEEN '北京市' AND '南京市'
2.2使用WHERE的復合條件
使用WHERE子句的目的是將表中數(shù)據(jù)挑選出符合條件的行,WHERE可以限定查詢的范圍,提高效力。WHERE子句中的條件表達式包括算術表達式、邏輯表達式等。這里將會綜合前面介紹的內容,在WHERE子句中使用復合條件來實現(xiàn)1些復雜的查詢操作。
2.2.1在WHERE子句中使用復合條件
可使用3種布爾連接符構成復合條件,這3種布爾連接符是:AND、OR和NOT。AND和OR將兩個條件合并構成1個復合條件,重復利用這些組合就能夠將許多條件組合到1個單獨的復合條件中;NOT利用于單個條件,含義為取反。
AND 只有在所有條件都成立時才返回結果。即A和B都為TRUE時,語句“A AND B”才為TRUE。
OR 只要其中1個調價成立便可返回結果。即A或B為TRUE時,語句“A OR B”為TRUE。
NOT 表示否認1個表達式,表達式成立時不反悔結果。即在A為FALSE時,語句“NOT A ”為TRUE。
舉例來講,從“珠寶營銷系統(tǒng)”數(shù)據(jù)庫的“顧客信息”表中,非北京且消費金額在2000以上的顧客,或北京的顧客。
SELECT 消費者姓名,消費者消費金額,消費者所在城市,聯(lián)系電話,郵編
FROM 顧客信息
WHERE ((消費者消費金額 > 2000 AND NOT 消費者所在城市='北京市') OR 消費者所在城市='北京市')
2.2.2使用多個關鍵字
NOT可以用兩種不同的方式與多個條件1起使用,包括IN、BETWEEN、LIKE和IS NULL時,此時含義完全相同。
舉例來講,在本例中從“經銷商”數(shù)據(jù)庫中顯示符合以下所有條件的商品信息,包括商品編號、供應商朝號、商品名稱、商品種別、單價和商品單位。
條件為:不是7、5、4、2其中任何1個的供應商朝號;以10開始的商品編號;單價不在20~100之間;不屬于12、13、14其中任何1個種別的商品;商品單位不能為NULL。
SELECT 商品編號,供應商朝號,商品名稱,商品種別,單價,商品單位
FROM 商品信息
WHERE 供應商朝號NOT IN ('7','5','4','2')
AND 商品編號 LIKE '10%'
AND 單價 NOT BETWEEN 20 AND 100
AND 商品種別 NOT IN(12,13,14)
AND 商品單位 IS NOT NULL
2.3使用常數(shù)值、DISTINCT和ALL
在表的數(shù)據(jù)級別上,常數(shù)值是每行中都有相同值得1個列。我們通常有兩種方法來替換常數(shù)值。第1種方法是將1個文字值放入SELECT子句作為編碼值,這類方法適用于只有少數(shù)SELECT語句時。不過當有大量SELECT語句時,這類方法就不夠靈活,也不容易更改代碼來滿足變化的需求。
第2種方法是將常數(shù)值放入1個單獨的表中,我們將這個表稱為“常數(shù)表”。這類表被定義為只有1行的表。在這類表中,每一個不同的常數(shù)值都有1個單獨的列。這些列的名字通常都是唯1的,并且與任何其他表中的表名不同。在創(chuàng)建后,可使用它與任意其他表編寫SELECT語句。這類方法只要在有較多使用相同常數(shù)集的SELECT語句時使用。
在數(shù)據(jù)庫“經銷商”中,查詢出2004年所收進的貨物,并列出貨物的名稱,價格,進貨的數(shù)量及進貨的日期。
SELECT TOP10 t1.商品名稱,t1.單價,t2.進貨數(shù)量,t2.進貨時間
FROM 商品信息 AS t1,進貨信息 AS t2
WHERE t2.進貨時間 BETWEEN '2004⑴⑴' AND '2004⑴2⑶1'
AND t2.商品編號=t1.商品編號
ORDER BY t2.進貨時間
當指定1個日期時,不能只給出年份。為了制定1個年份,必須將這個日期設成這1年的1月1日到12月31日之間的日期。
在SELECT子句中DISTINCT和ALL關鍵字可讓我們明確該如何在結果中處理重復行。ALL返回所有限定行,是默許用法。如果不明確指定ALL或DISTINCT,那就會默許設置為ALL。DISTINCT只返回唯1的行。
在前面的總結中,已說明了二者的相干用法,在這里,不在累述。
下面我們了解1下要求:DISTINCT或ALL在SELECT子句中只能使用1次,在SELECT列表中被看做為首詞并且后面不能添加逗號。
舉例來講,在“珠寶營銷系統(tǒng)”數(shù)據(jù)庫的查詢消費者所在城市和郵編,要求不返回重復行。
SELECT DISTINCT 消費者所在城市,郵編 FROM 顧客信息
2.4保存SELECT結果
查詢的結果是1個表,可以像處理器1樣進行處理。當查詢語句運行后,查詢結果知識顯示在屏幕上,如果關閉計算機,則這些查詢結果也會消失。為了便于查看查詢結果,我們1般將查詢結果保存到1個新表或1個視圖中。
2.4.1保存結果到表
將查詢結果保存到1個新表,也就是說,從SELECT語句的查詢結果中創(chuàng)建1個新表。1旦將查詢結果保存到1個新表,用戶即可以通過天劍新行、更新行或刪除行來修改表中的數(shù)據(jù)。
在SQL Server中,新行添加在SELECT語句后,然后在FROM關鍵字之前增加1個INTO子句,并在INTO關鍵字后給出這個新表的名稱。除此以外,不需要對查詢語句的其他子句進行修改。
舉例來講,從數(shù)據(jù)庫“經銷商”的“銷售信息”表中,查詢2005年8月份的銷售信息,并將查詢結果保存到1個名為“銷售詳情 05_08”的新表中,要求該表中包括列“商品編號”、“金額”、“銷售人員編號”和“售出時間”。
SELECT 商品邊號,金額,銷售人員編號,售出時間
INTO 銷售詳情 05_08
FROM 銷售信息
WHERE 售出時間 BETWEEN '2005⑻⑴' AND '2005⑻⑶1'
上述語句是在數(shù)據(jù)庫“經銷商”中,創(chuàng)建1個新表名為“銷售詳情 05_08”。通過下述SELECT語句可以查看新標的數(shù)據(jù):
SELECT * FROM 銷售詳情 05_08
2.4.2保存結果到視圖
還可以將查詢結果保存到1個視圖中,而不死保存到1個表中。視圖與表非常相似。
在創(chuàng)建1個視圖后,可以像使用基表1樣使用它,可以任意的SELECT語句的FROM子句中使用視圖。
舉例來講,從數(shù)據(jù)庫“經銷商”的“商品信息”表中,查詢由代號為7的供應商提供的商品信息,并將查詢結果保存到1個名為“供應商 07_VIEW”的視圖中,要求改視圖中的列為“商品編號”、“商品名稱”和“單價”。
CREATE VIEW 供應商 07_VIEW
AS
SELECT 商品編號,商品名稱,單價
FROM 商品信息
WHERE 供應商朝號=7
上述語句運行后,就會在數(shù)據(jù)庫“經銷商”中,添加1個名為“供應商 07_VIEW”的新視圖。利用SELECT語句查詢該視圖中的數(shù)據(jù)。
SELECT *
FROM 供應商07_VIEW
ORDER BY 單價
關于數(shù)據(jù)庫的查操作,未完待續(xù)......