資料庫學習之MySQL (七)——模糊查詢 萬用字元 like ‘between and’ in ‘is null’ 安全等於
文章目錄
上一篇 資料庫學習之MySQL (六)——條件查詢 條件表示式 邏輯表示式 講了條件查詢,那是比較精確的而又死板的,這裡這裡講一下模糊查詢。
like
這個就是一個執行萬用字元(wildcard character) 篩選的函式罷了
我們先來試一試下面的程式碼:
USE data1; SELECT `last_name`,CONCAT( ',',`first_name`,IFNULL(`manager_id`,0),IFNULL(`job_id`,IFNULL(`email`,IFNULL(`commission_pct`,0) ) 職工基本情況,`salary` FROM employees WHERE `last_name` LIKE '%b%';
%就是萬用字元,注意萬用字元和正則表示式(regular expression) 是兩碼事,目的也不相同。
萬用字元是根據形勢篩選個體(比如字串 或者一個物件的某個屬性),
正則表示式是在一個個體(一個字串)中摘取自己想要的片段,摘取的過程就必須先匹配(match),鎖定自己要的部分,再拿出來。
下面是執行結果:
另外 之前學的 邏輯表示式完全也可以應用上,畢竟無論是模糊查詢還是條件查詢,都是表示式:
where處改變了一下,程式碼如下:
WHERE
NOT(salary>=10000 AND salary<=20000)
AND `last_name` LIKE '%b%';
結果如下:
現在我們具體看看
LIKE 支援的萬用字元 % _ 介紹
其實就支援兩種
百分號% 代表(通配)任意數量**(包括0個)的字元,意味著%可以代表所有**東西,除了NULL,類似於正則表示式中的
*
,這個星號匹配我們在SELECT * FROM employees;
還用過。
下劃線_ 代表(通配)1個的字元,類似於正則表示式中的 ?
.
下面舉個栗子:要last_name的第二個字元是下劃線 以及 first_name的第二個字母是b的所有人的資料
WHERE
`last_name` LIKE '_\_%'
AND `first_name` LIKE '_b%';
這裡轉義的方式與絕大多數語言相同:利用反斜槓\
當然MySQL也可以自定義轉義符號:比如想改成
$
WHERE
`last_name` LIKE '_$_%' ESCAPE '$'
AND `first_name` LIKE '_b%';
between and
上一節教程提到了這個,between and其實可以完全實現這個功能。
WHERE
salary between 10000 and 20000;
另外 換成
WHERE
salary between 20000 and 10000;
你可以試試行不行:)
in
這裡,我們假設需要找到所有last_name為Peter,Christopher,David,Oliver,Patrick的人,你應該怎麼做?
上一節的知識 我們會這樣:
USE data1;
SELECT
`last_name`,`job_id`,CONCAT(
`last_name`,`salary`
FROM
employees
WHERE
first_name = 'Peter' OR
first_name = 'Christopher' OR
first_name = 'David' OR
first_name = 'Oliver' OR
first_name = 'Patrick';
但是很明顯 where部分太冗餘了 如果程式碼放在一行可能更加難受,
而in就是解決這個問題的,我們看看改進後的where:
WHERE
first_name IN('Peter','Christopher','David','Oliver','Patrick');
is null 和 is not null
當單元格為空,值就是NULL,我們想針對這類空值進行判斷,該怎麼辦?
WHERE
`commission_pct` = NULL;
這樣嗎? 你可以試試行不行2333
WHERE
`commission_pct` IS NULL;
效果如下:
如果不為空 很簡單
WHERE
`commission_pct` IS NOT NULL;
安全等於 <=>
上面 IS
關鍵字只能判斷NULL
而 =
只能判斷普通值(不是NULL的)
有一個全能型選手能夠搞定所有可能的判斷,這就是安全判斷:
WHERE
`commission_pct` <=> NULL;
WHERE
`commission_pct` <=> 0.4;
但傳統說法認為安全等於可讀性不高 我覺得倒是挺靠譜的2333