sql中两⾏合并_第五关:从零学会SQL之多表查询⼀、表的加法:union语句
1、union 语句
使⽤union语句进⾏course表跟course1相加 ,两个查询语句联结在⼀起,
⽂⽒图:左边course 右边course1
两个表相加重复的数据只会留⼀个:例如语⽂课程0001
union SQL语句的使⽤
sql中union多表合并-- union语句的使⽤
Select 课程号,课程名称
From course
Union
Select 课程号,课程名称
From course1
2、union all 语句
union all 将所有的列进⾏相联结,不会删除重复的查询列
-- union all SQL语句的使⽤
Select 课程号,课程名称
From course
Union all
Select 课程号,课程名称
From course1
⼆、表的联结
什么是联结?
联结:表和表是通过列产⽣对应关系的,联结是将通过表和表之间的关系,将两个表合并在⼀起的操作。
1、 各表之间的关系
各个表通过⼀些相同的列进⾏联结的
例如下图每个学号列相同的学号⾏进⾏联结
4张表的联结关系图
学⽣表跟成绩表通过学号联结
成绩表跟课程表通过课程号进⾏联结 课程表跟教师表通过教师号进⾏联结
2、 常⽤的联结联结分类
1) 交叉联结:cross join
也叫笛卡尔积
英⽂名称cross join
案例:
表⼀三⾏数据 跟 表⼆两⾏数据进⾏交叉联结
表⼀ cross join 表⼆ 的数据表 为3⾏*2⾏=6⾏数据
类似扑克牌 13张牌=(A.2.3.4.5.6.7.8.9.10.J.Q.K)
花⾊=(♠.♥.♦.♣)
13张牌X花⾊=13*4=(52张扑克牌)
平常⽤的⽐较少
2)内联结:inner join
查出同时存在于两张表中的数据:英⽂名 inner join
案例
学⽣表(student)跟成绩表(score)通过学号产⽣了匹配,在表中使⽤相同的颜⾊表⽰都有的学号。两个表⾥都有的学号是0001,学号0002只存在于学⽣表⾥,学号0005只存在于成绩表中,图⽚中⽤⽂⽒图画出了内联结之间的关系,左边的圆圈显⽰学⽣表⾥的数据,右边的圆圈显⽰成绩表⾥的数据,两个圆圈重合的地⽅就是同时存在于两个表⾥的数据,也就是学号0001。
拿学⽣表跟成绩表进⾏内联结,两个表通过学⽣的学号进⾏内联结,下⾯可以看出内联结在两张表上是如何运⾏的
第⼀步:
两个表通过学号进⾏内联结,会将两个表中都有的学号所在的⾏取出来,学⽣表⾥会把学号0001⾏的数据取出来,成绩表⾥学号0001⾥有两⾏,取出的是两⾏数据。
第⼆步:
将两个表⾥取出来的数据进⾏合并,这⾥就是进⾏交叉联结了,交叉联结是将表中的每⼀⾏跟另⼀个表中的每⼀⾏两两合在⼀起,这⾥将学⽣表中的学号0001⼀⾏数据跟成绩表中的两⾏数据合并,最终产⽣了两⾏数据,合并以后的表呢就有了两张表中的全部信息。
学号,姓名,出⽣⽇期,性别,课程号,成绩都放在了⼀张表中。
SQL查询语句
-- 内联结SQL查询语句
Select a.学号,a.姓名,b.课程号
From student as a inner join score as b-----重点1:score as
On a.学号=b.学号-- 重点on 在学号的基础上进⾏联结
注意事项:From中使⽤了两张表
1、 表的别名,列名是为了区分是哪张表中的数据,需要在列名前加上表的别名跟点
2、 两个表中间inner join 就说明两张表通过inner join 进⾏内联结
3、 From⼦句中的关键字on 表⽰两张表是通过哪个列匹配产⽣关系的
3)左联结:left join
会将左侧表中的数据取出来,⽂⽒图中左联结就是学⽣表中的部分
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论