专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

Oracle数据库之高级查询三 sql高级查询

ins518 2024-10-16 12:33:16 技术文章 12 ℃ 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

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表