第四章 SQL查询 之连接{自然连接,内连接,外连接(左外连接,右外连接,完全连接)}
4.4 连接
自然连接
自然连接实际指定了搜寻条件。这里包括两部分的内容:首先,自然连接列必须同名,另外,所有同名列都将作为搜索条件。
自然连接所使用的关键字为natural join 。其连接原则为,两个数据源的共有列,并且具有相同列值。
结合与笛卡尔积的区别进行理解
自然连接与笛卡尔积的区别在于,笛卡尔积无论何时,都将获得两个数据表中所有记录的两两结合。而当两个数据表中存在同名列时,Oracle将同名列作为搜寻条件。相当于强制添加条件——where t1.column = t2.column。但是,当两个表不存在同名列时,Oracle不会添加任何搜寻条件,其效果相当于笛卡尔积。
例
teachers 表
student 表
自然连接teachers 和 student 表
select s.name,s.class,teacher_name,t.teacher_course from student s natural join teacher_couse t;
其中
- s.name
- s.class
- t.teacher_course
- teacher_name:不可以使用限定词,否则报错
等同于
select s.name,s.class,t.teacher_name,t.teacher_course from student s,teachers t where s.teacher_name=t.teacher_name;
-
内连接
自然连接使用两个表之间的公共列作为搜寻条件;而且要求公共列的值必须相等。这带来了极大的限制,因此,自然连接并不常用。而内连接突破了这两种约束。内连接可以自行指定连接列和连接条件。内连接运算的关键字为inner join.
例
- teachers 表
- student 表
内连接teachers表和student表
select s.id,s.name,s.class,s.teacher_name ,t.teacher_course from student s inner join teachers t on s.teacher_name=t.teacher_name;
内连接的inner join 中的inner 关键子可以省略
select s.id,s.name,s.class,s.teacher_name ,t.teacher_course from student s join teachers t on s.teacher_name=t.teacher_name;对于内连接,利用where 条件也可以实现相同的作用,但是:
在多于两表关联查询时
含有多个数据源时,例:A,B,C。此时使用where子句方式,from 子句中含有数据源:A,B,C;Oracle 在进行笛卡尔积运算时会进行优化,理想的笛卡尔积运算顺序为:AxBxC ,但是,使用where子句方式时,运算顺序可能会发生改变,得出不正确的结果。此时应使用内连接:
select * from A join B on …join c on …;
外连接
内连接所指定的两个数据源,处于平等的地位。而外连接不同,外连接总是以一个数据源为基础,将另外一个数据源与之进行进行条件匹配。即使条件不匹配,基础数据源中的数据总是出现在结果集中。那么,依据哪个数据源作为i基础数据源,便出现了两种外连接的方式——左(外)连接和右(外)连接。因为内连接没有左右之分,所以习惯上,将左外连接和右外连接简称为左连接和右连接。
左连接:left join
左连接,以lfet join 左侧的表作为基础表来实现关联
例
class_one表
teachers表
使用左连接,获取class_one表中所有学生对应的老师信息
- select c.*,t.teacher_course from class_one c left join teachers t on c.teacher_name=t.teacher_name;
右连接:right join
与左连接相反,右连接是以运算符右侧的表作为基础表来实现关联。
例
class_one表
-teachers表
使用右连接,获取teachers表中所有老师对应的学生信息
- select c.id,c.name,c.class,t.teacher_name,t.teacher_course from class_one c right join teachers t on c.teacher_name=t.teacher_name;
完全连接 full join
完全连接实际是一个左连接和右连接的组合。也就是说,如果两个数据源使用了完全连接,那么将首先进行一个左连接,然后进行一次右连接,最后再删除其中的重复记录,即得到完全连接。完全连接,应该使用full join 关键字,并使用on关键字指定连接条件。
例
class_one表
-teachers表
-使用full join获取class_one表 和 teachers表的完全连接。
select * from class_one c full join teachers t on c.teacher_name = t.teacher_name;
注意:full join 的执行结果与表的顺序无关,无论表在 full join 的前边还是右边,结果都一样!
- select * from teachers t full join class_one c on c.teacher_name = t.teacher_name;
第四章 SQL查询 之连接{自然连接,内连接,外连接(左外连接,右外连接,完全连接)}相关推荐
- 第四章 SQL查询之联合语句
4.3联合语句 联合语句是指对于多个查询所获得的结果集进行集合操作.这些集合操作包括union.union all.intersect和minus.这些集合运算都是二元运算,运算结果仍然是一个记录集合 ...
- 第四章 SQL聚合函数 COUNT(二)
文章目录 第四章 SQL聚合函数 COUNT(二) 权限 性能 未提交事务所做的更改 示例 第四章 SQL聚合函数 COUNT(二) 权限 要使用COUNT(*),必须对指定的表具有表级别的SELEC ...
- 第二十四章 SQL函数 CEILING
文章目录 第二十四章 SQL函数 CEILING 大纲 参数 描述 示例 第二十四章 SQL函数 CEILING 数值函数,返回大于或等于给定数值表达式的最小整数. 大纲 CEILING(numeri ...
- 第九十四章 SQL函数 %MINUS
文章目录 第九十四章 SQL函数 %MINUS 大纲 参数 描述 示例 第九十四章 SQL函数 %MINUS 将数字转换为规范整理格式,然后反转符号的整理函数. 大纲 %MINUS(expressio ...
- oracle延时盲注如何防止,【原创】WEB安全第四章SQL注入篇21 oracle 延时注入
WEB安全第四章SQL注入篇21 oracle 延时注入 1.简介 DBMS_LOCK.SLEEP()函数可以让一个过程休眠很多秒,但使用该函数存在许多限制.首先,不能直接将该函数注入子查询中,因为O ...
- 第四章 缓存查询(一)
文章目录 第四章 缓存查询(一) 缓存查询提高了性能 创建缓存查询 动态SQL的缓存查询名称 嵌入式SQL的缓存查询名称 单独的缓存查询 文字替换 DynamicSQLTypeList Comment ...
- 第七章 SQL查询(三)
第七章 SQL查询(三) 一,什么是子查询 子查询是一个嵌套在 SELECT.INSERT.UPDATE 或 DELETE 语句或其他子查询中的查询 子查询在WHERE语句中的一般用法: SELECT ...
- 第九章 SQL查询数据库(二)
文章目录 第九章 SQL查询数据库(二) 调用用户定义函数的查询 查询串行对象属性 查询集合 使用说明和限制 调用文本搜索的查询 伪字段 查询元数据 快速查询 查询和企业缓存协议Enterprise ...
- 数据库系统原理——第四章 SQL与数据库的基本操作(1)知识点总结(自考本)
当你想挣一百块的时候你就要把目标定成一千块,这样才挣得更多. 第四章 SQL与数据库的基本操作 SQL概述 什么是SQL? SQL的特点 SQL的四大功能 数据定义语言 数据操纵语言 数据控制语言 嵌 ...
最新文章
- 【转】sed 简明教程
- 20220129---CTF刷题---WEB--代码审计
- 设计数据密集型应用程序_设计数据密集型应用程序书评
- ZetCode Kotlin 教程
- groupadd命令详解(实例)
- Linux 常用ping命令详解
- tpx色卡电子版_潘通色卡电子版Pantone TPX(新175色)
- FPGA入门——初学建议
- n元均匀直线matlab,均匀直线阵天线的分析
- java实现zip文件压缩和解压
- 联想“重组症”:仅靠重组是不够的
- 关于print spooler无法启动
- 计算机讲Word文档中的组合,电脑Word文档中两个表格如何合并
- 大文本文件打开工具_信息技术类专业常用工具软件教案1.1
- html项目符号正方形,html 项目符号
- æµè¯oschina
- Matlab合并文本或excel文件数据并绘图
- 几道js数组循环练习题
- ei指什么_SCI、EI分别是什么意思
- Windows激活时,不想直接用微软账户登录咋办