《sql必知必會》 day2

2021-09-24 17:52:35 字數 4576 閱讀 2377

第4課 過濾資料

通常只會根據特定操作或報告的需要提取表資料的子集,只檢索所需資料需要指定搜尋條件(search criteria),搜尋條件也稱為過濾條件(filter condition)。在 select 語句中,資料根據 where 子句中指定的搜尋條件進行過濾。

where 子句在表名(from 子句)之後給出,如:

select prod_name, prod_price from products where prod_price = 3.49;

#從 products 表中檢索兩個列,但不返回所有行,只返回prod_price 值為 3.49 的行

注意: where 子句的位置

在同時使用 order by 和 where 子句時,應該讓 order by 位於where 之後,否則將會產生錯誤

注意:< >與!=相同, !《相當於》=

不匹配檢查:
select vend_id, prod_name from products where vend_id <> 'dll01';

#列出所有不是**商 dll01 製造的產品

#select vend_id, prod_name from products where vend_id != 'dll01';

#一般來說,!=和<>通常可以互換

如果將值與字串型別的列進行比較,就需要限定引號。用來與數值列進行比較的值不用引號。!=和<>通常可以互換,但是,並非所有 dbms 都支援這兩種不等於操作符。例如, microsoft access 支援<>而不支援!=。

範圍值檢查:

select prod_name, prod_price from products where prod_price between 5 and 10;

#檢索**在 5 美元和 10美元之間的所有產品

空值檢查:
select prod_name from products where prod_price is null;

#返回所有沒有**(空 prod_price 字段,不是**為 0)的產品名稱

注意: null 和非匹配通過過濾選擇不包含指定值的所有行時,你可能希望返回含 null 值的行。但是這做不到。因為未知(unknown)有特殊的含義,資料庫不知道它們是否匹配,所以在進行匹配過濾或非匹配過濾時,不會返回這些結果。過濾資料時,一定要驗證被過濾列中含 null 的行確實出現在返回的資料中。

第 5 課 高階資料過濾

組合 where 子句:

給出多個 where 子句。這些子句有兩種使用方式,即以 and 子句或 or 子句的方式使用。

select prod_id, prod_price, prod_name from products

where vend_id = 'dll01' and prod_price <= 4;

#檢索由**商 dll01 製造且**小於等於 4美元的所有產品的名稱和**

select prod_name, prod_price from products

where vend_id = 'dll01' or vend_id = 『brs01』;

#檢索由任乙個指定**商製造的所有產品的產品名和**

sql(像多數語言一樣)在處理 or 操作符前,優先處理 and 操作符:

select prod_name, prod_price from products

where vend_id = 'dll01' or vend_id = 'brs01' and prod_price >= 10;

#等價於

select prod_name, prod_price from products

where vend_id = 'dll01' or (vend_id = 'brs01' and prod_price >= 10);

#由**商 brs01 製造的**為 10美元以上的所有產品,或由**商 dll01 製造的所有產品

select prod_name, prod_price from products

where (vend_id = 'dll01' or vend_id = 'brs01') and prod_price >= 10;

#**為 10美元及以上,且由 dll01或 brs01製造的所有產品

in 操作符:

in 操作符用來指定條件範圍,範圍中的每個條件都可以進行匹配。 in 取一組由逗號分隔、括在圓括號中的合法值。

select prod_name, prod_price from products

where vend_id in ( 'dll01', 'brs01' )

order by prod_name;

#檢索由**商 dll01 和 brs01 製造的所有產品

#in 操作符與 or 相同的功能

#等價於:

select prod_name, prod_price from products

where vend_id = 'dll01' or vend_id = 'brs01'

order by prod_name;

in 的最大優點是可以包含其他 select 語句,能夠更動態地建立where 子句。

not 操作符:

where 子句中的 not 操作符有且只有乙個功能,那就是否定其後所跟的任何條件。因為 not 從不單獨使用(它總是與其他操作符一起使用),所以它的語法與其他操作符有所不同。 not 關鍵字可以用在要過濾的列前,而不僅是在其後。

select prod_name from products

where not vend_id = 'dll01'

order by prod_name;

#列出除 dll01 之外的所有**商製造的產品

第 6 課 用萬用字元進行過濾

使用 like 操作符進行通配搜尋,以便對資料進行複雜過濾。

百分號(%)萬用字元:

%表示任何字元出現任意次數。

select prod_id, prod_name from products

where prod_name like 'fish%';

#檢索任意以fish 起頭的詞,%告訴 dbms 接受 fish 之後的任意字元,不管它有多少字元.

access 萬用字元使用的是 microsoft access,需要使用*而不是%

萬用字元%不匹配null

下劃線(_)萬用字元:

下劃線()只匹配單個字元,而不是多個字元。db2 不支援萬用字元。microsoft access中,需要使用?而不是_

select prod_id, prod_namefrom products

where prod_name like '__ inch teddy bear';

#兩個下劃線

結果:prod_id prod_name

-------- --------------------

br02 12 inch teddy bear

br03 18 inch teddy bear

方括號([ ])萬用字元:不是所有 dbms 都支援用來建立集合的。只有微軟的 access 和 sql server 支援集合。

select cust_contact from customers

where cust_contact like '[jm]%'

order by cust_contact;

#找出所有名字以 j 或 m 起頭的聯絡人

用字首字元^(脫字型大小)來否定,

select cust_contact from customers

where cust_contact like '[^jm]%'

order by cust_contact;

#查詢匹配以j 和 m 之外的任意字元起頭的任意聯絡人名

#使用的是 microsoft access,需要用!而不是^來否定乙個集合,因此,使用的是[!jm]而不是[^jm]

《sql必知必會》------day6

《sql必知必會》------day5

《sql必知必會》------day4

《sql必知必會》------day3

《sql必知必會》------day2

《sql必知必會》------day1

MySQL必知必會 學習筆記Day2

基本概念 3 排序檢索資料 1 排序資料 select 列名 from 表名 order by 列名 注 2 按多個列排序 select 列名1,列名2,列名3 from 表名 order by 列名2,列名3 注 3 指定排序方向 select 列名1,列名2,列名3 from 表名 order ...

SQL必知必會2

資料庫伺服器有 兩種儲存介質 分別為硬碟和 記憶體。記憶體屬於臨時儲存,容量有限,且當發生意外時 如斷電或者發生故障重啟 會造成資料丟失 硬碟相當於永久儲存介質,這也是為什麼我們需要把資料儲存到硬碟上。資料庫中管理儲存空間的基本單位是頁 page 不論是讀一行還是多行,都是講這些行所在的頁進行載入 ...

sql必知必會筆記2

1 在很多dbms中,as關鍵字是可選的,不過最好使用它,這被視為一條最佳實踐。2 正如所見,sql的萬用字元很有用。但這種功能是有代價的,即萬用字元搜尋一般比前面討論的其他搜尋要耗費更長的處理時間。這裡給出一些使用萬用字元時要記住的技巧。不要過度使用萬用字元。如果其他操作符能達到相同的目的,應該使...