摘要:条件查询;条件表达式,逻辑表达式,模糊查询,like,通配符,转义字符,escape关键字,between and,in,is null,is not null,安全等于。

条件查询
语法:

SELECT
查询列表
FROM
表名
WHERE
筛选条件;
1
2
3
4
5
6
我们根据筛选条件简单进行一下分类:

按条件表达式筛选
条件运算符:
>:大于
<:小于
=:等于
!=或<>:不等于
>=:大于或等于
<=:小于或等于

示例
查询工资大于12000的员工信息。
SELECT * FROM employees WHERE salary>12000;

查询部门编号不等于90号的员工名和部门编号。
SELECT
first_name,
department_id
FROM
employees
WHERE
department_id <> 90 ;
1
2
3
4
5
6
7

按逻辑表达式筛选
逻辑运算符:
逻辑运算符就是为了连接条件表达式。
&&或and:与
||或or:或
!或not:非

示例
查询工资在10000到20000之间的员工名、工资以及奖金率。
SELECT
first_name,
salary,
commission_pct
FROM
employees
WHERE
salary > 10000 && salary < 20000 ;
1
2
3
4
5
6
7
8

查询部门编号不是在90到110之间,或者工资高于15000的员工信息。
SELECT
*
FROM
employees
WHERE
NOT (department_id <= 110 AND department_id >= 90) OR salary > 15000;
1
2
3
4
5
6

模糊查询
模糊查询也是一种条件表达式,可以看做是一种复杂的条件表达式。
like
between and
in
is null或者is not null

我们逐个介绍一下:

1)like
like:意思就是“像是”。

一般和通配符搭配使用。
通配符有:
%:任意字符串,包含0个字符。
_:任意单个字符

如果我们要使用的字符就是“%”或者“_”,因为他们本身是通配符,所以我们要想使用它们作为字符,我们就需要转义字符:
\_:下划线
\%:百分号
当然前面的转义字符“\”不是强制要求的,我们也可以用关键字“ESCAPE”来自定义转义字符。这个我们可以在下面的第三个例子中看一下。

like用法示例
我们举一个例子,查询员工名中包含字符“a”的员工信息。
SELECT
*
FROM
employees
WHERE
first_name LIKE '%a%' ;
1
2
3
4
5
6

我们再举一个例子,查询员工名中第三个字符是“e”,第五个字符为“a”的员工的员工名和工资。
SELECT
first_name,
salary
FROM
employees
WHERE first_name LIKE '__e_a%' ;
1
2
3
4
5
6

第三个例子,**查询员工名中第二个字符是下划线“_”的员工的员工名和工资。**这里我们就需要用到上面介绍的转义字符。
SELECT
last_name,
salary
FROM
employees
WHERE
last_name LIKE '_\_%' ;
1
2
3
4
5
6
7

在一些特殊的情况下,我们也可以自定义转义字符,需要使用ESCAPE关键字。上面的例子,我们可以写成:
SELECT
last_name,
salary
FROM
employees
WHERE
last_name LIKE '_$_%' ESCAPE '$';
1
2
3
4
5
6
7
这样我们就定义了$作为我们的转义字符。我们可以看到效果是一样的。

2)between and
between and:意思就是“在什么之间”。

我们举一个例子:查询员工编号在100到120之间的员工信息。
这里的条件我们通常写成employee_id >= 100 AND employee_id <= 120。
我们也可以使用between and,between and语句和上面的一句是等效的,这样我们就可以写成

SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100 AND 120 ;
1
2
3
4
5
6
也可以达成相同的效果:

但是我们要注意几点:

使用between and可以大大提高sql语句的简洁度;
包含临界值,例如上面的例子中,是包含100和120的
前后顺序不可以颠倒!这一点很重要,如果写成between 120 and 100,这样不会报错,但是不会有结果。
3)in
in的意思就是“在……里面”。

我们也是先举一个例子:查询员工的工种编号是IT_PROG、AD_VP、AD_PRES中的任意一个的员工的员工名和工种编号。
我们可以使用逻辑运算符OR,可以写成:

job_id = 'IT_PROG' OR job_id = 'AD_VP' OR job_id = 'AD_PRES';
1
我们也可以使用IN写成:

SELECT
last_name,
job_id
FROM
employees
WHERE job_id IN ('IT_PROG', 'AD_VP', 'AD_PRES') ;
1
2
3
4
5
6
我们看一下结果:

我们介绍一下IN的特点:

IN 的作用就是判断某字段的值是否属于IN列表中的某一项。
使用IN可以提高SQL语句的简洁度。
IN列表的值类型必须一致或者兼容。
在IN列表中是不支持通配符的。所有字符都将被当做字符本身来处理。
4)is null 和is not null
is null和is not null:判断是否为空值。

我们先举一个例子,我们要查询一下没有奖金的员工的员工名和奖金率。
这时我们要使用is null或者 is not null:

SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NULL ;
1
2
3
4
5
6
7

那么请问我们可以使用commission_pct = NULL吗?
答案是不可以的。

而且要注意的是IS NULL是一个整体,IS只能用于NULL值得判断,不可以做其他的判断。

补充:安全等于
最后我们补充一下SQL里面的“安全等于”,符号是“<=>”

安全等于是可以判断null值的。
当然也可以用于普通数值的判断,与“=”一样。
但是安全等于用的很少,因为它的可读性比较差。所以还是建议使用普通的“=”或者“IS NULL”。

例如上面判断奖金是否为null的例子,我们在条件表达式就可以写成:

SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct <=> NULL ;
1
2
3
4
5
6
7
上面判断查询员工工资为12000的例子中,可以写成

SELECT
*
FROM
employees
WHERE
salary <=> 12000 ;
1
2
3
4
5
6

---------------------

MySQL(四)DQL语言——条件查询的更多相关文章

  1. MySQL的DQL语言(查)

    MySQL的DQL语言(查) DQL:Data Query Language,数据查询语言. DQL是数据库中最核心的语言,简单查询,复杂查询,都可以做,用select语句. 1. 查询指定表的全部字 ...

  2. MySql(四)Select条件查询

    select条件查询的格式如下: SELECT 查询列表FROM 表名WHERE 筛选条件:123456根据筛选条件可以分为以下几类: 按照条件按表达式进行筛选 常用条件运算符如下:> .< ...

  3. mysql四-1:单表查询

    一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键 ...

  4. Mysql(四)-1:单表查询

    一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键 ...

  5. Python、mysql四-1:单表查询

    一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键 ...

  6. mysql增删改查——条件查询+模糊查询

    条件查询一般是 = 等于 >大于 <小于 >=大于等于 <=小于等于 <>区间 between and区间 or并且 and或者 in包含 like模糊查询 实例, ...

  7. mysql根据分组和条件查询以后如何统计记录的条数

    1.子查询,查询出的数据随便起一个别名,然后根据分组和条件查询出的数据,作为一个具有一列的一个表,然后外面的查询查询这个数据表的这一列的总数,即可. SELECT COUNT( * ) FROM ( ...

  8. mysql四-2:多表查询

    一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 #建表 create table department( id int, name varchar(20) ); create ta ...

  9. Mysql(四)-2:多表查询

    一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 #建表 create table department( id int, name varchar(20) ); create ta ...

随机推荐

  1. CodeForces484A Bits(贪心)

    CodeForces484A Bits(贪心) CodeForces484A 题目大意:给出范围[A.B].期望你给出某个数X满足X属于[A,B],而且X转成二进制的1的个数最多.假设有多个给出最小的 ...

  2. Python的lambda函数与排序

    Python的lambda函数与排序 2010-03-02 15:02 2809人阅读 评论(0) 收藏 举报 lambdapythonlistlispclass工作   目录(?)[+]   前几天 ...

  3. CentOS 7 执行级别的切换

    CentOS 7 执行级别的切换 由命令行级别切换到窗体级别的命令未变:init 5或startx 由窗体级别切换到命令行级别的命令未变:init 3 新版本号的执行级别都定义在 /lib/syste ...

  4. UVA10056 - What is the Probability ?(概率)

    UVA10056 - What is the Probability ? (概率) 题目链接 题目大意:有n个人玩游戏,一直到一个人胜出之后游戏就能够结束,要不然就一直从第1个到第n个循环进行,没人一 ...

  5. 洛谷P1328==codevs3716 生活大爆炸版石头剪刀布[NOIP 2014 day1 T1]

    P1328 生活大爆炸版石头剪刀布 1.8K通过 2.6K提交 题目提供者2014白永忻 标签模拟NOIp提高组2014 难度普及- 提交该题 讨论 题解 记录 最新讨论 Who can help m ...

  6. Python split 分割中文

    str8="中国 和 韩国 的区别" # a=str8.find("Python") # print a b=str8.find("和") ...

  7. js数值型遇0开始自动转换为8进制

    如题,今天在项目更新时发现了js的这个自动转换问题,代码如下: var num = 0110; render:function(num){       var html="<a hre ...

  8. PCB 机器学习(ML.NET)初体验实现PCB加投率预测

    使用ML.NET建立PCB加投率模型对单一蚀刻工序进行加投率预测, 此实例为最简单预测,要想实现全流程加投率预测挑战难度还是挺大的,可以查看另一种关于大数据在PCB行业应用---加投率计算基本原理:P ...

  9. bzoj 1867: [Noi1999]钉子和小球【dp】

    设f[i][j]为掉到f[i][j]时的概率然后分情况随便转移一下就好 主要是要手写分数比较麻烦 #include<iostream> #include<cstdio> usi ...

  10. noip2016 小结(ac两题+学习总结)

    NOIP2016考试小结 DAY 1 T1 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内, ...