李兴华Oracle学习笔记.doc

  1. 1、本文档共61页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
李兴华Oracle学习笔记

图表 1 多表查询的基本语法 查一张以上的表,就叫做多表查询 例子:查询出雇员名称,部门名称和部门所在地的(一般多表查询要用别名) 统计记录数: 查询emp有多少条纪录 左右连接(重点) select e.empno,e.ename,d.deptno,d.dname,d.loc from emp e,dept d where e.deptno=d.deptno; 部门一共四个,这里只查询出三个,因为在雇员表中没有指定40部门的雇员,所以在消除笛卡尔乘机的时候没有条件符合40,如果喜欢40部门显示出来,就要用左右连接了。 select e.empno,e.ename,d.deptno,d.dname,d.loc from emp e,dept d where e.deptno(+)=d.deptno; (+)在左边,表示以右边的表为准,表示右链接。 40部门出来了,所以此时就用到了有连接,证明以下规律 (+)在左表示右连接 (+)在右表示左连接 .SQL:1999对SQL的支持(了解) 范例:交叉连接(cross join)产生笛卡尔积 select * from empt CROSS JOIN dept; 查询结果 产生笛卡尔积 CREATE TABLE EMP10 AS SELECT * FROM EMP WHERE DEPTNO=10; select * from emp NATURAL JOIN dept; 自动进行匹配 范例:USING子句,直接关联的操作列 select * from emp e JOIN dept d USING (deptno) where deptno=30; 把两张表的详细信息进行打印输出 范例:ON子句 自己编写连接条件 select * from emp e JOIN dept d ON (e.deptno=d.deptno) where e.deptno=30; 范例:左连接(左外连接)右连接(右外连接)LEFT JOIN RIGHT JOIN 组函数和分组统计(重点) 组函数 在SQL常用组函数有如下几个: COUNT()求全部记录数 MAX()求最大记录数 MIN()求最小记录数 AVG()平均 SUM()求和 分组统计 Group by select deptno,COUNT(empno) from emp GROUP BY deptno; 算出部门表的平均工资: select AVG(sal) from emp ; 算出每个部门的平均工资: Select deptno,AVG(sal) from emp ; ?之所以会出现这个错误是因为数据库不知道怎样在结果集中处理列。考虑一下:这个查询既试图使用AVG聚合函数对多 行记录进行操作,却又试图从每行中获得列的值;这两个操作是不可能同时完成的。此时必须提供一个GROUP BY子句告诉数据库将列相同的行分组在一起,然后数据库就可以将这些组中的行传递给AVG函数。 警告: 如果查询中包含聚合函数,而所选择的列并不在聚合函数中,那么这些列就必须在GROUP BY子句中。 select d.dname,count(e.empno) from dept d,emp e where d.deptno=e.deptno GROUP BY d.dname; 要求查出平均工资大于2000的部门编号和平均工资 select deptno,AVG(sal) from emp WHERE AVG(sal) 2000 GROUP BY deptno; ?之所以会出现这个错误是因为WHERE子句只能用来对单行而不是行组进行过滤。要过滤行组,可以使用HAVING子句。’SALESMAN’ select * from emp where jobsalesman; 2.按工作分组同时求出工资的总和 Select job,SUM(sal) from emp WHERE job’SALESMAN’ GROUP BY job; 3.对分组条件进行限制 Select job,SUM(sal) from emp WHERE job’SALESMAN’ GROUP BY job HAVING SUM(sal)5000; 4.使用排序,按升序排列 Select job,SUM(sal) su from emp WHERE job’SALESMAN’ GROUP BY job HAVING SUM(sal)5000 order by su; 分组的简单原则: 只要一列上存在重复的内容才考虑用分组 注意:分组函数可以嵌套使用,但是在组函数嵌套的时候不能再出现分组条件的查询语句 范例:求出平均工资最高的部门 错误代码: Select deptno,MAX(AV

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档