ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL 连接(内连接,外连接)

2019-04-28 15:51:32  阅读:246  来源: 互联网

标签:成绩表 where 60 过滤 SQL 数据 连接


内连接

现在有两张表,学生表student1,成绩表SC1,两张表的数据如下

 

现在要对两张表做连接查询,连接一般需要写条件,where 或者 on 后面 ,

select * from student,SC where student.sid=SC.sid   from 后面直接写两个表名,这样写等价于内连接 如果不写 where 条件,相当于笛卡尔积。

 带有 where 条件 相当于内连接

A(inner,left,right) join B on A.1=B.1   on 不写会报错
select * from student inner join SC on student.sid=SC.sid

 

外连接(左外连接,右外链接)

左联接,是包括 A,B 表的交集 和 A 表的数据 (A eft join B on A.1=B.1),如果 A 表中有的数据 B 表没有找到相等的,会显示A表的数据,B表中的部分会为 null ,下面的结果就是成绩表中没有赵六和田七的数据的结果

如果 and 写在 on 后面,表示的是在做关联时不关联被过滤掉的数据,比如上面的数据,写 and sc.score>60 条件之后,会过滤掉成绩<=60的数据,而张三丰每一门课的成绩都小于60,但是会有张三丰的数据,只是后面的为null,如下:

上面的数据是过滤掉成绩小于60的数据之后,张三丰的成绩都小于60,并不是没有张三丰这个数据了,而是他后面的为null,可以这样理解,on 后面的 and 条件是代表关联与否,不满足就不关联,但A表的数据还是要全部都有的。

如果成绩>60是写在where 里的,where 是对结果进行过滤的,所以会把上面的结果不满足成绩>60的数据过滤掉,即:

右外链接,同左外链接一样,包括并集和B表的数据。

学生表和成绩表做又外连接的时候,成绩表中有一条 1008 的数据在学生表中没有,结果如下:

对上面的结果进行 成绩 >60 的条件过滤

可以看到写在 on 后 和 where 后结果是不同的,可以理解为,写在 on 后面的条件如果不满足就不和另外一个表进行关联,但是他的数据还是会在结果中显示。对于要显示全部数据的那张表。

自连接,在这里就先不说了。以后再说。

标签:成绩表,where,60,过滤,SQL,数据,连接
来源: https://www.cnblogs.com/privategardens/p/10783904.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有