今天是干货日,主题是联结多表查询!
一、表的加法(union)
- 用法
select <列名1><列名2> from table, union select <列名1><列名2> from table2,会删除两个表中的重复数据
select <列名1><列名2> from table, union all select <列名1><列名2> from table2,会保留两个表中的数据
我们可以看到在我们但用union的情况下,自动删除了两个表的重复值,0001,语文。
如果我们用union all的话,就是会保留重复值
2. 注意事项
- 作为运算对象的记录的列数必须相同。
- 作为运算对象的记录中列的类型必须一致。
二、表的联结
- 交叉联结(cross join)
本质上就是用第一个表的数据,和第二个表的数据,交叉相乘的然后组成新表的过程
交叉联结,是所有的联结的基础,本质上我们后来学的所有联结都会按照这个方法进行联结,但是,我们也可以很明显的看出,交叉联结出的结果实在是太多了,这就造成了我们需要大量的资源和时间去分析其结果,并且,这么庞大的数据集,很可能实际运用意义不大。因此,我们很少会用交叉联结。
2. 内联结(inner join)
找出同时存在于两张表中的数据,然后进行组合,形成新表
- 表达形式
select A . <> B. <> from table as A inner join table2 as B on A. <> = b.<>
3. 左联结(left join )
以左边的表为主表进行交叉联结,如果左边的表中有的行,右边没有对应数据,则显示为null
select A . <> B. <> from table as A left join table2 as B on A. <> = b.<>
左边表格有的数据,都会存在,如果右边表格没有对应数据,则会显示null
与之相对应的就是我们的右联结(right join),右联结的情况跟左联结基本相同,只不过是从以左边表格的相应数据作为参考,然后从右边表格中找到我们的对应数据。
4. 全联结(full join)
保留左右两个表中的全部数据,如果找到了对应行,则合并数据,否则,在对应处填写空值。由于MySQL是不支持全联结的,因此,我们在这里仅作为了解。
5. 运行顺序
我们的惯例嘛,只要是讲了新语句,一定会写将运行顺序。JOIN的语句的运行顺序和from语句是一样的,这里放张图,大家在复习一下下
三、case表达式
我自己的话,学习下来感觉case表达式特别像我们的条件语句,如果,达成条件1,那么,输出,结果1。
在SQL里面的表达式的形式就是,
case when <判断表达式> then<表达式>
when <判断表达式> then<表达式>
各种循环
else<表达式>
end
栗子!!噔噔,热乎乎的
栗子: 查询到及格的学生和不及格的学生。
今天的分享就到这里啦,都是超级好用的方法。