1. 程式人生 > 資料庫 >資料庫學習之MySQL (七)——模糊查詢 萬用字元 like ‘between and’ in ‘is null’ 安全等於

資料庫學習之MySQL (七)——模糊查詢 萬用字元 like ‘between and’ in ‘is null’ 安全等於

MySQL學習專欄 正在持續更新中:)

文章目錄


上一篇 資料庫學習之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