Oracle-28-子查询之多行子查询&子查询之多列子查询

一、子查询的基本类型之多行子查询

(1)使用IN操作符进行多行子查询。(总结:IN操作符后可用多行子查询)

比如:查询各个职位中工资最高的员工信息。

SQL>select ename, job, sal from emp where salin (select max(sal) from emp group by job);——单列子查询

SQL>select ename, job, sal from emp where (sal,job)in (select max(sal), job from emp group by job);——多列子查询

(2)使用exists操作符进行多行子查询。(总结:exists操作符后可用多行子查询)

引入exists的目的:在一些情况下,只需要子查询返回一个真值或是假值。如果只考虑是否满足判断条件,而数据本身并不重要,可以使用exists操作符来定义子查询。

比如:

SQL>select empno, ename, sal from emp where exists (select * from dept where deptno =‘40’)

【注意】以上SQL语句如果子查询(select * from dept wheredeptno = ‘40’)有结果,那么exists前面的语句会执行,如果exists后面的没结果,那么其前面的不会执行。

(3)使用ALL操作符进行多行子查询。(总结:all操作符后可用多行子查询)

比如:

SQL>select empno, ename, sal, job from emp
where 
sal < all (select avg(sal) from emp group by job);

【注意】all操作符比较子查询返回列表中的每一个值。

<all为小于最小的

>all为大于最大的

=all无意义,一般不写。

解释:子查询(selectavg(sal) from emp group by job)是计算每个职位的平均工资,那么不同职位的平均工资不同,有高有低,所以<all是小于最小的,即小于最低平均工资。同理>all是大于最大的, 即大于最高平均工资。

(4)使用ANY操作符进行多行子查询。(总结:any操作符后可用多行子查询)

比如:

SQL>select empno, ename, sal, job from emp
where 
sal > any (select avg(sal) from group by jon)

【注意】any操作符后接多行子查询返回列表中的每一个值。

<any为小于最大的

>any为大于最小的。

例1:练习all操作符后接多行子查询。

解:当前sc表数据:

现在将同一门课程分为一组,计算均分,即按照cno值相同分组求平均:

用all操作符后接多行子查询,查看小于所有均分中最小值(79.25)的学生信息:

用all操作符后接多行子查询,查看大于所有均分中最大值(80.32)的学生信息:

例2:练习any操作符后接多行子查询。

解:当前sc表数据:

现在将同一门课程分为一组,计算均分,即按照cno值相同分组求平均:

用any操作符后接多行子查询,查看小于所有均分中最大值(80.32)的学生信息:

用any操作符后接多行子查询,查看大于所有均分中最小值(79.25)的学生信息:

二、子查询的基本类型之多列子查询

多列子查询要返回多列。

比如:查询哪些员工的工资为所任职位中最高的。

SQL>selecte mpno, ename, sal, job from emp where (sal, job) in (select max(sal), job from emp group by job);

【总结】

单列子查询就是子查询中只有1个列名,如(selectavg(sal)from emp group by job);多列子查询就是子查询中不止1个列名,如(selectmax(sal),
job
from emp group by job)。

时间: 2024-10-15 01:25:28

Oracle-28-子查询之多行子查询&子查询之多列子查询的相关文章

oracle[insert 时报错: 单行子查询返回多行]

-- 错误的写法 insert into t_b_partner_vehicle(id, partner_id, vehicle_id) (seq_t_b_partner_vehicle.nextval,121, (select id from t_b_car_info where org_id in(1441,1427))) -- Error 单行子查询返回多行 -- 正确的写法 insert into t_b_partner_vehicle(id, partner_id, vehicle_i

sql的基础语句-单行函数,dual,数字函数,日期函数,表连接,集合运算,分组报表,单行子查询,多行子查询

3. 单行函数 3.1 转换函数 select ascii('A'),chr(65) from dual; select to_char(1243123),1231451 from dual;靠左边的就是字符串,靠右边的就是数字 select to_char(123512a121) from dual;   --错误的写法,没有引号表示数字,但是数字里面包含了字母,不合法的输入值 select to_number('123141211') from dual; select to_number(

1.子查询知识体系,单行子查询,多行子查询

 1查询工资比scott高的员工信息 A 第一步:查询出scott这个员工的工资 select sal from emp where ename = 'SCOTT'; B 第二步:查询出工资比scott高的员工信息 select * fromemp where sal >3000; 总结: 子查询的本质:多个select语句的嵌套 2:子查询的知识体系搭建 A 合理的书写风格 B 子查询外面()不要忘记 C 子查询和主查询可以查询的是同一张表,也可以不是同一张表 只要子查询返回的结果,主查询

mysql常用基础操作语法(十)~~子查询【命令行模式】

mysql中虽然有连接查询实现多表连接查询,但是连接查询的性能很差,因此便出现了子查询. 1.理论上,子查询可以出现在查询语句的任何位置,但实际应用中多出现在from后和where后.出现在from后的子查询结果通常是多行多列的,充当临时表:而出现在where后的子查询结果通常是单行单列,充当条件: 2.where后作为条件的子查询多与"="."!=".">"."<"等比较运算符一起使用.结果虽然通常是单行单列,但

sql语句查询后几行数据并倒着排列

$conn = mysql_connect("数据库地址","用户名","密码"); if(!$conn) { die("mysql conn failed"); } else{ mysql_query("SET NAMES 'utf8'"); mysql_select_db("数据表",$conn); if(!$conn) { die("database selected f

oracle 与sql serve 获取随机行数的数据

Oracle 随机获取N条数据    当我们获取数据时,可能会有这样的需求,即每次从表中获取数据时,是随机获取一定的记录,而不是每次都获取一样的数据,这时我们可以采取Oracle内部一些函数,来达到这样的目的1) select * from (select * from tablename order by sys_guid()) where rownum < N; 2) select * from (select * from tablename order by dbms_random.va

Oracle执行计划并取得数据行

一个执行计划就是告诉Oracle对于每一个表对象使用哪种访问方法以及什么联接和联接顺序来将多个表联接到一起的一系列命令.执行计划中的每个步骤产生一个行源,然后与另外一个行源相联接,直到所有对象都被访问和联接. Oracle中的查询计划将会完成解析,绑定,执行和提取的步骤. Oracle每次访问数据块的时候,Oracle都会从该块中取出数据行然后在一次回路中返回给客户端.一次返回的行数是一个可配置的值称为列大小.列大小是一个网络回路中一次可以传输的可能行数.而列大小的设置可以是通过编程改变.在SQ

MYSQL获得查询记录的行号

对于获得查询记录的行号这一功能,Oracle 中可以使用标准方法(8i版本以上),也可以使用非标准的ROWNUM,MS SQL Server 则在 2005 版本中提供了ROW_NUMBER()函数.但在 MySQL 中似乎还没有这样的系统自带功能 = =!真是悲剧啊~ 好在民间的力量总是强大的,我们可以自己构造一个类似的功能! 表 a: UID Money 2 444 1 222 3 555 4 6666 想要以Money排序取得排行号:SQL文如下: Select UID,(@rowNum:

父级是relative,子级为absolute的情况下,子级宽度自适应

经常见到这种排版,父级的css 有relative,而子级的css含有absolute,这样,子级宽度自适应的话是不会超过父级的宽度. 解决办法有两种: 1.给子级设置宽度. 2.给子级设置css属性 white-space: nowrap;