【數據庫知識掃描】 | SQL複習-開篇 第4課 過濾數據

勁頭好像沒有前幾天那麼搶先,說不出來的疲憊。窗外是春暖花開,不知道什麼時候能夠拿到筆記本電腦,又什麼時候武漢人民能夠完全痊癒,只能儘自己的努力,把當下能做的事情做好。

今天的筆記關鍵詞是:WHERE、BETWEEN AND 、NULL

目錄

4.1 使用WHERE子句

4.2 WHERE子句操作符

① 單個值檢查

② 不匹配檢查

③ 範圍值檢查

④ 空值檢查


4.1 使用WHERE子句

只檢索所需數據需要指定搜索條件(searchcriteria),搜索條件也稱爲過濾條件(filtercondition)

在SELECT語句中,數據根據WHERE子句中指定的搜索條件進行過濾。WHERE子句在表名(FROM子句)之後給出:

 相等校驗:

SELECT prod_name,prod_price FROM Products WHERE prod_price = 3.49;

 位數問題:有多少個0?練習示例時,可能發現顯示結果有3.49、3.490、3.4900等。出現這樣的情況,往往是因爲DBMS指定了所使用的數據類型及其默認行爲。所以,輸出不同,不必焦慮,畢竟從數學角度講,3.49和3.4900是一樣的。

過濾問題:分爲SQL過濾  |  應用過濾數據。也可以在應用層過濾。這樣理解,使用SQL語句或者客戶端代碼來過濾,前者是對在數據庫中檢索結果的過濾,後者通過應用代碼或者編程手段來完成過濾,後者可能會影響自身性能,並且不具備伸縮性,如果聯網查詢的話,還會造成帶寬浪費。

位置問題:WHERE子句和ORDER BY的位置

4.2 WHERE子句操作符

WHERE子句中使用的操作符可以理解成,對於一些數學性語言可以符號化。大於小於就不說了,在指定兩值間,屬於範圍,空值的判斷。屬於邊界條件判定。

兼容性問題:針對不同的DBMS支持不同的操作符,具體參考對應文檔。

① 單個值檢查

用例子說話(列出所有價格小於10美元的產品):

 SELECT prod_name,prod_price FROM Products WHERE prod_price < 10;

小於以後,再加個等號的,經過測試,沒有恰好10美元的產品,所以,使用了一個表中的值5.99:

SELECT prod_name,prod_price FROM Products WHERE prod_price >= 5.99;

可以看到結果包括產品價格5.99及以上的結果。

② 不匹配檢查

列出所有非供應商DLL01製造的產品記錄:

SELECT vend_id, prod_name FROM Products WHERE vend_id <>'DLL01';

引號問題:單引號用來先定字符串,在值和字符串類型的列進行比較時候記得添加引號限定,數值列比較不需要引號限定。

不等於有兩種表達,還有一種“ != ”,也可以來試試:

SELECT vend_id,prod_name FROM PRoducts WHERE vend_id != 'DLL01';

互換問題:這兩種不等於操作符,通常是可以互換的,但是考慮到不同的DBMS不一定都支持,所以具體參看DBMS文檔。

③ 範圍值檢查

要檢查某個範圍的值,可以使用BETWEEN操作符。

例子說明用法,檢索價格在5美元和10美元之間的所有產品:

 SELECT prod_name,prod_price FROM Products  WHERE prod_price BETWEEN 5 AND 10;

用法說明:[m,n]是一個範圍,同樣的,在本例中,BETWEEN一個關鍵字不行,加上AND,中間放較小值n,後面放較大值m。爲了驗證較大值在前會出現什麼類型錯誤,語法還是結果,驗證了一下,發現只是出現空集,但最好不要這樣用。

④ 空值檢查

在創建表時,設計表時可以指定其中列能否不包含值。在一個列不包含值時,稱其包含空值NULL。

NULL 無值(no value),與字段包含0、空字符串或僅僅包含空格不同。

我們的操作符中IS NULL,終於要派上用場。

先拿產品價格試個水,試着返回所有沒有價格(空prod_price字段,不是價格爲0)的產品:

發現沒有結果,所以換個有NULL值的表來檢索一下~

SELECT cust_name FROM Customers WHERE cust_email IS NULL;

果然出來空值的結果。這裏插入一個小技巧,因爲一直敲命令,一直到最後滿屏都是結果,有些頭暈,可以輸入clear命令後回車完成清屏操作;

擴展問題:這裏學到的都是基本的操作符,很多DBMS擴展了標準的操作符集,更加高檔的過濾選擇,用啥可以熟悉啥。

區別問題(NULL 和 非匹配):通過過濾選擇不包含指定值的所有行時,可能希望含NULL值的行也一起包含進去,實際上不能完成這樣的操作、因爲未知(unknown)有特殊的含義,數據庫不知道它們是否匹配,所以在進行匹配過濾或非匹配過濾時,不會返回這些結果。過濾數據時,一定要驗證被過濾列中含NULL的行確實出現在返回的數據中

說實話這段話我有點不太懂這段,但大概表達的意思可能是,需要加一層驗證,通過非匹配的方式不能得到不包含指定值也含有NULL的行記錄,所以這裏貼出這段話。

剛好這部分結束了。主要學習到檢驗結果的方式,其中包括操作符和匹配問題。

喊一句~刻意練習,每日精進。接着開始後面的工作~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章