三:條件查詢(關系、邏輯表達式、模糊查詢)


進階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);          


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM