联表查询:
双表查询
将一张表和另一张表连接起来,当然想要连接起来就需要有连接点。
连接点:相同字段的相同数据
farther表
mom表:
想要将两张表连接在一起,需要inner/left/right join 作为插入的表 on 条件
inner:
两张表相同的字段中的数据列会被当作条件:
select a.name, a.age , career,gander from mom as a inner join farther as b on a.name=b.name;
1、给两个表分别起别名,a和b
2、a.name意为mom中的name,a.age意为mom中的age,career没有a. 是因为他是mom中所独有的字段,不需要特别区分,前面需要区分的原因是:两张表都有name和age字段,不加a. 的话分不清当前应该取哪张表的name和age字段
3、gander是需要连接的表(farther),他是farther表中的独特属性所有也不用加 ‘点’,注意:这时要加点的话就是b .
4、上面2和3总结:一样的字段需要指定字段属于哪张表,非一样的字段不需要
5、inner join 连接另一张表 : a.name=b.name;
6、 最后查询出来的结果,只有两张表中的name字段相同的数据才会显示出来,如果,mom比farther多了一条或者多条name字段的数据,如:多了两条:李梅,刷子,那这个李梅和刷子的数据就不会显示,只有当两张表同时有李梅和刷子这两条数据时,它才会显示
left:
select a.name, a.age, career ,gander from mom as a left join farther as b on a.name=b.name;
获取的内容大体和inner一样,但是:
当条件中的字段的数据不一样时,他有了一些新的改进,left表示左边,这时,查询的结果就会将left左边的表中的所有字段数据都扔出来(当然,首先from前面写了你要的字段,不然,他又不是你爸爸,帮你想好一切),哪怕没有满足后面的条件,即a.name=b.name
right:
select a.name, a.age, career ,gander from mom as a right join farther as b on a.name=b.name;
和left道理一样,当不满足后面的条件时,把右表中的数据都扔出来,当然提前得写,原因说过了
注:条件可以不用写在前面,即光有连接的条件就行
select a.age,gander,career from farther as a left join mom as b on a.name=b.name;
三表查询
从第二张表找到和第三张表一样的字段数据:(也就是前面说的条件)
select a.name, a.age,gander,b.career from farther as a inner join mom as b on a.name=b.name inner join work as c on b.career=c.career;
这时肯定会想,这样查询的话,如果第二张表和第三章没有联系,岂不是用不了了?
其实只要前面的任何一张表能够和第三张表有相同的字段数据,都可以达成相连的条件