MySql必知必會實戰練習(三)資料過濾 MySql必知必會實戰練習(二)資料檢索
在之前的部落格MySql必知必會實戰練習(一)表建立和資料新增中完成了各表的建立和資料新增,MySql必知必會實戰練習(二)資料檢索中介紹了所有的資料檢索操作,下面對資料過濾操作進行總結。
1. where子句操作符
等於: =
不等於: != 或 <>
小於: <
小於等於: <=
大於: >
大於等於:>=
在指定的兩個值之間:BETWEEN AND
空值檢查:is NULL
where組合子句:AND OR IN NOT
例:
select * from products where verd_id in (1001,1002);
2. 萬用字元過濾
萬用字元用來匹配值的一部分的特殊字元
為在搜尋子句中使用萬用字元,必須使用LIKE操作符,LIKE指示SQL後跟的搜尋模式利用萬用字元匹配而不是直接相等匹配進行比較
注意:萬用字元的效率特別低,不要過度使用萬用字元,不要在搜尋模式的開始使用萬用字元
(1)使用百分號(%)萬用字元
select * from products where proc_id like 'ANV%';
(2)使用下劃線(_)萬用字元
下劃線的用途與%一樣,但下劃線只能匹配單個字元
select * from products where proc_id like 'ANV0_';
3. 使用正則表示式進行搜尋
正則表示式的常用方法有很多,這裡不做介紹,主要介紹下REGEXP與LIKE的區別,看下面的例子
select proc_name from products where proc_name LIKE '1000';
select proc_name from products where proc_name REGEXP '1000';
通過上面會很直接的看到使用LIKE沒有輸出結果,因為LIKE匹配的是整個列,如果被匹配的文字在列值中出現,LIKE將不會找到它,相應的行也不會被返回,而REGEXP在列值內進行匹配,若出現則返回相應的行
注意:正則表示式匹配特殊字元時必須用\\為前導,\\.表示查詢.
4. 子查詢
列出訂購物品TNT2的所有客戶資訊
思路:從orderitems表中根據產品名(proc_id)找到訂單號(order_num),再在orders表中根據訂單號找到客戶ID(cust_id),最後再根據客戶ID找到客戶資訊
(1)select order_num,proc_id from orderitems where proc_id = 'TNT2';
(2)select order_num,cust_id from orders where order_num in (20005,20007);
(3)select * from customers where cust_id in (10001,10004);
下面根據子查詢的方式:
select * from customers where cust_id in (
select cust_id from orders where order_num in(
select order_num from orderitems where proc_id = 'TNT2'));
與上面的結果一樣,對於能巢狀的子查詢數量沒有限制,不過再實際使用時由於效能的限制,不能巢狀太多的子查詢
注意:這裡給出的程式碼有效並獲得所需的結果,但是,使用子查詢並不總是執行這種型別的資料檢索的最有效的方法,最好使用聯結表的方式操作,後面會介紹聯結表方式。