编程学习记录13:Oracle数据库,表的查询

  表达查询是数据库中最常用的操作,最基本的语句为 SELECT <列名、值、函数> FROM <表名>

  当在 SELECT 后使用 * 即表示所查询表中的所有列,如SELECT * FROM emp 就会查出emp表中的所有数据

  如果不想要输出所有列,需要在 SELECT 后面加上想要获得的列名,如 SELECT ename, eno FROM emp 就会查出emp表中所有数据的ename值和eno值

  如果不想输出所行,需要在表名后加上 WHERE <条件>  ,如 SELECT * FROM emp WHERE eno < 50 就会输出eno小于50的所有数据

   

  有时候我们可能需要同时查询多个表中的数据,这时候就需要用到表的连接

  表的连接可以分为以下几种:

  1、笛卡尔积:没有连接条件,是多个表中数据所有可能组合的集合

    SELECT * FROM emp e, dept d

  2、内连接:通过标间相同的字段来进行连接,如可以通过部门编号把员工信息与部门信息连接起来

    SELECT * FROM emp e, dept d WHERE e.deptno = d.deptno

  3、外连接:也是通过相同的字段来连接,但会输出不满足连接条件的数据,如查看考试成绩信息但有些人没有参加考试

    SELECT * FROM emp e LEFT JOIN(左外链接,右外连接为RIGHT JOIN) dept d ON e.deptno = d.deptno

  4、自连接:本表与本表进行连接

    SELECT * FROM emp e1, emp e2 WHERE e1.deptno = e2.deptno

  5、自然连接:不同表中相同列名的数据进行等值连接

 

  有些时候我们可能要用到其他表中的一些值作为条件,就需要用到子查询

  SELECT * FROM emp WHERE e.deptno = (SELECT deptno FROM dept WHERE dname='财务部')

  就可以查到所有财务部的员工信息类

 

  当我们需要统计一些数据时,如总分、平均分、成绩,就需要用到 聚合函数 和 GROUP BY

  SELECT deptno, avg(sal) FROM emp GROUP BY deptno

  可以查询到每个部门的平均工资

  当需要在条件中使用聚合函数时,需要用到 HAVING 而不是 WHERE

  SELECT deptno FROM emp GROUP BY deptno HAVING avg(sal) > 3000

  可以查询到评价工资大于3000的部门编号

 

  当我们需要进行分页查询时,就需要对数据进行排列和截取

  ORDER BY <列名> [ASC | DESC] 可以根据列进行升序(ASC 默认)和降序(DESC)排序,如果GROUP BY 后有多个列名,那会从左到右依次排序,如 ORDER BY score DESC, id 就会先根据score降序,如果 score 有相同数值再根据 id 在score相同的情况下升序

  如果要进行分页截取,那么就得先获得列的列数,可以用 ROWNUM 来获得

  SELECT ROWNUM, ename FROM emp

  

posted @ 2019-07-26 15:41  HomuraT  阅读(189)  评论(0编辑  收藏  举报