十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
xml 类型的时候可以使用any 关键字和子查询,返回的结果是xml结构的;
公司主营业务:网站制作、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出咸宁免费做网站回馈大家。
select * from (
select times_purchased as "Puchase Frequency", state_code
from customers t
)
pivot xml
(
count(state_code)
for state_code in (select state_code from preferred_states)
)
order by 1
一、
伪列就像Oracle中的一个表列,但实际上它并未存储在表中。伪列可以从表中查询,但是不能插入、更新或删除它们的值。常用的伪列:rowid和rownum。
Rowid:数据库中的每一行都有一个行地址,Rowid伪列返回该行地址。可以使用Rowid值来定位表中的一行。通常情况下,Rowid值可以唯一地标识数据库中的一行。
Rowid伪列有以下重要用途:
1)能以最快的方式访问表中的一行;
2)能显示表的行是如何存储的。
3)可以作为表中行的唯一标识。
如:SQL
select
rowid,ename
from
emp;
Rownum:对于一个查询返回的每一行,Rownum伪列返回一个数值代表的次序。返回的第一行的Rownum值为1,第二行的Rownum值为2,依此类推。通过使用Rownum伪列,用户可以限制查询返回的行数。
如:SQLselect
*
from
emp
where
rownum11;
从EMP表中提取10条记录
二、
oracle中不支持select
top
n
from
tablename
查询,但是通过
order
by
和
rownum
组合可以实现此功能。例如:SELECT 列名1...列名n FROM
(SELECT 列名1...列名n FROM
表名
ORDER
BY
列名1...列名n)
WHERE
ROWNUM
=
N(抽出记录数)
ORDER
BY
ROWNUM
ASC
SELECT B.DEPTNO,COUNT(B.ENAME) FROM EMP B,(Select DEPTNO,AVG(SAL) SAL_A FROM EMP GROUP BY DEPTNO) A WHERE B.SAL A.SAL_A AND A.DEPTNO = B.DEPTNO
试一下,看看是否好用。
不管在什么情况下子查询能够保证放回值是1=1行,则可采用单行比较符:=、、、=、=等;
否则要采用多行比较符:IN、 ANY 、 ALL、 ANY、 ALL等。
举例说明:
1、单行子查询 -- 查询部门在'NEW YORK'的所有雇员信息。
SELECT * FROM emp WHERE deptno=(SELECT deptno FROM dept WHERE loc='NEW YORK');
语句中子查询SELECT deptno FROM dept WHERE loc='NEW YORK'的返回确定只有一个。
2、多行子查询 -- 查询工资低于2000的雇员所属部门名称。
SELECT * FROM dept WHERE deptno IN (SELECT deptno FROM emp WHERE sal2000);
语句中子查询SELECT deptno FROM emp WHERE sal2000佣金小于2000的部门不能确定有几个,因此,采用多行比较符IN。
每个部门俯场碘渡鄢盗碉醛冬互大于所有人平均工资的员工:
Select BM,YG From TB WHERE Salary(Select Avg(Salary) From TB)
每个部门大于所在部门所有人平均工资的员工:
Select BM,YG From TB
Join (Select BM,Avg(Salary) as AvgSalary From TB
Group By BM) As Temp
On TB.BM=Temp.BM
where SalaryTemp.AvgSalary
SELECT DEPT.DNAME, EMP.ENAME, (EMP.SAL + NVL(EMP.COMM, 0)) AS SC
FROM EMP,
DEPT,
(SELECT DEPT.DEPTNO AS D, AVG(EMP.SAL + NVL(EMP.COMM, 0)) ESC
FROM DEPT, EMP
WHERE EMP.DEPTNO = DEPT.DEPTNO
GROUP BY DEPT.DEPTNO) T
WH俯场碘渡鄢盗碉醛冬互ERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.DEPTNO = T.D
AND (EMP.SAL + NVL(EMP.COMM, 0)) T.ESC;
select a.empname, b.deptname ,a.salary
from emp as a,
( select d俯场碘渡鄢盗碉醛冬互eptid,deptname ,avg(salary) c from dept group by deptid,deptname ) b
where a.deptid=b.deptid
and a.salary b.c
一、单行子查询:
1、单行子查询指在子查询中只返回单行值,这种子查询需要使用单行比较运算符,包括=、、=、、=、。
2、单行子查询出现在WHERE子句中,如下所示:
3、单行子查询中有分组函数,要求分组函数返回的是单行数据。如下图为查询出薪水比本部门平均薪水高的员工信息:
4、单行子查询出现在HAVING子句中,如下图为查询出平均薪水高于部门30最高薪水的部门信息。
二、多行子查询:
如果子查询返回了多行,则主查询中的比较操作符应该使用多行比较操作符。Oracle数据库中的多行比较操作符包括IN、ALL、ANY,其中ALL和ANY不能单独使用,需要配合单行比较操作符、=、、=一起使用。
1、多行子查询中使用IN:
IN后面是值的列表,只不过这里的值是子查询查出来的多个数据。如下图:
三、多行子查询中使用ANY操作符:
ANY操作符不能单独使用,必须和、等比较操作符一起使用。ANY表示大于列表中任何一个数据即为TRUE;ANY表示小于列表中的任何数据即为TRUE。具体实现如下图: