Mysql進階二:條件查詢
阿新 • • 發佈:2020-01-27
進階二:條件查詢
I 語法:
SELECT
查詢列表 #第三步執行
FROM
表名 #第一步執行
WHERE
篩選條件; #第二步執行
II 分類:
一、按照條件表示式篩選
條件表示式:
>
<
=
!=
<=
>=
二、按照邏輯表示式篩選
邏輯運算子:
&&
||
!
and
or
not
三、模糊查詢
like
between and
in
is null
USE myemployees;
一、按照條件表示式篩選
案例一:查詢工資》12000的員工資訊
SELECT * FROM employees WHERE salary>12000;
案例二:查詢部門編號不等於90號的員工名和部門編號
SELECT
last_name,department_id
FROM
employees
WHERE
department_id<>90;
二、按照邏輯表示式查詢
案例一:查詢工資z在10000到20000之間的員工名稱、工資以及獎金
SELECT
last_name,salary,commission_pct
FROM
employees
WHERE
salary >=10000 AND salary <= 20000;
案例二:查詢部門編號不是在90到110之間的,或者工資高於15000的員工資訊
SELECT * FROM employees WHERE #department_id <90 or department_id >110 or salary>15000; #第一種表達 NOT(department_id >90 AND department_id <1110 ) OR salary >15000; #第二種表達
三、模糊查詢
LIKE
BETWEEN AND
IN
IS NULL
IS NOT NULL
/*
like一般和萬用字元一起使用;
萬用字元:
% 任意多個字元,包含0個字元
_ 任意單個字元
*/
1.like
案例一:查詢員工姓名中包含字元a的員工資訊
SELECT
*
FROM
employees
WHERE
last_name LIKE '%a%';
案例二:查詢員工名中第三個字元為n,且第五個字元為l的員工名和工資
SELECT last_name,salary FROM employees WHERE last_name LIKE '__n_l%';
案例三:查詢員工名中地位個字元為_的員工名
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_$_%' ESCAPE '$'; #定義轉義字元
2. between and
/*
1.提高語句簡潔度
2.包含臨界值
3.兩個臨界值不可以顛倒
*/
案例一:查詢員工編號在100-120之間的員工資訊
常規表達
SELECT
*
FROM
employees
WHERE
employee_id >=100 AND employee_id <=120;
between and 的等價表達
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100 AND 120; #包含臨界值 【 】
3.in
/*
含義:使用in判斷欄位的值是否屬於in列表的某一項
1.使用in語句提高語句簡潔度
2.in列表的值型別必須統一或相容
*/
案例:查詢員工的公眾編號是 IT_PROG、AD_PRES中的一個員工名和工種編號
常規表達
SELECT
last_name,joB_id
FROM
employees
WHERE
job_id = 'IT_PROG' OR job_id='AD_VP' OR job_id= 'AD_PRES';
使用in表達
SELECT
last_name,job_id
FROM
employees
WHERE
job_id IN('IT_PROG','AD_VP','AD_PRES');
4. is null
SELECT
last_name,commission_pct
FROM
employees
WHERE
commission_pct IS NULL
安全等於 <=>
案例1:查詢沒有獎金的員工名和獎金率
SELECT
last_name,commission_pct
FROM
employees
WHERE
commission_pct <=> NULL;
案例2:查詢工資為12000的員工資訊
SELECT
*
FROM
employees
WHERE
salary <=> 12000;
is null 與 <=>
IS NULL 僅僅可以判斷NULL值,可讀性較高,建議使用
<=> 既可以判斷NULL值,又可以判斷普通的數值,但是可讀性較差
四. 經典面試題
試問
SELECT * FROM employees;
與
SELECT * FROM employees WHERE commission_pct LIKE '%%' AND last_name LIKE '%%';
結果是否一樣,說明理由。
答:
不一樣。如果判斷的欄位有NULL值,就不一樣。
如果將AND換成OR,則結果是一樣的。