SQL条件查询(Oracle)

dql–数据查询语言

简单查询

SQL简单查询

条件查询

//条件查询
SELECT *|列名|计算|常量
FROM 表名
WHERE 过滤条件;

过滤条件

1.判断

包括  < > = <> != <= >=
常见的数据类型:
1.数值型
2.字符型
3.日期型

数值之间的比较

例题:
查询工资大于3000的员工信息

//按照  工资大于3000的 条件去过滤,展示 员工信息
SELECT * FROM emp WHERE sal>3000;//将符合条件的数据保留,不符合条件的过滤掉

在这里插入图片描述
练习
查询10号部门的员工姓名岗位薪资入职日期
查询奖金大于100的员工信息

SELECT ename,job,sal,hiredate FROM emp WHERE DEPTNO = 10;
SELECT * FROM emp WHERE COMM>100;

以下为练习结果
在这里插入图片描述
在这里插入图片描述

字符之间的比较

例题:查询姓名是SMITH的员工信息

SELECT * FROM emp WHERE ename = 'SMITH';
SELECT * FROM emp WHERE ename <> 'SMITH';//查询姓名不是史密斯的人

在这里插入图片描述
在这里插入图片描述

注意:
1.字符要加单引号
2.数据是区分大小写
3.字符是可以比较大小的,但是没有意义(比较是使用ASCII码比较的)
练习:查询岗位是销售的员工姓名,岗位,薪资,入职日期。
查询部门地址是纽约的部门信息

SELECT ename,job,sal,hiredate FROM emp WHERE job = 'SALESMAN';
SELECT * FROM dept WHERE LOC = 'NEW YORK' ;

在这里插入图片描述
在这里插入图片描述
查询结果如图所示。

日期之间的比较

例题:
查询入职日期在1981/1/1之前入职的员工信息

SELECT * FROM emp WHERE hiredate<1981/1/1;

上面的代码会提示错误
在这里插入图片描述
应为DATE,实际为NUMBER

此时我们需要转换函数
to_date(‘目标字符’,‘日期格式’)
作用:将目标字符转换成日期类型
返回:日期;

SELECT * FROM emp WHERE hiredate < to_date('1981/1/1','yyyy/mm/dd');

在这里插入图片描述
练习
查询入职日志在1981/2/1之后的员工姓名岗位工资以及入职日期

SELECT ename,job,sal,hiredate FROM emp WHERE hiredate > to_date('1981/2/1','yyyy/mm/dd');

在这里插入图片描述
结果如图
注意:
1.比较符左右数据类型要一致
2.空值(NULL值)是不参与比较的。

2.NULL值判断
IS NULL //是空值
IS NOT NULL //不是空值

例题:查询有奖金的员工信息

SELECT * FROM emp WHERE comm IS NOT NULL;

在这里插入图片描述
练习
查询emp表中最大的领导信息;

SELECT * FROM emp WHERE MGR IS NULL;

在这里插入图片描述

3.范围查询

关键词
BETWEEN 值1 AND 值2 —在值1和值2之间即满足条件。
NOT BETWEEN 值1 AND 值2 --不在值1和值2之间即满足条件。
例题:
查询工资在1000-3000之间的员工信息。

SELECT * FROM emp WHERE sal BETWEEN 1000 AND 3000;

在这里插入图片描述
BETWEEN AND 是包含边界的 即大于等于1000小于等于3000
1000与3000不可以换位置 一定要将小值写在前面
练习题
1.查询入职时间在1980年至1981年5月之间的员工信息

 SELECT * FROM emp WHERE hiredate BETWEEN to_date('1980/1/1','yyyy/mm/dd') AND to_date('1981/5/31','yyyy/mm/dd');

在这里插入图片描述

4.包含查询

关键词
IN(集合) —在集合里面即满足条件
NOT IN(集合) —不在集合里面即满足条件
集合:必须是同一属性的数据
IN(1,2,3)
IN(100,200,300,800)
IN(‘a’,‘b’,‘c’) IN(to_date(‘1988/2/3’,‘yyyy/mm/dd’),to_date(‘1928/2/3’,‘yyyy/mm/dd’))
这些都是集合
而IN(‘a’,2,to_date(‘1988/2/3’,‘yyyy/mm/dd’))这种就不是集合
例题:查询工资是1000或者3000的员工信息

SELECT * FROM emp WHERE sal IN(1000,3000);

在这里插入图片描述
查询部门地址是纽约或者芝加哥的部门信息

SELECT * FROM dept WHERE loc in('NEW YORK','CHICAGO');

在这里插入图片描述
练习题

1.查询部门编号是10号或20号的员工信息
2.查询薪资是3000或5000的员工信息
3.查询岗位是SALESMAN或者MANAGER的员工信息
4.查询岗位既不是SALESMAN也不是MANAGER的员工信息
5.查询入职时间是1980年12月17号或者1981年2月20号的员工信息

SELECT * FROM emp WHERE DEPTNO IN(10,20);
SELECT * FROM emp WHERE sal IN(3000,5000);
SELECT * FROM emp WHERE job IN('SALESMAN','MANAGER');
SELECT * FROM emp WHERE job NOT IN('SALESMAN','MANAGER');
SELECT * FROM emp WHERE hiredate IN(to_date('1980/12/17','yyyy/mm/dd'),to_date('1981/2/20','yyyy/mm/dd'));

自己检查一下 太多了不截图了

5.模糊查询

LIKE ‘目标格式’ --像目标格式即满足条件
NOT LIKE ‘目标格式’ --不像目标格式即满足条件
目标格式
% ----占有一个或者多个字节
_ ----下划线只占一位
例题:查询员工姓名以S开头的员工信息

SELECT * FROM emp WHERE ename LIKE 'S%';

在这里插入图片描述

查询姓名倒数第二位是T的员工信息

SELECT * FROM emp WHERE ename LIKE '%T_%';

在这里插入图片描述

练习题
1.查找姓名以S开头的员工信息
2.查找姓名前边是SM、后边是TH、中间有一位不确定的员工信息
3.查找姓名总共有五位的员工信息
4.查找姓名前边是S、后边是H、中间有三位不确定的员工信息
5.查找姓名前边是SMIT、最后一位不确定的员工信息
6.查找姓名不以S开头的员工信息
7.查找名字中带有A字母的员工信息
8.查找姓名总共有5位且首字母是A的员工信息
9.查找姓名是以A开头且倒数第二位是M的员工信息

SELECT * FROM emp WHERE ename LIKE 'S%';
SELECT * FROM emp WHERE ename LIKE 'SM_TH';
SELECT * FROM emp WHERE ename LIKE '_____';
SELECT * FROM emp WHERE ename LIKE 'S___H';
SELECT * FROM emp WHERE ename LIKE 'SMIT_';
SELECT * FROM emp WHERE ename NOT LIKE 'S%';
SELECT * FROM emp WHERE ename LIKE '%A%';
SELECT * FROM emp WHERE ename LIKE 'A____';
SELECT * FROM emp WHERE ename LIKE 'A%M_';

图太多了不截了,你们自己对对答案。

6.ANY 和 ALL 的区别

ANY(集合) --满足集合中的任意一个值即满足条件
ALL(集合) --满足集合中所有的值即满足条件
如>ANY(集合) --大于集合中的任意一个值即满足条件
<ANY(集合) --小于集合中的任意一个值即满足条件
ALL同理
例题:查询工资大于1000或者大于2000的员工信息

SELECT * FROM emp WHERE sal >ANY(1000,2000);

在这里插入图片描述

7.条件连接

上述都是只有一个条件的情况下,当我们的查询需要多个条件时,可以通过条件连接进行查询
AND OR
AND–并且,既要满足A条件,也要满足B条件
OR – 或者,满足其中一个条件即可
例题:
查询十号部门的工资大于1000的员工信息

SELECT * FROM emp WHERE deptno = 10 AND sal>1000;

在这里插入图片描述
例题:
查询10号部门的经理或者20号部门的职员

SELECT * FROM emp WHERE deptno = 10 AND job = 'MANAGER'
				  OR    deptno = 20 AND job = 'CLERK';

在这里插入图片描述

注意:当AND与OR都有的时候,优先执行AND,后执行 OR,有括号先执行括号

练习题:
1.查询薪资超过1000并且小于3000的员工信息(2种)
2.查询部门编号是10号或20号的员工信息(2种)
3.查询岗位是销售SALESMAN,并且奖金超过400的员工信息
4.查询20号部门的经理
5.查询所有20号部门的员工或岗位是MANAGER的员工信息
6.查询10号部门的部门经理或20号部门的分析师ANALYST
7.查询10号部门的员工、30号部门的经理及所有的分析师ANALYST

SELECT * FROM emp WHERE sal>1000 AND sal<3000;
SELECT * FROM emp WHERE sal BETWEEN 1000 AND 3000;
SELECT * FROM emp WHERE deptno = 10 OR deptno = 20;
SELECT * FROM emp WHERE deptno IN(10,20);
SELECT * FROM emp WHERE job = 'SALESMAN' AND comm >400;
SELECT * FROM emp WHERE job = 'MANAGER' AND deptno = 20;
SELECT * FROM emp WHERE deptno = 20 or job = 'MANAGER';
SELECT * FROM emp WHERE deptno = 10 AND job = 'MANAGER'
					OR  deptno = 20 AND job = 'ANALYST';
SELECT * FROM emp WHERE deptno = 10  AND job= 'CLERK'
					OR  deptno = 30 AND job = 'MANAGER'
					OR job = 'ANALYST';

注意哈 between and 左右是闭合的,包括1000跟3000,所以结果会有不一样,具体用什么看使用的时候。不放截图了太多了。

排序查询

SQL排序查询

分组查询

SQL分组查询及完整的查询语句

完整的查询语句

SQL分组查询及完整的查询语句


DML–数据操纵语言

DML数据操纵语言

DDL–数据定义语言

未更新

dcl–数据控制语言

未更新

tcl–事务控制语言

未更新

  • 35
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值