1. 程式人生 > >MySql必知必會實戰練習(三)資料過濾 MySql必知必會實戰練習(二)資料檢索

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'));

  

  與上面的結果一樣,對於能巢狀的子查詢數量沒有限制,不過再實際使用時由於效能的限制,不能巢狀太多的子查詢

  注意:這裡給出的程式碼有效並獲得所需的結果,但是,使用子查詢並不總是執行這種型別的資料檢索的最有效的方法,最好使用聯結表的方式操作,後面會介紹聯結表方式。