MySQL进阶二:条件查询

南城荒凉北城伤 5月前   阅读数 42 0

目录

WHERE

语法

执行顺序

分类

1、按条件表达式筛选

2、按逻辑表达式筛选

3、模糊查询

1) like

2) between and

3) in

4) is null

5) <=> 完全等于


 该教程使用MySQL5.5.27以及SQLyog安装教程请参考MySQL和SQLyog安装教程 

WHERE

语法

SELECT
	查询列表 
FROM
	表名
WHERE
	筛选条件; 选择出返回TRUE的,跳过FALSE

执行顺序

from-->where-->select

分类

  1. 按条件表达式筛选:>、<、=、!=、<>、>=、<=其中<>标识不等于(!=)
  2. 按逻辑表达式筛选:起作用是连接条件表达式,&&、||、!,但是推荐使用and or not
  3. 模糊查询:like、between and、in、is null

1、按条件表达式筛选

#案例1:查询工资大于12000的员工信息
SELECT
	*
FROM
	employees
WHERE 
	salary > 12000;
#案例2:查询部门编号不等于90号的员工名和部门编号
SELECT
	CONCAT(last_name, first_name),
	department_id
FROM
	employees
WHERE
	department_id <> 90;

2、按逻辑表达式筛选

#案例1:查询工资在10000到20000之间的员工名、工资以及奖金
SELECT
	first_name,
	salary,
	commission_pct
FROM
	employees
WHERE
	salary >= 10000 AND salary <= 20000;
#案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
SELECT
	*
FROM
	employees
WHERE
	NOT(department_id <= 110 AND department_id >= 90) 
	OR salary > 15000;

3、模糊查询

1) like

  • 一般和通配符 % 搭配使用
  • % 为任意多个字符(包含0个字符)
  • _ 任意单个字符
#案例1:查询员工名单中包含字符a的员工信息
SELECT
	*
FROM
	employees
WHERE
	last_name LIKE '%a%'; #百分号代表的是通配符
#案例2:查询员工名单中第三个字符为n,第五个字符为l的员工名和工资
SELECT
	last_name,
	salary
FROM 
	employees
WHERE
	last_name LIKE '__n_l%';
#案例3:查询员工名中第二个字符为_的员工
SELECT 
	*
FROM
	employees
WHERE 
	last_name LIKE '_\_%'; #通过'\'转移字符
	# 或者使用
	# last_name LIKE '_$_%' ESCAPE '$';

2) between and

  • 简洁比起<= 和 >=
  • 包含边界
  • 两个值不可以颠倒顺序
#案例1:查询员工编号在100-120之间的所有的员工信息
SELECT
	*
FROM 
	employees
WHERE
	employee_id BETWEEN 100 AND 120;

3) in

含义:判断某个字段的信息是否属于in列表中的某一项,满足其中一项及返回TRUE

特点:

  • 使用in提高语言的简洁度比起or
  • in列表的值类型必须统一或者兼容
  • in列表内的字符不支持通配符
#案例:查询员工的工种编号是 IT_PROT、AD_VP、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值
  • is就是和null搭配的,不可以当作 = 使用
#案例1:查询没有奖金的员工名和奖金率/有奖金的使用is not null
SELECT last_name, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;

5) <=> 完全等于

  • is null 仅仅可以判断 null 值
  • <=> 既可以判断null值,又可以判断数值,但是可读性差点,容易和 <> 混淆
#案例1:查询没有奖金的员工名和奖金率
SELECT last_name, commission_pct
FROM employees
WHERE commission_pct <=> NULL;
#案例2:查询工资为12000的员工信息
SELECT *
FROM employees
WHERE salary <=> 12000;

 

发布了336 篇原创文章 · 获赞 146 · 访问量 11万+

注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: