数据库-Oracle 连接查询和子查询

多表连接查询

当需要获取的数据分布在多张表中,考虑使用联合查询

一、SQL99的多表连接查询

注意:

  1. 仍然可以给表添加别名
  2. 如果使用on或者using关键字的对结果进行筛选,必须使用inner join作用表与表的连接,其中inner可以省略。
  3. 外连接的outer关键字可以省略不写
  4. 依然可以继续使用分组,having,排序等

交叉连接

笛卡尔积:使用cross join 关键字,其效果等同于在两个表进行连接时未使用where子句限定连接条件

可以使用where条件从笛卡尔积中选出满足条件的记录

语句:select 内容 from 表名 cross join 

  • select dept.deptno,dname,ename,job from dept cross join emp;

自然连接

问题提出:只想按照部分字段结果筛选

解决方案:使用using关键字

使用关键字 natural join 

语法:select 内容 from 表名 natural join 表名

natural join基于两个表中的全部同名列建立连接

  • 从两个表中选出同名列的值均对应相应的列 
  • 如果两个表中同名列的数据类型不同,则出错
  • 不允许在参照列上使用表名或者别名作为前缀
  • 自然连接的结果不保留重复的属性

自然连接会自动使用多表中所有相同字段(不仅值相同,名字也要相同)进行筛选

select empno,ename,sal,deptno,dname 

from emp natural join dept 

where deptno=10;

using连接

如果不希望参照被连接表的所有同名列进行等值连接,自然连接将无法满足要求,可以在连接时使用using子句来设置用于等值连接的列(参照劣)名。

using子句引用的列在SQL任何地方不能使用表名或者别名做前缀。

使用using关键字可以指定字段进行连接查询,但是必须是同名字段

使用:select 内容 from 表名 inner join 表名 using(字段名,字段名,......);

 查询员工及员工所在部门信息

  • select * from deptno inner join emp using(deptno);

on连接

问题提出:如果想按照字段名不同,但是值相同进行等值筛查怎么办?

解决:使用on关键字进行自定义连接条件筛选(等值筛选,不等值筛选)

<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值