美文网首页程序员
SQL——连接表达式

SQL——连接表达式

作者: 薛定谔与猫的故事 | 来源:发表于2018-04-04 09:17 被阅读0次

1、连接条件

前面中提到了自然连接(natural join),且使用了join……using子句,join-using子句是一种自然连接的形式,只需要在指定的属性上的取值匹配,using里面的参数必须是被连接的两个表的共有属性。

区别于using条件,on条件允许在参与连接的关系上设置通用的谓词。该谓词的写法于where子句中谓词写法相同,出现在连接表达式的后面。例如

SELECT *
FROM student JOIN takes ON student.id = takes.id;

上面的连接表达式几乎与 student natural join takes一样,也与下面的书写是等价的,

select * 
from student,takes
where student.id = takes.id;

与natural join和join -using不同的是,join-on使用的是通用谓词,为了显示这种区别,我们对第一个做个改动:

SELECT *
FROM student JOIN takes 
    ON student.id = takes.id AND dept_name='computer science';

很明显,join-on的谓词的域是包含natural join和join-using的域(取值空间)。

2、外连接

假设我们要显示一个所有学生的列表,以及他们选修的课程(尽管没有选修),我们可能会写:

select * 
from student natural join takes;

但这样是达不到想要的效果的。因为对于没有选修课程的同学是不包括在结果集当中,而这里要求的是所有学生。如下图:


takes表 student表 结果表
那么我们应该怎么做,这个时候外连接就起到了作用。外连接会在结果在创建包含空值元组的方式,保留那些在连接中丢失的元组,外连接有三种形式:
1)左外连接(left outer join) 只保留出现在左外连接运算之前的关系中的元组
2)右外连接(right outer join) 只保留出现在右外连接运算之后的关系中的元组
3)全外连接(full outer join) 保留出现在两个关系中的元组
先比较之前使用的连接,不保留未匹配元组的连接运算称之为内连接运算。三种外连接。
左外连接:
SELECT * 
FROM student NATURAL LEFT OUTER JOIN  takes;

右外连接:

SELECT *
 FROM student NATURAL RIGHT OUTER JOIN  takes;
左外连接 右外连接

有人可能会问,会什么右外连接结果跟内连接是一样的。这里的原因能是因为右外连接只保留之后的关系中的元组,也就是所谓在takes表中,被选修的课程总有对应的学生,就不会出现学生为空的情况。

全外连接是左外连接与右外连接的组合。在内连接结果结果结算出来之后,左侧关系中不匹配右侧关系任何元组被添上空值并加到结果中。类似的,右侧关系中不匹配左侧关系任何元组也被添上空值并加到结果中。

3、总结

连接类型:外连接(<left,right,full>outer join)、内连接(inner join)
连接条件:natural、on<predicate>、using(A1,A2)

相关文章

  • SQL——连接表达式

    1、连接条件 前面中提到了自然连接(natural join),且使用了join……using子句,join-us...

  • 第133章 SQL函数 STRING

    第133章 SQL函数 STRING 将表达式转换并连接成字符串的函数。 大纲 参数 string - 表达式,可...

  • EF Core 备忘

    模糊查询sql linq 内连接查询sql linq 左连接查询sql linq 左连接查询(连接内带条件)sql...

  • 2020-04-01

    连接两表 SOLUTION 输入 输出 解题思路SQL 连接类型SQL 中有多种不同的连接: 内连接(INNER ...

  • SQL常见面试题

    1、SQL的表连接方式有哪些?SQL中连接按结果集分为:内连接,外连接,交叉连接内连接:inner join on...

  • MICK-SQL进阶教程

    学习笔记~ 目录 第一章 神奇的SQL 1.1 CASE表达式1.2 自连接的用法1.3 三值逻辑和NULL1.4...

  • Hibernate基础入门学习(一)

    利用IDEA环境用Hibernate连接sql server看这里hibernate连接sql server 1 ...

  • 入门(九)操作mysql

    1、连接数据库 sql python连接 2、获取游标执行sql关闭资源 动态sql 3、执行查询语句

  • Python出现的中文乱码问题(SQL server、PyQt、

    一. 连接SQL server出现乱码 【问题描述】: pymmsql连接SQL Server中文出现乱码 【问...

  • SQLite 表达式

    SQLite 表达式 表达式是一个或多个值、运算符和计算值的SQL函数的组合。 SQL 表达式与公式类似,都写在查...

网友评论

    本文标题:SQL——连接表达式

    本文链接:https://www.haomeiwen.com/subject/yswhhftx.html