欢迎来到天天文库
浏览记录
ID:38347056
大小:37.50 KB
页数:4页
时间:2019-06-10
《表的高级查询》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、子查询通过把一个查询的结果作为另一个查询的一部分。具体是第一个查询可以作为第二个查询的一部分出现在第二个查询的条件中,这就是子查询。第一个查询是子查询,第二个查询是主查询。在select语句中嵌套了另一个select语句1)where子句中嵌套子查询2)用子查询的结果作为字段来出现3)子查询出现在from子句中--1)where子句中嵌套子查询,执行顺序是:先执行子查询再执行主查询例1:找出工资高于公司平均工资的所有员工?select*fromempwheresal+nvl(comm,0)>(selectavg(sal+nvl(comm
2、,0))fromemp);例2:高于部门30中员工最高工资的其他员工?select*fromempwheresal+nvl(comm,0)>all(selectsal+nvl(comm,0)fromempwheredeptno=30);例3:列出受雇日期早于其直接上司的所有员工。select*fromempewherehiredate<(selecthiredatefromempwhereempno=e.mgr);例4:列出薪金高于部门30中员工的薪金的所有员工的姓名和薪金。selectename,salfromempwheresal>
3、all(selectsalfromempwheredeptno=30);例5:查询薪水比’MANAGER’的还高的员工信息。select*fromempwheresal>any(selectsalfromempwherejob=’MANAGER’);--2)用子查询的结果作为字段来实现先执行主查询再执行子查询例1:找员工姓名和直接上级的名字selectenameas员工姓名,(selectenamefromempwhereempno=a.mgr)as经理名字fromempa;例2:显示部门名称和人数selectdname,(select
4、count(*)fromempwheredeptno=a.deptno)as人数fromdepta;例3:列出所有部门的详细信息和部门人数。selecta.*,(selectcount(*)fromempwheredeptno=a.deptno)as人数fromdepta;3)from中加子查询通常的查询中,FROM子句后面都是具体的表名。然而,我们也可以在FROM后面跟上一个子查询作为中间数据结果集topn问题找到工资最低的前两位员工select*from(select*fromemporderbysalasc)whererownum
5、<=2;1)rownum对于等于某值的查询条件如果找到学生表中的第一条学生的信息,可以使用rownum=1作为条件,使用rownum=2结果查不到数据。因为rownum都是从1开始的,但是1以上的自然数在rownum作等于判断时认为都是false条件,所以无法查到rownum=n(n>1的自然数)。2)rownum对于大于某值的查询条件如果想找到从第二行记录以后的记录,当使用rownum>2是查不出记录的,原因是由于rownum总是从1开始的伪列,Oracle认为rownum>n(n>1的自然数)这种条件依旧不成立,所以查不到记录。可以
6、使用以下的子查询方法来解决。注意子查询中的rownum必须要有别名,否则查不出记录来,这是因为rownum不是某个表的列。3)rownum对于小于某值的查询条件rownum对于rownum1的自然数)的条件认为是成立的,所以可以找到记录。实现分页查询-----希望每次页面显示的时候都只查询回需要的记录查询雇员表中排在第6~9位置上的雇员。selectename,salfrom(selectrownumasnum,ename,salfromemp)wherenumbetween6and9;高级查询多表联合查询:通过连接可以建立多
7、表查询,多表查询的数据可以来自多个表,但是表之间必须有适当的连接条件。为了从多张表中查询,必须识别连接多张表的公共列。一般在where子句中用比较运算符指明连接的条件。若有N个表,则关联条件一定有N-1个。两个表的连接有如下几种方式:内连接:1)相等连接两个表具有相同意义的列,可以建立相等连接条件2)不等连接外连接:1)左外连接2)右外连接3)全外连接自连接:相等连接:通过两个表具有相同意义的列,可以建立相等连接条件。使用相等连接进行两个表的查询时,只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中。在雇员表emp中是没有雇员
8、的部门名称信息的,只有雇员所在部门的编号,部门的信息在另外的部门表dept中,两个表具有相同的部门列deptno可以通过该列建立相等连接。【训练1】显示雇员的名称和所在的部门的编号和名称。执行以下查询:SE
此文档下载收益归作者所有