進階2 條件查詢
/*
語法:
select 查詢列表
from 表名
where 篩選條件
執行順序:
(1)from子句
(2)where子句
(3)select子句
select last_name,first_name from employees where salary>20000;
特點:
1、按關系表達式篩選
關系運算符: > < >= <= = <>(是不等於的意思)
補充:也可以使用!= ,但是不建議
2、按邏輯表達式篩選: and or not
補充:也可以使用 && || !
3、模糊查詢
like
in
between and
is null
*/
#一、按關系表達式篩選
#案例一:查詢部門編號不是100的員工信息
SELECT *
FROM `employees`
WHERE `department_id` <> 100;
#案例二:查詢工資<15000的姓名、工資
SELECT `first_name`,`last_name`,`salary`
FROM `employees`
WHERE `salary`<15000;
#二、按邏輯表達式篩選
#案例一:查詢部門編號不是50-100之間員工姓名、部門編號、郵箱
#方式一
SELECT `first_name`,`last_name`,`department_id`,`email`
FROM `employees`
WHERE `department_id` NOT BETWEEN 50 AND 100;
#方式二
SELECT `first_name`,`last_name`,`department_id`,`email`
FROM `employees`
WHERE NOT(`department_id`>=50 AND `department_id`<=100);
#方式三:
SELECT `first_name`,`last_name`,`department_id`,`email`
FROM `employees`
WHERE `department_id`<50 OR `department_id`>100;
#案例二:
#方式一:
SELECT *
FROM employees
WHERE commission_pct>0.03 OR (employee_id>=60 AND employee_id>=110);
#方式二:
SELECT *
FROM employees
WHERE commission_pct>0.03 OR (employee_id NOT BETWEEN 60 AND 110);
#三、模糊查詢
#1、like
# like / not like
/*
功能:一般和通配符搭配使用,對字符型數據進行部分匹配查詢
常見的通配符:
_ 任意單個字符
% 任意多個字符
*/
#實例1:查詢姓名中包含字符a的員工信息
SELECT *
FROM `employees`
WHERE last_name LIKE '%a%';
#實例2:查詢姓名中包含最后一個字符為e的員工信息
SELECT *
FROM `employees`
WHERE last_name LIKE '%e';
#實例3:查詢姓名中包含第一個字符為e的員工信息
SELECT *
FROM `employees`
WHERE last_name LIKE 'e%';
#實例4:查詢姓名中包含第三個字符為x的員工信息
SELECT *
FROM `employees`
WHERE last_name LIKE '__x%';
#實例5:查詢姓名中包含第二個字符為_的員工信息
#方式一:(轉義字符\,類似與Java中的轉義字符)
SELECT *
FROM `employees`
WHERE last_name LIKE '_\_%';
#方式二:
SELECT *
FROM `employees`
WHERE last_name LIKE '_$_%' ESCAPE '$';
#方式二的另外一種寫法,$符可以改用任意一個字符
SELECT *
FROM `employees`
WHERE last_name LIKE '_a_%' ESCAPE 'a';
#2、in
/*
功能:查詢某字段的值是否屬於指定的列表之內
a in(常量值1,常量值2,常量值3,....)
a not in(常量值1,常量值2,常量值3,....)
*/
#案例1:查詢部門編號是30/50/90的員工明、部門編號
#方式一:
SELECT `last_name`,`department_id`
FROM `employees`
WHERE `department_id` IN (30,50,90);
#方式二:
SELECT `last_name`,`department_id`
FROM `employees`
WHERE `department_id`=30 OR `department_id`=50 OR `department_id`=90;
#案例二:查詢工種編號不是SH_CLERK或IT_PROG的員工信息
SELECT *
FROM `employees`
WHERE `job_id` NOT IN('SH_CLERK','IT_PROG');
#3、between and
/*
功能:判斷某個字段的值是否介於xx之間
between and /not between and
*/
#案例一:查詢部門編號是30-90之間的部門編號、員工姓名
#方式一:
SELECT `department_id`,`last_name`
FROM `employees`
WHERE `department_id` BETWEEN 30 AND 90;
#方式二:
SELECT `department_id`,`last_name`
FROM `employees`
WHERE `department_id`>= 30 AND `department_id`<=90;
#案例2:查詢年薪不是100000-200000之間的員工姓名、工資、年薪
#方式一
SELECT `last_name`,`salary`,`salary`*12*(1+IFNULL(`commission_pct`,0)) AS 年薪
FROM `employees`
WHERE `salary`*12*(1+IFNULL(`commission_pct`,0)) NOT BETWEEN 100000 AND 200000;
SELECT `last_name`,`salary`,`salary`*12*(1+IFNULL(`commission_pct`,0)) 年薪
FROM `employees`
WHERE `salary`*12*(1+IFNULL(`commission_pct`,0)) NOT BETWEEN 100000 AND 200000;
#方式二
SELECT `last_name`,`salary`,`salary`*12*(1+IFNULL(`commission_pct`,0)) AS 年薪
FROM `employees`
WHERE `salary`*12*(1+IFNULL(`commission_pct`,0))<100000 OR `salary`*12*(1+IFNULL(`commission_pct`,0))>200000;
#4、is null/is not null
#實例1
:查詢沒有獎金的員工信息
SELECT *
FROM `employees`
WHERE `commission_pct` IS NULL;
#實例
1
:查詢有獎金的員工信息
SELECT *
FROM `employees`
WHERE `commission_pct` IS NOT NULL;
/*
= 只能判斷普通的內容
is 只能判斷null值
<=> 安全等於,即能判斷普通的內容,又能判斷null值,相當與等於號(=)
*/
#練習
#1、查詢工資大於1200的員工姓名和工資
SELECT `last_name`,`salary`
FROM `employees`
WHERE `salary`>1200;
#2、查詢員工號為176的員工的姓名和部門號和年薪
SELECT `last_name`,`department_id`,`salary`*12*(1+IFNULL(`commission_pct`,0))
FROM `employees`
WHERE `employee_id`=176;
#3、選擇工資不在500到1200的員工的姓名和工資
SELECT `last_name`,`salary`
FROM `employees`
WHERE `salary` NOT BETWEEN 500 AND 1200;
#4、選擇部門號在20到50號部門工作的員工姓名和部門號
SELECT `last_name`,`department_id`
FROM `employees`
WHERE `department_id` IN (20,50);
#5、選擇公司中沒有管理者的員工姓名及job_id
SELECT `last_name`,`job_id`
FROM `employees`
WHERE `manager_id` IS NULL;
#6、選擇公司中有獎金的員工姓名,工資和獎金級別
SELECT `last_name`,`commission_pct`
FROM `employees`
WHERE `commission_pct` IS NOT NULL;
#7、選擇員工姓名的第三個字母a和e的員工姓名
SELECT `last_name`
FROM `employees`
WHERE `last_name` LIKE '%a%' AND '%e%';
#8、選擇員工姓名有字母a的員工姓名
SELECT `last_name`
FROM `employees`
WHERE `last_name` LIKE '__a%';
#9、顯示出表`employees`表中`first_name`以e結尾的員工信息
SELECT *
FROM `employees`
WHERE `first_name` LIKE '%e';
#10、顯示出表`employees`表中部門編號在80-100之間的姓名、職位
SELECT `last_name`,`job_id`
FROM `employees`
WHERE `department_id` BETWEEN 80 AND 100;
#11、顯示出表`employees`表的manger_id 是100、101、110的員工給姓名、職位
SELECT `last_name`,`job_id`
FROM `employees`
WHERE `manager_id` IN (100,101,110);