sql 全形轉半形 過濾資料《SQL必知必會》

2021-10-18 00:00:35 字數 4538 閱讀 7880

為何需要過濾資料?

select關鍵字查詢資料,可以指定所需要查詢的列(*表示查詢所有列),但查詢結果將會包括所有的行。在資料庫中,一張資料表(table)可能會包含數百萬行之多,這之中有很多資料往往我們並不需要,因此需要對資料新增條件篩選。

sql如何實現過濾?

在 select 語句中,資料根據 where 子句中指定的搜尋條件進行過濾。 where 子句在表名(from 子句)之後給出。

例:查詢products表中,生產**(prod_price)為3.49的資料

select prod_name, prod_price from products where prod_price = 3.49;
注:where後跟條件,表示需要滿足**=3.49,在相等的時,注意該列的資料型別,prod_price資料是數值形型,因此等號後面直接跟數字即可。

例2:查詢products表中,生產名稱(prod_name)為「milk」的資料。

select prod_name, prod_price from products where prod_name = 'milk';
注:1.where後跟條件,表示需要名稱=milk,在相等的時,注意該列的資料型別,prod_name資料是字串型別,因此等號後面直接跟字串,不能跟數字。

2.sql中用英文單引號擴起來表示字串,字串內可以隨便寫,如;'123'、'abcd'、'1@3'、'牛奶111111' 等,都是字串

3.sql中的分號、引號等必須採用英文狀態標點符號,區別中文和英文符號等區別在於中文字元更寬,因此中文字元又稱為全形字符,英文本元稱為半形字元。如;(中)和;(英)、『』(中)和''(英)

如何進行其他條件篩選?

在實際應用中,我們可能還需要查詢大於某個值或不等於某個值的條件,對於不同條件,where後跟不同條件即可,where後支援的條件如下。

例:查詢**小於10的資料

select prod_name, prod_price from products where prod_price < 10;
例2:查詢有不是**商 dll01 製造的產品:

select vend_id, prod_name from products where vend_id <> 'dll01';
如何篩選多個條件(and關鍵字)?實際應用中,我們往往需要篩選多個條件,and關鍵字用來解決此類問題。

例:查詢**10-20的資料

select prod_name, prod_price from products

where prod_price >= 10 and prod_price <= 20;

例2:查詢名稱為牛奶,並且**大於10的資料

select prod_name, prod_price from products

where prod_name = '牛奶' and prod_price >= 10;

例3:查詢名稱為牛奶,並且**在10-20之間的資料

select prod_name, prod_price from products

where prod_name = '牛奶' and prod_price >= 10 and prod_price <= 20;

如何篩選多個條件(or關鍵字)?

and連線的條件表示,需要同時滿足。or連線到條件,需要滿足乙個即可。

例:查詢**小於10或者,大於20的資料

select prod_name, prod_price from products

where prod_price < 10 or prod_price > 20;

例2:查詢名稱為牛奶,或者**小於10或者,**大於20的資料

select prod_name, prod_price from products

where prod_name = '牛奶' or prod_price < 10 or prod_price > 20;

and和or關鍵字能一起用嗎?可以一起使用。and表示與的關係,or表示或的關係,但一起使用往往會導致邏輯複雜,往往會採用in關鍵字代替or。

例:查詢**等於10的牛奶或**等於20的牛奶。

寫法1:

select prod_name, prod_price from products

where (prod_name = '牛奶' and prod_price = 10) or (prod_name = '牛奶' and prod_price = 20)

注:1.此寫法表示,查詢出**等於10的牛奶,或查詢出**等於20的牛奶,兩個條件滿足乙個即可。

2.()必須使用英文括號,關鍵字(and、or)識別順序和數學的運算順序一樣,有括號先算括號裡面的,沒有括號,從左向右識別。系統的識別順序為:條件1(prod_name = '牛奶' and prod_price = 10) ,條件2(prod_name = '牛奶' and prod_price = 20),結果需要滿足:條件1 or 條件2.

寫法2:

select prod_name, prod_price from products

where prod_name = '牛奶' and (prod_price = 10 or prod_price = 20)

注:1.此寫法表示,查詢出名稱為牛奶,並且,**等於10或**等於20,也能查出同樣的效果

2.()必須使用英文括號,關鍵字(and、or)識別順序和數學的運算順序一樣,有括號先算括號裡面的,沒有括號,從左向右識別。系統的識別順序為:條件1 prod_name = '牛奶' ,條件2(prod_price = 10 or prod_price = 20),結果需要滿足,條件1 and 條件2

寫法3:

select prod_name, prod_price from products

where prod_name = '牛奶' and prod_price in (10, 20)

1.此寫法表示,查詢出名稱為牛奶,並且,**等於10或者20的資料,in關鍵字,能夠代替or和=,prod_price in (10, 20)代替(prod_price = 10 or prod_price = 20),可以看出,採用in關鍵字,程式閱讀性更好,更容易理解。in() 括號中的數值,可以有任意多個,如prod_price in (10, 20, 30, 40)等價於 (prod_price = 10 or prod_price = 20 or prod_price = 30 or prod_price = 40)

3.()必須使用英文括號,這個關鍵字(and、in)沒有被括號括起來,因此識別順序從左向右。系統的識別順序為:條件1 prod_name = '牛奶' ,條件2prod_price in (10, 20),結果需要滿足,條件1 and 條件2

如何進行空值檢查?

資料庫中的資料往往是不完整的,如果資料庫某列的某些資料為空,資料庫會標記為關鍵字null,因此為了提取有用的資料,我們往往需要篩選不為空的資料。

例:查詢客戶名稱不為空的資料。

select cust_name from customers where cust_email is not null;
例2:查詢客戶名稱為空的資料。

select cust_name from customers where cust_email is null;
注:null關鍵字的判定比較特殊,禁止使用=或!=判斷是否為空,否則會導致資料查詢錯誤(程式並不抱錯,但是結果往往不是想要的)。

錯誤示範:

select cust_name from customers where cust_email = null;

select cust_name from customers where cust_email != null;

如何對篩選結果進行排序?

sql查詢過程的執行順序是:查詢->篩選->排序,因此,關鍵字的書寫順序往往也需要按照select、where、order by順序進行,否則程式會抱錯。

例:查詢名稱為牛奶,並且**大於10的資料,並將結果按照**從大到小排序。

select prod_name, prod_price from products

where prod_name = '牛奶' and prod_price >= 10 order by prod_price desc;

SQL 全形轉半形

if exists select from dbo.sysobjects where id object id n dbo f convert and xtype in n fn n if n tf drop function dbo f convert go 全形 半形轉換 轉換說明 全形字符從的...

SQL全形半形互換

create function f convert str nvarchar 4000 flag bit 0轉化成半形 1轉化成全角 returns nvarchar 4000 asbegin declare pat nvarchar 8 step int,i int,spc int if flag...

全形轉半形 半形轉全形(Python)

coding utf 8 def str q2b u string 全形轉半形 全形字符unicode編碼從65281 65374 十六進製制 0xff01 0xff5e 半形字元unicode編碼從33 126 十六進製制 0x21 0x7e 空格比較特殊,全形為 12288 0x3000 半形為...