第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 之後,否則將會產生錯誤
注意:< >與!=相同, !《相當於》=不匹配檢查:如果將值與字串型別的列進行比較,就需要限定引號。用來與數值列進行比較的值不用引號。!=和<>通常可以互換,但是,並非所有 dbms 都支援這兩種不等於操作符。例如, microsoft access 支援<>而不支援!=。select vend_id, prod_name from products where vend_id <> 'dll01';
#列出所有不是**商 dll01 製造的產品
#select vend_id, prod_name from products where vend_id != 'dll01';
#一般來說,!=和<>通常可以互換
範圍值檢查:
空值檢查:select prod_name, prod_price from products where prod_price between 5 and 10;
#檢索**在 5 美元和 10美元之間的所有產品
注意: null 和非匹配通過過濾選擇不包含指定值的所有行時,你可能希望返回含 null 值的行。但是這做不到。因為未知(unknown)有特殊的含義,資料庫不知道它們是否匹配,所以在進行匹配過濾或非匹配過濾時,不會返回這些結果。過濾資料時,一定要驗證被過濾列中含 null 的行確實出現在返回的資料中。select prod_name from products where prod_price is null;
#返回所有沒有**(空 prod_price 字段,不是**為 0)的產品名稱
第 5 課 高階資料過濾
組合 where 子句:
給出多個 where 子句。這些子句有兩種使用方式,即以 and 子句或 or 子句的方式使用。
select prod_id, prod_price, prod_name from products
where vend_id = 'dll01' and prod_price <= 4;
#檢索由**商 dll01 製造且**小於等於 4美元的所有產品的名稱和**
sql(像多數語言一樣)在處理 or 操作符前,優先處理 and 操作符:select prod_name, prod_price from products
where vend_id = 'dll01' or vend_id = 『brs01』;
#檢索由任乙個指定**商製造的所有產品的產品名和**
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 製造的所有產品
in 操作符: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 語句,能夠更動態地建立where 子句。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;
not 操作符:
where 子句中的 not 操作符有且只有乙個功能,那就是否定其後所跟的任何條件。因為 not 從不單獨使用(它總是與其他操作符一起使用),所以它的語法與其他操作符有所不同。 not 關鍵字可以用在要過濾的列前,而不僅是在其後。
第 6 課 用萬用字元進行過濾select prod_name from products
where not vend_id = 'dll01'
order by prod_name;
#列出除 dll01 之外的所有**商製造的產品
使用 like 操作符進行通配搜尋,以便對資料進行複雜過濾。
百分號(%)萬用字元:
%表示任何字元出現任意次數。
access 萬用字元使用的是 microsoft access,需要使用*而不是%select prod_id, prod_name from products
where prod_name like 'fish%';
#檢索任意以fish 起頭的詞,%告訴 dbms 接受 fish 之後的任意字元,不管它有多少字元.
萬用字元%不匹配null
下劃線(_)萬用字元:
下劃線()只匹配單個字元,而不是多個字元。db2 不支援萬用字元。microsoft access中,需要使用?而不是_
方括號([ ])萬用字元:不是所有 dbms 都支援用來建立集合的。只有微軟的 access 和 sql server 支援集合。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
用字首字元^(脫字型大小)來否定,select cust_contact from customers
where cust_contact like '[jm]%'
order by cust_contact;
#找出所有名字以 j 或 m 起頭的聯絡人
《sql必知必會》------day6select cust_contact from customers
where cust_contact like '[^jm]%'
order by cust_contact;
#查詢匹配以j 和 m 之外的任意字元起頭的任意聯絡人名
#使用的是 microsoft access,需要用!而不是^來否定乙個集合,因此,使用的是[!jm]而不是[^jm]
《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的萬用字元很有用。但這種功能是有代價的,即萬用字元搜尋一般比前面討論的其他搜尋要耗費更長的處理時間。這裡給出一些使用萬用字元時要記住的技巧。不要過度使用萬用字元。如果其他操作符能達到相同的目的,應該使...