MySQL入门(三)条件查询

本文数据集下载链接:https://pan.baidu.com/s/1sVcSXfVZimc6ruyMr4Gr3g ,提取码:7gfa

一、条件查询基础

我们知道从 MySQL 表中使用 SQLSELECT 语句来读取数据,如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT语句中。

操作符 描述 实例
= 等号,检测两个值是否相等,如果相等返回true (A = B) 返回false。
<>, != 不等于,检测两个值是否相等,如果不相等返回true (A != B) 返回 true。
> 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true (A > B) 返回false。
< 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true (A < B) 返回 true。
>= 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true (A >= B) 返回false。
<= 小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true (A <= B) 返回 true。

语法

1
2
3
4
5
6
SELECT 
查询列表
FROM
表名
WHERE
筛选条件

分类

  1. 按条件表达式筛选:> < = != <> >+ <=
  2. 按逻辑表达式筛选:&& || !(and or not)
  3. 模糊查询:LIKE, BETWEEN AND, IN, IS NULL

二、三种查询方式介绍

1. 按条件表达式筛选

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

1
2
3
SELECT * 
FROM employees
WHERE salary>12000;

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

1
2
3
SELECT last_name, department_id 
FROM employees
WHERE department_id<>90;

2. 按逻辑表达式筛选

案例一:查询工资在10000到20000之间的员工名、工资及奖金

1
2
3
SELECT last_name, salary, commission_pct 
FROM employees
WHERE salary>=10000 AND salary<=20000;

案例二:查询部门编号不是在90到110之间的,或者工资高于15000的员工信息

1
2
3
4
5
SELECT * 
FROM employees
WHERE department_id<90
OR department_id>110
OR salary>15000;

更为简洁的写法是(使用逻辑表达式):

1
2
3
SELECT * 
FROM employees
WHERE NOT(department_id>=90 AND department_id<=110) OR salary>15000;

3. 模糊查询

3.1 LIKE

  • 一般和通配符搭配使用
  • 通配符:
    • $\%$ 百分号:任意多个字符,包含0个字符
    • $_$ 下划线:任意单个字符

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

1
2
3
SELECT * 
FROM employees
WHERE last_name LIKE '%a%';

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

1
2
3
SELECT last_name, salary 
FROM employees
WHERE last_name LIKE '__n_l%';

案例三:查询员工名中第二个字符为下划线(_)的员工名,第二种方法为手动指定转义字符

1
2
3
4
SELECT last_name 
FROM employees
WHERE last_name
LIKE '_\_%';

第二种方法代码如下:

1
2
3
SELECT last_name 
FROM employees
WHERE last_name LIKE '_$_%' ESCAPE '$';

3.2 BETWEEN AND

  1. 使用BETWEEN AND可以提高语句的简洁度

    1. 包含临界值
    2. 两个值不能颠倒顺序

案例:查询员工编号在100到120之间的员工信息,第一种做法较繁琐,第二种用BETWEEN AND

1
2
3
4
SELECT * 
FROM employees
WHERE employee_id>=100
AND employee_id<=120;

或者更简洁的:

1
2
3
SELECT * 
FROM employees
WHERE employee_id BETWEEN 100 AND 120;

3.3 IN

  1. 使用IN提高语句简洁度
  2. IN列表的值类型必须一致或兼容
  3. 不支持下划线或通配符

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

1
2
3
4
SELECT last_name, job_id 
FROM employees
WHERE job_id='IT_PROG'
OR job_id='AD_VP' OR job_id='AD_PRES';

或者更简洁的:

1
2
3
SELECT last_name, job_id 
FROM employees
WHERE job_id IN ('IT_PROG', 'AD_VP', 'AD_PRES');

3.4 IS NULL

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

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

1
2
3
SELECT last_name, commission_pct 
FROM employees
WHERE commission_pct IS NULL;

变式:查询有奖金的员工名和奖金率

1
2
3
SELECT last_name, commission_pct 
FROM employees
WHERE commission_pct IS NOT NULL;

注意:以下为错误:

1
2
SELECT * FROM employees
WHERE salary IS 12000;

4. 安全等与 <=>

  1. 优点:既可以判断NULL值又可以判断普通数值
  2. 缺点:可读性较低

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

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

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

1
2
3
SELECT last_name, commission_pct 
FROM employees
WHERE salary <=> 12000;

三、易混辨析

where:数据库中常用的是where关键字,用于在初始表中筛选查询。它是一个约束声明,用于约束数据,在返回结果集之前起作用。

group by:对select查询出来的结果集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个指定字段或者表达式的值。

having:用于对where和group by查询出来的分组经行过滤,查出满足条件的分组结果。它是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作。

执行顺序

select –>where –> group by–> having–>order by

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2020-2021 chenk
  • 由 帅气的CK本尊 强力驱动
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信