自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

WHERE語句中設(shè)置搜索值的一些建議

數(shù)據(jù)庫
WHERE子句是大家在數(shù)據(jù)庫設(shè)計與管理中用的最頻繁的一個子句之一,本文將向您介紹一些WHERE子句使用時的建議,幫助大家來充分使用WHERE子句的功能,發(fā)揮其強大的作用。

在數(shù)據(jù)庫設(shè)計與管理中,WHERE子句無疑是大家用的最頻繁的一個子句之一。那么大家是否真的擅長這個子句的使用呢?我看不見的的吧。筆者的下面這些建議就可以幫助大家來充分使用WHERE子句的功能,發(fā)揮其強大的作用。

建議一:查詢條件中包含撇號怎么處理?

數(shù)據(jù)庫的某些列中,可能會包含一些特殊的符號,如撇號(‘)。這對于SQLServer數(shù)據(jù)庫來說是一個特殊的符號。因為其原本是用來區(qū)分字符與變量的。如在查詢語句中,如果輸入的是字符串的值,就需要利用兩個撇號引用起來。(有時候撇號大家又叫做單引號)。但是在有些情況下,特別是國外人的名字中,本身就包含著單引號。如某個產(chǎn)品的規(guī)格信息為“8’尖嘴鉗(07型)/ 碳鋼/ 熱處理/ 全拋光/ 鍍鎳鐵合金/ 橙色”。在這個規(guī)格信息中就有一個單引號。此時如果在WHERE查詢語句中需要查詢這個規(guī)格信息,那么這個單引號還如何處理呢?數(shù)據(jù)庫管理員如果按如下的格式來輸入查詢語句(WHERE Description like ‘8’尖嘴鉗’),能夠查詢到所需要的結(jié)果呢?答案是否定的。因為此時數(shù)據(jù)庫系統(tǒng)因為這個查詢語句中有三個單引號分割符號,為此數(shù)據(jù)庫優(yōu)化器在編譯優(yōu)化這條語句的時候,無法識別輸入的條件語句的含義。

為此數(shù)據(jù)庫管理員在設(shè)計查詢語句的時候,就需要預(yù)計到這種情況,并在編寫語句的時候采取措施來避免這種錯誤。如果要在查詢條件中包含單引號的這個特殊符號也未嘗不可。在SQLServer數(shù)據(jù)庫中,如果需要查找的數(shù)據(jù)包含一個單引號時,則可以輸入兩個單引號來標明這個單引號是文本值而非分隔符。其實,這個單引號就好像程序開發(fā)語言中的轉(zhuǎn)移字符,能夠把系統(tǒng)中的一些特殊符號轉(zhuǎn)換成文本符號。不過由于轉(zhuǎn)義字符的使用或多或少會影響數(shù)據(jù)庫的執(zhí)行性能,為此在查詢的時候還是要盡量避免在查詢條件語句中包含單引號。數(shù)據(jù)管理員在設(shè)計SQL查詢語句中,應(yīng)該有意識的限制這種行為,而不是支持。只有在用戶確實有這方面需求的情況下,才能夠使用轉(zhuǎn)移字符來告訴數(shù)據(jù)庫把單引號當作字符數(shù)據(jù)來處理。

建議二:數(shù)值作為查詢條件的注意事項。

如果把數(shù)值作為查詢條件時,其不用單引號括起來,在數(shù)字中間也不會出現(xiàn)單引號等分隔符。那么照理來說數(shù)值作為查詢參數(shù)是最容易的事情了。其實不然。很多數(shù)據(jù)庫管理員可能不熟悉一些基本的規(guī)則,為此在使用數(shù)值作為查詢條件的時候,還是會遇到磕磕碰碰的事情。

如把數(shù)值作為查詢條件的話,則在數(shù)值中可以加入小數(shù)點。默認情況下,小數(shù)點位一個小黑點,如12.5。但是并不是在所有操作系統(tǒng)中都是以這個點好作為小數(shù)點的分隔點。如筆者一次在給客戶進行數(shù)據(jù)庫維護時,在客戶的電腦上使用sql語句來查詢記錄,就是把參數(shù)值輸入為12.5。但是怎么執(zhí)行數(shù)據(jù)庫都提示這條SQL語句有錯誤。筆者核對了好幾次,就是發(fā)現(xiàn)這個問題。但是在筆者自己的筆記本電腦上,把這條SQL語句一模一樣的照寫了一遍,執(zhí)行起來的時候就沒有發(fā)生任何錯誤。這到底是怎么回事呢?原來小數(shù)點的分隔符默認情況下是采用小黑點,但是并不是所有操作系統(tǒng)這支持這個。小數(shù)點的分隔符用戶可以進行自定義。如在Windows操作系統(tǒng)控制面便的區(qū)域設(shè)置中,可以根據(jù)用戶的使用習慣來定義小數(shù)點的分隔符。當在書寫查詢條件的過程中如果使用到小數(shù)點的話,那么就需要跟這個區(qū)域設(shè)置中的設(shè)置相符。如果在這個區(qū)域設(shè)置中是采用冒號來作為小數(shù)的分隔符號的,那么在查詢語句中也需要利用冒號來作為小數(shù)點的分隔符。在數(shù)據(jù)庫編譯的時候,會自動把這個冒號轉(zhuǎn)換為二進制數(shù)據(jù)。為此,在有些教科書上,把小數(shù)點的分隔符好定義為小黑點筆者人為這是不科學的,會對讀者產(chǎn)生誤導(dǎo)。筆者認為,應(yīng)該這么寫:如果把數(shù)值作為查詢條件的,則除了小數(shù)點分隔符和負號之外,不能夠包含非數(shù)字字符。如果為了讓讀者更加明白的話,則在后面可以加一句注釋,這里的小數(shù)點分隔符默認情況下是小黑點符號,但是可以在控制面中中的區(qū)域設(shè)置對方框內(nèi)進行重新定義。

另外在使用數(shù)值型數(shù)據(jù)作為查詢條件時,需要注意如果輸入的是正數(shù),那么無論搜索的是整數(shù)還是實數(shù),都可以包含小數(shù)點標記。也就是說,12.與12是等價的(這里假設(shè)小數(shù)點分隔符為.號)。而且在SQLServer數(shù)據(jù)庫中,還可以利用科學計數(shù)法來作為查詢條件。要知道利用科學計數(shù)法來表示非常大或者非常小的數(shù)字,非常有用。數(shù)據(jù)庫能夠支持科學計數(shù)法作為查詢條件,則對于一些小數(shù)或者大數(shù)的查詢非常的有用。

建議三:要注意邏輯值的表示方法。

在SQLServer數(shù)據(jù)庫中,邏輯值的應(yīng)用也是很普遍的。如在員工信息表中,往往把員工的性別利用邏輯值來表示。如員工如果是男性的話,則利用True來表示。如果員工是女性的話,則利用false來表示。再如如果某個員工離職了,為了后續(xù)查詢往往不會把這個員工信息刪除,而是采用另外一種管理機制來進行管理。如會在這個員工信息表中創(chuàng)建一個isactive等類似的布爾型字段。如果這個員工信息是有效的,則其值就為True;如果這個員工信息因為離職等原因已經(jīng)實現(xiàn)了,則其就為Faluse。

但是數(shù)據(jù)庫管理需要注意這個邏輯數(shù)據(jù)的格式會因數(shù)據(jù)庫的不同而不同。如在SQLServer中,如果邏輯值為False的話,則在數(shù)據(jù)庫存儲為0;如果邏輯值為True的話,則其通常存儲的值為1。不過不同的數(shù)據(jù)庫這個對應(yīng)的值可能不同,如有的數(shù)據(jù)庫利用-1來表示邏輯值False等等。為此在編寫SQL語句的時候,數(shù)據(jù)庫管理員需要注意這方面的差異,要防止張冠李戴的情況發(fā)生。

另外需要注意的是,在開發(fā)應(yīng)用程序的時候,其往往不會利用數(shù)字0或者1來表示羅機值。如在C語言中直接以TRUE或者FALSE來表示布爾值。為此數(shù)據(jù)庫開發(fā)人員在開發(fā)應(yīng)用系統(tǒng)的時候,需要注意這些表示方式上的差異。在必要的時候,需要通過別名等表達方式來進行相關(guān)的轉(zhuǎn)換。如用戶在生成報表時,如果利用1或者0數(shù)字來表示邏輯值的話,可能用戶并不一定看的懂。此時就需要在數(shù)據(jù)庫查詢的時候,進行一些轉(zhuǎn)換處理。如可以利用CASE語句來判斷并利用別名進行轉(zhuǎn)換。這也是數(shù)據(jù)庫設(shè)計過程中對邏輯值進行處理的最常見的方法。

建議四:當心日期數(shù)據(jù)的處理。

日期型的數(shù)據(jù)在數(shù)據(jù)庫中使最特殊也是最復(fù)雜的一類數(shù)據(jù)類型。其看起來像是字符型的數(shù)據(jù),但是其操作起來要比數(shù)據(jù)型的字符負責的多。要掌握在WHERE語句中如果利用日期型的數(shù)據(jù)作為查詢條件,則數(shù)據(jù)庫管理員首先需要明白其日期的表示格式。因為不同類型的表示格式其所代表的含義是不同的。

首先數(shù)據(jù)庫管理員需要注意,在SQLServer與Windows操作系統(tǒng)的環(huán)境下,其日期格式可以在多個地方進行設(shè)置。如區(qū)域設(shè)置特定、數(shù)據(jù)庫特定、ANSI標準等三個方面。在數(shù)據(jù)庫部署的時候,***把這三個地方的日期格式設(shè)置為一致,否則的話,在后續(xù)操作的時候會遇到很多不必要的麻煩。如區(qū)域設(shè)置處設(shè)置的日期格式與數(shù)據(jù)庫特定的日期格式不一致的話,則在利用日期型數(shù)據(jù)進行查詢的時候,很容易因為日期格式不兼容而導(dǎo)致語法編譯錯誤。

其次需要注意的是,在SQL Server數(shù)據(jù)庫中有兩個地方可以生成SQL語句。一是在數(shù)據(jù)提供的窗口中生成SQL語句;二是直接編寫SQL語句。如果在其提供的查詢窗口中生成SQL語句的話,則在日期型的字段中輸入日期數(shù)據(jù)的話,則數(shù)據(jù)庫在生成SQL查詢語句的過程中,會自動對日期型的數(shù)據(jù)進行轉(zhuǎn)換,以符合于數(shù)據(jù)庫兼容的日期格式。也就是說,在查詢窗口輸入日期型數(shù)據(jù)查詢條件,一般不會出現(xiàn)問題。但是如果是在應(yīng)用程序中直接編寫SQL語句,則此時需要注意,其輸入的日期要符合數(shù)據(jù)庫特定的格式或者ANSI標準的格式。而不是在區(qū)域設(shè)置處設(shè)定的格式。

第三,那么查詢返回的結(jié)果會以什么格式顯示呢?是按照區(qū)域設(shè)置特定的格式、還是數(shù)據(jù)庫特定的格式或者ANSI標準日期格式顯示呢?這里要注意,其顯示的時候是以操作系統(tǒng)中區(qū)域設(shè)置處設(shè)置的日期格式來顯示。而不是數(shù)據(jù)庫中設(shè)置的日期格式來顯示。為此在同一個數(shù)據(jù)庫中,不同的客戶端其日期顯示格式就有可能不同。這主要是因為客戶端上面的區(qū)域設(shè)置中的日期格式設(shè)置不同而造成的。

【編輯推薦】

  1. 數(shù)據(jù)庫開發(fā)管理中的十條建議
  2. 深入淺出SQL嵌套SELECT語句
  3. 詳解MySQL分組查詢Group By實現(xiàn)原理
責任編輯:佚名 來源: IT專家網(wǎng)
相關(guān)推薦

2010-09-28 14:14:19

SQL語句

2020-09-21 06:58:56

TS 代碼建議

2017-11-29 18:52:13

Python新手編碼建議

2012-11-09 10:46:24

Canonical

2018-11-20 14:24:46

數(shù)據(jù)分析數(shù)據(jù)庫統(tǒng)計

2015-08-26 09:31:26

程序員建議

2023-11-10 08:48:09

Lombok庫Java8

2016-11-11 20:33:53

Hadoop大數(shù)據(jù)云計算

2015-08-26 08:31:35

核心程序員成長

2011-04-27 09:21:09

程序員

2011-10-11 17:10:35

MySQL

2013-04-28 09:44:44

2013-12-03 10:30:28

iOS開發(fā)程序員自我提升

2009-06-30 20:44:44

2021-09-27 10:04:03

Go程序處理

2018-06-21 15:23:36

2021-09-27 15:33:48

Go 開發(fā)技術(shù)

2010-10-08 16:32:59

MySQL語句

2022-03-22 07:38:00

SQL語句MySQL

2009-12-30 15:18:32

點贊
收藏

51CTO技術(shù)棧公眾號