一文让你搞懂Mysql中的条件查询(条件表达式筛选,按逻辑表达式筛选,模糊查询,排序查询)

进阶二 条件查询

语法:

select 
						     查询列表
						from 
						   表名
						 where 
								筛选条件

执行顺序 from 表名 where 筛选条件 select 查询列表

分类:

一:按条件表达式筛选

条件运算符:> < !=    <>(不等于的意思和!=同一个意思)  >= <=

     语法:
					select 
					     查询列表
					from 
					   表名
					 where 
							筛选条件
							
		执行顺序  from  表名   where  筛选条件  select 查询列表 				

二:按逻辑表达式筛选

		作用:用于连接条件表达式
		
			逻辑运算符: &&   ||    !   and   or   not
			
   &&和and:两个条件都为true,结果为true,反之为false
	
	||或or:    只要有一个为true,结果为true,反之为false
	
	!或not:如果连接的条件本身为false,结果为true,反之为false

三:模糊查询

	like
 
	 特点:
	 
 1:一般和通配符搭配使用
 
      通配符
      
				%  任意多个字符,包含0个字符
				
				_  任意单个字符,即一个字符
 between and  in
 
 is null |  is  not null

四:排序查询

语法:	

	select 	查询列表

		from 	表

	【where 	筛选条件】

order	by 	排序列表	【asc|desc】;

排序查询特点:

1:asc代表的是升序,desc代表的是降序 如果不写,默认是升序

2:order by子句可以支持 单个字段,别名,表达式,函数,多个字段

3:order by 子句在查询语句的最后面,除了limit子句。

一:按条件表达式筛选的案例

案例一,查询工资>12000的员工信息

SELECT
 * FROM
   employees 
      WHERE
      salary > 12000;

案例二,查询部门编号不等于90号的员工名和部门编号

SELECT
	last_name,
	department_id 
FROM
	employees 
WHERE
	department_id <> 90;

二:按逻辑表达式筛选的案例

案例一:查询工资在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;
SELECT

 * FROM

   employees 
   
	   WHERE
	   
	   NOT ( department_id >= 90 AND department_id <= 110 ) 
	   OR salary > 15000;

三:模糊查询

 like
 
	 特点:
	 
 1:一般和通配符搭配使用
 
      通配符
      
				%  任意多个字符,包含0个字符
				
				_  任意单个字符,即一个字符
 between and  in
 
 is null |  is  not null

案例一:查询员工命中包含字符a的员工信息

SELECT

* FROM
  employees 
  WHERE
  last_name LIKE '%a%'

案例二:查询员工名字第三个字符为c,第五个字符为h的员工名和工资

 SELECT
  	last_name,
  	salary 
  FROM
  	employees 
  WHERE
  	last_name LIKE '__c_h%';

案例三:查询员工名中第二个字符为_的员工名

SELECT
  	last_name 
  FROM
  	employees 
  WHERE
  	last_name LIKE '_\_%';

自定义转义字符使用 ESCAPE指出转义的字符

  SELECT
  	last_name 
  FROM
  	employees 
  WHERE
  	last_name LIKE '_a_%' ESCAPE 'a';

between and 的用法

1:使用between   and  可以提高语句的见解读

2:包含临界值

3:两个临界值不要调换顺序

案例1;查询员工编号在100到120之间的员工信息

  SELECT
  
  * FROM
  employees 
  WHERE
  employee_id >= 100 
  AND employee_id <= 120;
  
  SELECT
    * FROM
  employees 
  WHERE
  employee_id BETWEEN 100 
  AND 120;

3:in 的用法

  含义:判断某字段的值是否属于in列表中的某一项
  
  1:使用in提高语句的简介度
  
  2:in列表的值类型必须一致或兼容。

案例:查询员工的工种编号是 IT_PROG,AD_VP,AD_PRES 中的一个员工名和工种编号

SELECT
	last_name,
	job_id 
FROM
	employees 
WHERE
	job_id = 'IT_PROT' 
	OR job_id = 'AD_VP' 
	OR job_id = 'AD_PRES';
	
SELECT
	last_name,
	job_id 
FROM
	employees 
WHERE
	job_id IN ( 'IT_PROT', 'AD_VP', 'AD_PRES' );

4 is null 的用法

   = 或<>不能用于判断null值
   
  is null 或 is not null 可以判断null值

案例一:查询没有奖金的员工和奖金率

SELECT
	last_name,
	commission_pct 
FROM
	employees 
WHERE
	commission_pct IS NULL;

案例一:查询有奖金的员工和奖金率

SELECT
	last_name,
	commission_pct 
FROM
	employees 
WHERE
	commission_pct IS NOT NULL;

安全等于 <=> 的用法

案例一:查询没有奖金的员工和奖金率

SELECT
	last_name,
	commission_pct 
FROM
	employees 
WHERE
	commission_pct <=> NULL;

案例二:查询工资为12000的员工信息

SELECT
	last_name,
	salary 
FROM
	employees 
WHERE
	salary <=> 12000;

is null PK <=>

is null:仅仅可以判断null值,可读性较高,建议使用

<=>:既可以判断null值,又可以判断普通的数值,可读性较低。

练习题

查询员工工资大于12000的员工姓名和工资

SELECT
	last_name,
	salary 
FROM
	employees 
WHERE
	salary > 12000;

查询员工号为176的员工的姓名和部门号的年薪

SELECT
	last_name,
	department_id,
	salary * 12 
FROM
	employees 
WHERE
	employee_id = 176;

查询员工工资不在5000到12000的员工的姓名和工资

SELECT
	last_name,
	salary 
FROM
	employees 
WHERE
	NOT ( salary >= 5000 AND salary <= 12000 );

SELECT
	last_name,
	salary 
FROM
	employees 
WHERE
	salary < 5000 OR salary > 12000;

选择在20或50号部门工作的员工姓名和部门号

SELECT
	last_name,
	department_id 
FROM
	employees 
WHERE
	department_id = 20 
	OR department_id = 50;

查询员工中没有管理者的员工姓名及job_id

SELECT
	last_name,
	job_id 
FROM
	employees 
WHERE
	manager_id IS NULL;

SELECT
	last_name,
	job_id 
FROM
	employees 
WHERE
	manager_id <=> NULL;

选择公司中有奖金的员工姓名,工资和奖金级别

SELECT
	last_name,
	salary,
	commission_pct 
FROM
	employees 
WHERE
	commission_pct IS NOT NULL;

选择员工姓名的第三个字母是a的员工姓名

SELECT
	last_name 
FROM
	employees 
WHERE
	last_name LIKE '__a%';

选择姓名中有字母a和e的员工姓名

SELECT
	last_name 
FROM
	employees 
WHERE
	last_name LIKE '%a%' 
	AND last_name LIKE '%e%';

显示出employees表中first_name以’e’结尾的员工信息

SELECT
 * FROM
   employees 
      WHERE
   first_name LIKE '%e';

显示出表employees部门编号在80-100之间的姓名,职位.

SELECT
	e.last_name,
	j.job_title 
	FROM
employees e
	LEFT JOIN jobs j ON e.job_id = j.job_id 
	WHERE
e.department_id BETWEEN 80 
	AND 100;

显示出表employees的manager_id是100,101,110的员工姓名,职位。

SELECT
e.last_name,
j.job_title 
FROM
employees e
LEFT JOIN jobs j ON e.job_id = j.job_id 
WHERE
manager_id IN ( 100, 101, 110 );
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值