前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >oracle基础|oracle多表查询用法|什么是等值连接(inner join)|什么是不等值连接(between)|什么是左连接(left join)|什么是右连接(right join)

oracle基础|oracle多表查询用法|什么是等值连接(inner join)|什么是不等值连接(between)|什么是左连接(left join)|什么是右连接(right join)

作者头像
小小鱼儿小小林
发布2021-10-26 10:48:04
1.6K0
发布2021-10-26 10:48:04
举报
文章被收录于专栏:灵儿的笔记灵儿的笔记

目录

一、多表查询

概念

基本语法

笛卡尔积

连接查询分类

二、等值连接

练习:

三、不等连接

四、外连接

右外连接

语法:

意义

左外连接

语法

意义

自连接

语法

练习

五、集合连接

六、伪列

rownum 所能作的操作


一、多表查询

概念

所谓多表查询,又称表联合查询,即一条语句涉及到的表有多张,数据通过特定的连接进行联合显示。

基本语法

select column_name,.... from table1,table2 条件。。。。 select dept_id,name from s_emp,s_dept 在了解多表查询之前,我们得先了解一个概念:笛卡尔积

笛卡尔积

在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y. 假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。 在数据库中,如果直接查询俩张表,那么其查询结果就会产生笛卡尔积 例如: select * from s_emp,s_dept;

连接查询分类

为了在多表查询中避免笛卡尔积的产生,我们可以使用连接查询来解决这个问题. 连接查询分为: 1.等值连接 2.不等值连接 3.外连接 左外连接 右外连接 全连接 4.自连接


二、等值连接

利用一张表中某列的值和另一张表中某列的值相等的关系,把俩张表连接起来。 语法:

代码语言:javascript
复制
    select tb_name.col_name,tb_name.col_name,...
    from tb_name,tb_name,...
    where tb_name.col_name = tb_name.col_name
    and
          tb_name.col_name = tb_name.col_name
    ...

练习:

查看每个员工的id,last_name以及所属部门名称

代码语言:javascript
复制
select s_emp.id,last_name,s_dept.name
        from s_emp ,s_dept 
        where s_emp.detp_id = s_dept.id;

有时为了简化操作,或者表述更加清楚,可以给每张表起别名

代码语言:javascript
复制
 select e.id,e.last_name,d.name
        from s_emp e ,s_dept d
        where d.detp_id = d.id;

三、不等连接

使用的是除=以外的操作符号的多表查询 例如:使用between and select t1.col_name,t2.col_name from t1,t2 where t1.col_name between t2.col_name and t2.col_name;


四、外连接

当一个表的记录在另外一张表中不存在的时候,我们依旧需要显示,使用外连接即可。 外连接分为: 右外连接(right join/right outer join) 左外连接(left join/left outer join) 全外连接(full join/ full outer join)

右外连接

语法:

代码语言:javascript
复制
        select tb_name,col_name,...
        from tb_name1,tb_name2
        where 
        tb_name1.col_name (+)= tb_name2.col_name;
        
    or
    
        select tb_name,col_name,
        from tb_name1 right outer join tb_name2
        where .......

意义

右外连接表示右边表(=号右边的表)中的记录在左边表中不存在的时候,右边表的记录依旧显示。

代码语言:javascript
复制
  select c.id,c.name,e.last_name
    from s_customer c,s_emp e
    where c.id (+)= c.sales_rep_id;

左外连接

语法

代码语言:javascript
复制
select tb_name,col_name,...
    from tb_name1,tb_name2
    where 
    tb_name1.col_name = tb_name2.col_name(+);
    
    or
    select tb_name,col_name,...
    from tb_name1 left outer join tb_name2
    where 
    tb_name1.col_name = tb_name2.col_name(+);

意义

左外连接表示左边表(=号左边的表)中的记录在右边表中不存在的时候,左边表的记录依旧显示。


自连接

实质就是一张表当多张表用,即一张表中的某列的值取决于自己的某一列

语法

代码语言:javascript
复制
 select ...
    from tb_name t1,tb_name t2
    where t1.col_name = t2.ano_col_name

练习

查看每一个员工的经理名字

select e1.id,e1.last_name,e1.manager_id,e2.last_name from s_emp e1,s_emp e2 where e1.manager_id = e2.id;


五、集合连接

对查询结果集的操作。 union:将上下结果取并集,去除掉重复的记录(重复的只显示一次) union all:将上下结果全部显示

minus:取差集 A-B

intersect:取交集 前提条件是:两个结果集中查询的列要完全一致。


六、伪列

oracle中的伪列 rownum 伪列rownum,就像表中的列一样,但是在表中并不存储。伪列只能查询,不能进行增删改操作。它会根据返回的结果为每一条数据生成一个序列化的数字.rownum是oracle才有的伪列

rownum 所能作的操作

rownum 只能等于1 如果让其等于其他数 则查不到数据 例如: select last_name from s_emp where rownum=1

rownum 大于0 如果让其大于其他数 则查不到数据 例如: select last_name from s_emp where rownum>0 rownum 可以小于任何数 例如: select last_name from s_emp where rownum<7

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-10-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、多表查询
    • 概念
      • 基本语法
        • 笛卡尔积
          • 连接查询分类
          • 二、等值连接
            • 练习:
            • 三、不等连接
            • 四、外连接
              • 右外连接
                • 语法:
                • 意义
              • 左外连接
                • 语法
                • 意义
              • 自连接
                • 语法
                • 练习
            • 五、集合连接
            • 六、伪列
              • rownum 所能作的操作
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档