sql多张表组合查询算总数怎么算_SQL多表查询及sqlzoo练习
⼀,表的加法(union)
⼀,表的加法(union
表的加法就是⽤Union把两个表按⾏合在⼀起distinct查询
例如,将下⾯两个表合在⼀起
⽤更直接的⽅式呈现出⽤Union将两个表合在⼀次的信息
输⼊sql语句:
select 课程号,课程名称 from course
union
select 课程号,课程名称 from course1;
这⾥我们可以看见两个表⾥重复的语⽂课信息并没有被保留两次,⽽cs是c重复信息⾃动合并了。那么如果想要保留重复⾏的话,应使⽤ Union all 如下图所⽰
select 课程号,课程名称 from course
union all
select 课程号,课程名称 from course1;
⼆,表的联结
如图所⽰,⽤红⾊,黄⾊,紫⾊分别呈现出了四个表之间的联系
学⽣表中可通过学号查询成绩表⾥的成绩及课程号,成绩表中可通过课程号查询课程表⾥课程名称及教师号,课程表中可通过教师号查询教师表中的教师姓名。
更直观⼀点的展⽰各个表中的关系如下
表联结分类:
1. 交叉联结 cross join
2. 内联结 inner join
3. 左联结 left join
4. 右联结 right join
5. 全联结 full join
1)交叉连接:
例如表1⾥⾯是1,2,3 表2⾥⾯是ABC 那么表1与表2交叉连接的结果如图:
有点⼉排列组合那种感觉
2) 内联结 inner join
内联结就是查出 同时出现在两张表中的数据
例⼦:从学⽣表以及成绩表中查询同时存在与两个表的学⽣的学⽣号,姓名以及课程号
select a.学号,a.姓名,b.课程号 from student as a inner join score as b on a.学号=b.学号;
以下是通过输⼊sql语句后分别从两个表中提取的信息
3) 左联结 left jion:其实左联结与右联结的道理是⼀样的
假如现在有表1与表2两张表
左联结会保留左边表的所有信息,但右边的表只会保留有左边表信息的那部分
将学⽣表以及成绩表通过学号左联结后的结果如下
select a.学号,a.姓名,b.课程号 from student as a left join score as b on a.学号=b.学号;
如果只想通过学号取左边表独有的信息,也就是只有学⽣表表有,不包括两个表共有的信息 也不包括成绩表的信息 也就是黄⾊部分
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论