1. 程式人生 > 資料庫 >Mysql進階二:條件查詢

Mysql進階二:條件查詢

進階二:條件查詢

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,則結果是一樣的。