一,表的加法
在原有school数据库里再创建一张跟course结构相同的表course1,可以【右击course】,【点复制表】-【选结构和顺序】,然后把course1里按照要求修改数据
完成操作后发现course和course1 结构是一样的,列和列的数据类型是一致的,不同的是红色框的数据
练习:将course和course1相加,用union将两张表的查询语句结合一起
文氏图:加法(Union)
图一
表的加法会把表里重复的数据删除,只保留一个(图一);若想要保留2张表里重复的行,在Union后加all即可(图二)
图二
二,表的连接
School数据库里4张表
学生表和成绩表之间有什么关系呢?
student和score这两张表通过学号关联起来,学号0001的成绩,可以通过成绩表里查学号0001的行,一共发现3行,对应是找到了学号0001三门课程的成绩。
School数据库里四张表之间的关系
4张表联结关系图
交叉联结cross join:(将一个表的每一行 与 另一表中的每一行 合并在一起)
表1 三行数据;表2 两行数据 交叉联结=3*2 六行数据
生活中典型的交叉联结:扑克牌
13张牌(A,1,2,3,4,5,6,7,8,9,10,J,Q,K)和 四种花色(♠,)交叉联结 13*4=52张牌
【注】:交叉联结实际业务用的比较少(耗时成本;没有实际价值),交叉联结是所有联结的基础
内联结inner join:(查找出同时存在于两张表的数据)
左联结left join: (将左侧的表作为主表,将左表数据全部取出,右边表只选出和左边表相同列名的行)
右联结right join:(将右侧表的数据全部取出,将左侧表中与右侧表相同列名的行取出)
全联结 full join(查询结果返回左表和右表中的所有行。当某行和另一表中有匹配的时,两行进行合并;若某行跟另一表中没有匹配时,另一表中对应的值用空值来填充)
【注】:MySQL是不支持全联结,理解概念即可
所有SQL联结:
复习SQL运行顺序:
先运行子查询每个查询语句中的运行顺序1,先运行篮框的子句2,select子句3,最后运行红框的子句
三,联结应用案