三:条件查询(关系、逻辑表达式、模糊查询)


进阶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