Oracle之多表查询(select之依旧苦难的工作)

SQL92(语法简单,可读性差)

SQL 92和SQL 99是SQL语句的编写标准

笛卡尔积

直观的感受一下
Oracle之多表查询(select之依旧苦难的工作)
笛卡尔积里包含了两张表所有字段匹配的情况,即将两张表合成为一张表
Oracle之多表查询(select之依旧苦难的工作)

内连接

等值连接
Oracle之多表查询(select之依旧苦难的工作)
不等值连接
Oracle之多表查询(select之依旧苦难的工作)
自连接
字面意思,自己与自己进行内连接
Oracle之多表查询(select之依旧苦难的工作)
内连接特点

  • 左右两张表,只有满足条件匹配才会被查出,没有匹配则不会被查出来

外连接

左外连接
以左表为基准,坐标的全部信息都会显示,右表不管是否匹配到左表的信息都会进行显示
格式,在where后面=右边加上(+)
Oracle之多表查询(select之依旧苦难的工作)
右外连接
以右表为基准,坐标的全部信息都会显示,左表不管是否匹配到右表的信息都会进行显示
格式,在where后面=左边加上(+)
Oracle之多表查询(select之依旧苦难的工作)

SQL99(92基础上增加了关键字,可读性增强)

笛卡尔乘积(cross join 代替 “,”)

Oracle之多表查询(select之依旧苦难的工作)

内连接([inner] join 代替 “,” on 代替 where)

自然连接(92中没有)
自动选择将两个表中相同名称的字段做等值匹配
Oracle之多表查询(select之依旧苦难的工作)

使用using()做等值匹配也可以达到一样的效果
Oracle之多表查询(select之依旧苦难的工作)
等值连接
Oracle之多表查询(select之依旧苦难的工作)
不等值连接
Oracle之多表查询(select之依旧苦难的工作)

外连接(outer join 代替"," 不需要(+),on 代替 where)

左外连接(left outer join)
Oracle之多表查询(select之依旧苦难的工作)
右外连接(right outer join)
Oracle之多表查询(select之依旧苦难的工作)
满外连接(full outer join)
Oracle之多表查询(select之依旧苦难的工作)

三表连接查询

92写法
Oracle之多表查询(select之依旧苦难的工作)
99写法
Oracle之多表查询(select之依旧苦难的工作)
虽然两者结果相同,但性能是有差异的,主要在于两者所生成中间表的行数差异,92写法会生成许多冗余数据