电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

Oracle二VIP免费

Oracle二_第1页
1/12
Oracle二_第2页
2/12
Oracle二_第3页
3/12
Oracle(二)作者:IT电子教育门户来源:http://www.mldn.cn最后修改于:2008-11-49:21:00点击开始打印页面地址是:http://www.mldn.cn/articleview/2008-11-4/article_view_2869.htm1、课程名称:OracleORACLE的经典的查询案例。多表查询、分组统计、子查询。数据库更新操作2、知识点2.1、上次课程的主要知识点1、SQL的基础语法SELECT要显示的列、内容或全部column|expression|*FROM表名称别名WHERE多个查询条件ORDERBY排序的列DESC|ASC2、重点函数:NVL、DECODE、字符串、to_char、to_number、to_date2.2、本次预计讲解的知识点1、多表查询,SQL:1999语法对多表查询的支持2、分组统计及统计函数3、子查询,并结合多表查询,分组统计做复杂查询3、具体内容3.1、多表查询一张以上的表一起查询,就称为多表查询。例如:要一起查询雇员表和部门表的全部信息。那么此时就可以按照以下的语法进行编写:SELECT*FROMemp,dept;但是如果直接运行以上的程序会发现问题:发现显示的记录有56条?但是实际上雇员表一共才有如:SELECTCOUNT(*)FROMemp;SELECTCOUNT(*)FROMdept;分别求出雇员表和部门表,发现雇员表中只有14条记录,而部门表只有4条记录,但是如果两个放在了一起,则会出现56条记录。即:14×4=56?那么对于以上的情况,在数据库中有一个名称——笛卡尔积。但是此结果并不是用户所需要的,用户所需要看到的就是全部的雇员信息或部门信息。只有14个雇员就应该只显示14条记录。那么此时就可以通过对关联列的条件限制来去除笛卡尔积。在雇员表中有一个deptno的字段。在部门表也有一个deptno的字段。即:可以通过以下的方式去掉所有的重复数据:SELECT*FROMemp,deptWHEREemp.deptno=dept.deptno;以上的程序已经符合查询的标准,但是存在问题,如果现在要查询的表名称过长,则在编写查询列的时候肯定要重复写上表名称。所以一般在多表查询的时候都习惯于为表起一个别名。例如:现在要求查询出雇员的编号、雇员姓名、部门的编号、部门名称、部门位置:SELECTe.empno,e.ename,d.deptno,d.dname,d.locFROMempe,deptdWHEREe.deptno=d.deptno;例如:要求查询出每个雇员的姓名、雇员的工作、雇员的直接上级领导的姓名。SELECTe.ename,e.job,m.enameFROMempe,empmWHEREe.mgr=m.empno;例如:要求查询出每个雇员的姓名、工作、领导姓名、部门名称、雇员工资。SELECTe.ename,e.job,m.ename,d.dname,e.salFROMempe,empm,deptdWHEREe.deptno=d.deptnoANDe.mgr=m.empno;思考:现在要求查询出每个雇员的姓名、工资、部门名称、工资在公司的等级(salgrade)、领导的姓名,领导的工资在公司的等级。SELECTe.ename,e.sal,d.dname,s1.grade,m.ename,s2.gradeFROMempe,empm,deptd,salgrades1,salgrades2WHEREe.mgr=m.empnoANDe.deptno=d.deptnoANDe.salBETWEENs1.losalANDs1.hisalANDm.salBETWEENs2.losalANDs2.hisal;进一步思考:现在要求按照以下的样式显示工资等级:•1:第5等工资•2:第4等工资•3:第3等工资•4:第2等工资•5:第1等工资SELECTe.ename,e.sal,d.dname,decode(s1.grade,1,'第五等工资',2,'第四等工资',3,'第三等工资',4,'第二等工资',5,'第一等工资'),m.ename,decode(s2.grade,1,'第五等工资',2,'第四等工资',3,'第三等工资',4,'第二等工资',5,'第一等工资FROMempe,empm,deptd,salgrades1,salgrades2WHEREe.mgr=m.empnoANDe.deptno=d.deptnoANDe.salBETWEENs1.losalANDs1.hisalANDm.salBETWEENs2.losalANDs2.hisal;观察以下SQL的查询结果:SELECT*FROMdept;发现部门表中一共有四个部门,但是在执行以下SQL语句之后再观察:SELECT*FROMempe,deptdWHEREe.deptno=d.deptno;发现在以上的查询结果中,并没有显示出40部门的信息,那么如果此时必须显示出40部门的话,则必须对表的连接进行设置——左连接、右连接。SELECT*FROMempe,deptdWHEREe.deptno(+)=d.deptno;以上代码在查询条件处的等号左边加入了一个“(+)”,那么此时表示的是右连接,以DEPT表为准。如果现在把“(+)”放到右边,则表示左连接,以emp表为准。SELECT*FROMempe,deptdWHEREe.deptno=d.deptno(+);默认的是以左边为标准进...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部