MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 数据库 / 正文

Oracle数据库之高级查询三

2024-11-26 17:36 huorong 数据库 5 ℃ 0 评论

本节讨论关联查询和子查询的内容,Oracle子查询就是嵌套查询,select 查询的结果作为另外一个select、update或delete语句的条件,可以分为单行子查询和多行子查询。

Oracle子查询

select 列名 from 表名 
where 表名.列名1 in (select 表名1.列名1
																																			from 表名1 
                                                                      where 表名1.列名2 = 值1);
  • 内层select的查询结果作为外层select的条件,返回一条或者多条查询结果
  • 用in关键字表示外层条件值在in后的备选条件中

此外,ANY和ALL值和关系运算符接收子查询的多行结果

select t.列名 from 表名 t where t.列名1>any(值1,值2,值3......);
select t.列名 from 表名 t where t.列名2>all(值1,值2,值3......);
  • ANY关键字:表示子查询结果当中的任意一个,即任意一个条件成立
  • ALL关键字:表示子查询中的所有结果。本例中比all中的最大值还大

关联查询

Oracle连接查询,包含内关联和外关联。外关联包括:左外关联、右外关联和全外关联。

内连接

select * from 表名1 a, 表名2 b where a.列名 = b.列名;
  • 连接条件中使用等于号(=)运算符比较被连接列的列值,查询结果中列出被连接的所有列
  • 除等于运算符(=)以外,其它比较运算符可用于内连接

外连接

select * from 表名 a left join 表名1 b on a.列1 = b.列1;
  • 左连接(left join)中左表记录不变,把右表与左表联结字段相等的记录挂在左表上,没挂上的部分为null
select * from 表名1 a right join 表名2 b on a.列1 = b.列1;
--右连接(利用(+)在左边)另外一种写法
select * from 表名1 a,表名2 b where a.列1(+)=b.列1;
  • 右联接(right join)中右表记录不变,把左表联结字段相等的记录挂在右表上,没挂上的部分为null
  • 右联结(+)的另一种写法
select * from 表名1 a full join 表名2 b on a.列1 = b.列1;
  • 全连接(full join)中左右记录不变,左表无右表部分相关字段为null,右表无左表部分相关字段为null

Tags:oracle查询库

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言