按excel查询主键_第⼗三篇SQL的多表查询
1、表的加法
表的加法是指字段完全相同的两个表合并为⼀个表。
第⼀步:创建新表
使⽤右键复制表即可复制⼀个字段完全⼀样的表,可以选择只复制结构得到空表,使⽤insert 语句插⼊数据,也可以复制结构和数据,使⽤update函数更新表中数据,我⽤的是第⼆种。
第⼆步:修改表中的数据
将表中课程号为0002和0003的整⾏数据进⾏修改,update 表名 set 字段1 ='值1',字段2 ='值2',字段3='值3'...... where 主键字段='主键值';
update 课程表2 set 课程号 ='0005',课程名称 ='数据库',教师号='0005'
where 课程号='0003';
update 课程表2 set 课程号 ='0004',课程名称 ='计算机',教师号='0004'
where 课程号='0002';
union (all)
第三步:加法函数union (all)
select 课程号,课程名称
from 课程表
UNION all
select 课程号,课程名称
from 课程表2;
all会⾃动删除重复字段,添加 all
all之后是两个表的所有内容的合并,保留重复⾏。
在使⽤union函数的时候,不添加 all
2、表的联结
⼀个表通过某⼀特定主键与另⼀含有该主键的表产⽣关联,联结的结果是由多个表组合得到⼀个表。
1)交叉联结(cross join)
返回被连接的两个表所有数据⾏的笛卡尔积,返回结果集合中的数据⾏数等于第⼀个表中符合查询条件的数据⾏数乘以第⼆个表中符合查询条件的数据⾏数。
结果⽰意图:
select a.字段1,a.字段2,b.字段3......
from 表1 as a cross join 表2 as b
on a.主键字段=b.主键字段;
2)内联结(inner join)
⽂⽒图⽰意:
第⼀步:取共同值
2,3,5};
2,3,4,55},A交B={2,3,5
2,3,5}B={2,3
类似于数学上A交B的概念,A={ 0,1,2,3,5
第⼆步:交叉联结
select a.学号,a.姓名,b.课程号
from 学⽣表 as a INNER join 成绩表 as b
on a.学号=b.学号
where a.学号=0001;
3)左联结(left join)
⽂⽒图⽰意:
select a.学号,a.姓名,b.课程号
from 学⽣表 as a left join 成绩表 as b on a.学号=b.学号
where a.学号 in ('0001','0004');
sql left join 多表连接在右侧表未取到相同值的字段值将以空值填充
where b.主键字段=null
第三步:条件 where b.主键字段=null
添加条件字段在右侧由空值,即为在左侧表中取与右侧表不同的数据,类似于数学上的A-B
select a.学号,a.姓名,b.课程号
from 学⽣表 as a left join 成绩表 as b
on a.学号=b.学号
where b.学号 is null;
4)右联结(right join)
⽂⽒图⽰意:
第⼀步:取值
右侧的表取全部数据,左侧表以右侧表为基础,取与右侧表相同的值,左联结和右联结的理解是相同的,只有⽅向不同。第⼆步:交叉联结
select a.学号,a.姓名,b.课程号,b.学号
from 学⽣表 as a right join 成绩表 as b
on a.学号=b.学号
where b.学号 in (0001,0005);
where a.主键字段=null
第三步:条件 where a.主键字段=null
添加条件字段在右侧由空值,即为在左侧表中取与右侧表不同的数据,类似于数学上的B-A
select a.学号,a.姓名,b.课程号,b.学号
from 学⽣表 as a right join 成绩表 as b
on a.学号=b.学号
where a.学号 is null;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论