Oracle数据系列(四)、高级查询2

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。Oracle数据系列(四)、高级查询2,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

第四章、Oracle高级查询2

学习目标

在这里插入图片描述

4.1、模糊查询LIKE

  • 查询时,字段内容并不一定与查询内容完全匹配,只要字段含有这些内容就行。
    #查询以李姓开头的员工信息
    select * from emp where ename like '李%';
    

4.2、模糊查询BETWEEN-AND

  • 把某一字段中内容在特定范围内的记录查询出来。
    #查询年龄在18到20之间的员工信息(包括18和20)
    select * from emp where age between 18 and 20; 
    #等同于in查询
    select * from emp where age in (18,19,20);
    #还可以是or查询
    select * from emp where age=18 or age=19 or age=20;
    
  • 例如查询学生成绩在60到80之间的学生ID
    在这里插入图片描述

4.3、模糊查询IN

  • 把某一字段中内容与所列出的查询内容列表匹配的记录查询出来。
    #查询员工年龄在18或者20或者22的员工信息
    select * from emp where age in (18,20,22);
    #等同于OR查询
    select * from emp where age=18 or age=20 or age=22;
    
  • 例如查询地址在北京或者广州或者上海的学生姓名:
    在这里插入图片描述

4.4、分组查询GROUP BY

  • 单列分组查询
    如下图分析:
    要将每一门课学生成绩去平均值:
    在这里插入图片描述
    select CourseID,avg(Score) 课程平均成绩 from Score group by CourseID;  
    

    在这里插入图片描述

  • 多列分组查询
    分析如下:
    在这里插入图片描述

小贴士:
如果使用group by进行分组查询,那么在select后的查询字段,除了使用聚合函数外的字段,其他字段要么放到group by后边,要么也使用聚合函数,要么就不查询这个字段,否则会不符合分组查询规范。

  • 案例分析
    在这里插入图片描述
  • 为了防止StudentID和CourseID的组合出现重复,需要对StudentID和CourseID都进行分组
    在这里插入图片描述
    查询结果:
    在这里插入图片描述
  • 在以上统计内部测试成绩的基础上,如果只想查看补考同学的成绩
  • 需要增加附加条件,也就是再上上图没分组的情况下,进行分组,并且要求CourseID出现一次以上(或者说成绩有一个以上),说明是有补考成绩,也就是补考的同学
    在这里插入图片描述

小贴士:
此处的HAVING是对查询结果进行条件过滤,group by后不可以使用where条件语句,只可用having。

4.4.1、分组查询对比

  • where字句
    从数据源中去掉不符合其搜索条件的数据,数据源也可以简单理解为要查询的数据表。
  • group by字句
    搜集数据行到各个组中,统计函数为各个组计算统计值。
  • having字句
    去掉不符合其组搜索条件的各族数据行
  • 三者使用顺序
    在这里插入图片描述

4.6、多表连接查询

  • 以表emp2为例
    在这里插入图片描述
  • 内连接(INNER JOIN)
    --内连接
    select empno,ename,dname from emp2 e inner join dept d on(e.deptno=d.deptno);
    --等同于内连接
    select empno,ename,dname from emp2 e,dept d where e.deptno=d.deptno;
    

    查询结果:
    在这里插入图片描述

  • 外连接
  • 左外连接(LEFT JOIN)
    --左外连接(以左表为基准表)select empno,ename,dname from emp2 e left join dept d on(e.deptno=d.deptno);

    查询结果:
    在这里插入图片描述

红框中的zs员工信息部门编号为空,所以没有与之对应的部门名称,然后在左外连接中显示了zs的编号和姓名,就是因为左外连接的机制是以左表emp2为基准表做查询的。

  • 右外连接(RIGHT JOIN)
    --右外连接(以右表为基准表)
    select empno,ename,dname from emp2 e right join dept d on(e.deptno=d.deptno);
    

    查询结果:
    在这里插入图片描述

在查询结果中的最右列的最后一行,OPERATIONS部门没有对应的员工(在emp2表中可以看到),然后这一行却显示了,就是因为右外连接是以右表dept为基准表做的查询。

总结:

可以理解为就是以哪个表为基准表,在外连接查询结果中,基础表中的数据即使没有外键关联,也会被查询出来!!!

4.7、额外知识点补充

(+)作用为取反表为基准表

--((+)加在右表,表示以左表为基准表)
--((+)加在左表,表示以右表为基准表)
select empno,ename,dname from emp2 e,dept d where e.deptno=d.deptno(+);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/189497.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!