文章目录
- ✨条件查询
- ✨条件查询语法格式
- ✨等于、不等于
- ✨等于 =
- ✨不等于 <> 或 !=
- ✨大于、大于等于、小于、小于等于
- ✨大于 >
- ✨大于等于 >=
- ✨小于 <
- ✨小于等于 <=
- ✨and
- ✨or
- ✨and和or的优先级问题
- ✨between...and...
🌈你好呀!我是 山顶风景独好
💕欢迎来到我的博客,很高兴能够在这里和您见面!
💕希望您在这里可以感受到一份轻松愉快的氛围!
💕这里不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长!
🏠大家订阅本专栏!本专栏旨在为SQL初学者提供一条逐步迈向高级应用的学习之路,带您从零开始,一步一步练习,逐步掌握SQL的精髓,实现技能的提升与飞跃!😊
上一篇:【SQL学习进阶】从入门到高级应用(二)
✨条件查询
通常在进行查询操作的时候,都是查询符合某些条件的数据,很少将表中所有数据都取出来。怎么取出表的部分数据?需要在查询语句中添加条件进行数据的过滤。常见的过滤条件如下:
条件 | 说明 |
---|---|
= | 等于 |
<>或!= | 不等于 |
>= | 大于等于 |
<= | 小于等于 |
> | 大于 |
< | 小于 |
between…and… | 等同于 >= and <= |
is null | 为空 |
is not null | 不为空 |
<=> | 安全等于(可读性差,很少使用了)。 |
and 或 && | 并且 |
or 或 || | 或者 |
in | 在指定的值当中 |
not in | 不在指定的值当中 |
exists | |
not exists | |
like | 模糊查询 |
✨条件查询语法格式
select
...
from
...
where
过滤条件;
过滤条件放在where子句当中,以上语句的执行顺序是:
第一步:先执行from
第二步:再通过where条件过滤
第三步:最后执行select,查询并将结果展示到控制台
✨等于、不等于
✨等于 =
判断等量关系,支持多种数据类型,比如:数字、字符串、日期等。
案例1:查询月薪3000的员工编号及姓名
select
empno,ename
from
emp
where
sal = 3000;
案例2:查询员工FORD的岗位及月薪
select
job, sal
from
emp
where
ename = 'FORD';
存储在表emp中的员工姓名是FORD,全部大写,如果在查询的时候,写成全部小写会怎样呢?
select
job, sal
from
emp
where
ename = 'ford';
通过测试发现,即使写成小写ford,也是可以查询到结果的,不过这里需要注意的是:在Oracle数据库当中是查询不到数据的,Oracle的语法要比MySQL的语法严谨。对于SQL语句本身来说是不区分大小写的,但是对于表中真实存储的数据,大写A和小写a还是不一样的,这一点Oracle做的很好。MySQL的语法更随性。另外在Oracle当中,字符串是必须使用单引号括起来的,但在MySQL当中,字符串可以使用单引号,也可以使用双引号,如下:
select
job, sal
from
emp
where
ename = "FORD";
案例3:查询岗位是MANAGER的员工编号及姓名
select
empno, ename
from
emp
where
job = 'MANAGER';
- 任务:查询工资级别是1的最低工资以及最高工资
✨不等于 <> 或 !=
判断非等量关系,支持字符串、数字、日期类型等。不等号有两种写法,第一种<>,第二种!=,第二种写法和Java程序中的不等号相同,第一种写法比较诡异,不过也很好理解,比如<>3,表示小于3、大于3,就是不等于3。你get到了吗?
案例1:查询工资不是3000的员工编号、姓名、薪资
select
empno,ename,sal
from
emp
where
sal <> 3000;
案例2:查询工作岗位不是MANAGER的员工姓名和岗位
select
ename,job
from
emp
where
job <> 'MANAGER';
- 任务:查询不在部门编号为10的部门工作的员工信息
✨大于、大于等于、小于、小于等于
✨大于 >
案例:找出薪资大于3000的员工姓名、薪资
select
ename, sal
from
emp
where
sal > 3000;
✨大于等于 >=
案例:找出薪资大于等于3000的员工姓名、薪资
select
ename, sal
from
emp
where
sal >= 3000;
✨小于 <
案例:找出薪资小于3000的员工姓名、薪资
select
ename, sal
from
emp
where
sal < 3000;
✨小于等于 <=
案例:找出薪资小于等于3000的员工姓名、薪资
select
ename, sal
from
emp
where
sal <= 3000;
✨and
and表示并且,还有另一种写法:&&
案例:找出薪资大于等于3000并且小于等于5000的员工姓名、薪资。
select
ename,sal
from
emp
where
sal >= 3000 and sal <= 5000;
- 任务:找出工资级别为2~4(包含2和4)的最低工资和最高工资。
✨or
or表示或者,还有另一种写法:||
案例:找出工作岗位是MANAGER和SALESMAN的员工姓名、工作岗位
select
ename, job
from
emp
where
job = 'MANAGER' or job = 'SALESMAN';
注意:这个题目描述中有这样一句话:MANAGER和SALESMAN,有的同学一看到“和”,就直接使用“and”了,因为“和”对应的英文单词是“and”,如果是这样的话,就大错特错了,因为and表示并且,使用and表示工作岗位既是MANAGER又是SALESMAN的员工,这样的员工是不存在的,因为每一个员工只有一个岗位,不可能同时从事两个岗位。所以使用and是查询不到任何结果的。如下
select
ename, job
from
emp
where
job = 'MANAGER' and job = 'SALESMAN';
- 任务:查询20和30部门的员工信息。
✨and和or的优先级问题
and和or同时出现时,and优先级较高,会先执行,如果希望or先执行,这个时候需要给or条件添加小括号。另外,以后遇到不确定的优先级时,可以通过添加小括号的方式来解决。对于优先级问题没必要记忆。
案例:找出薪资小于1500,并且部门编号是20或30的员工姓名、薪资、部门编号。
先来看一下错误写法:
select
ename,sal,deptno
from
emp
where
sal < 1500 and deptno = 20 or deptno = 30;
认真解读题意得知:薪资小于1500是一个大前提,要找出的是薪资小于1500的,满足这个条件的前提下,再找部门编号是20或30的,显然以上的运行结果中出现了薪资为1600的,为什么1600的会出现呢?这是因为“sal < 1500 and deptno = 20”结合在一起了,“depnto = 30”成了一个独立的条件。会导致部门编号为30的所有员工全部查询出来。我们应该让“deptno = 20 or deptno = 30”结合在一起,正确写法如下:
select
ename,sal,deptno
from
emp
where
sal < 1500 and (deptno = 20 or deptno = 30);
- 任务:找出薪资小于1500的,并且工作岗位是CLERK和SALESMAN的员工姓名、薪资、岗位。
✨between…and…
between…and…等同于 >= and <=
做区间判断的,包含左右两个边界值。
它支持数字、日期、字符串等数据类型。
between…and…在使用时一定是左小右大。左大右小时无法查询到数据。
between…and… 和 >= and <=只是在写法结构上有区别,执行原理和效率方面没有区别。
案例:找出薪资在1600到3000的员工姓名、薪资
select
ename,sal
from
emp
where
sal between 1600 and 3000;
采用左大右小的方式:
select
ename,sal
from
emp
where
sal between 3000 and 1600;
没有查询到任何数据,所以在使用的时候一定要注意:左小右大。
- 任务:查询在1982-01-23到1987-04-19之间入职的员工
注意:以上SQL语句中日期需要加上单引号。
✨ 这就是今天要分享给大家的全部内容了,我们下期再见!😊
🏠 我在CSDN等你哦!我的主页😍