快乐SQL复习 - JOIN多表查询

如何才能联合好几张表进行查询呢~ 我们应该学会用JOIN来合并我们的表。

但是,表是说合并就能合并的吗~ NONONO~ 表和表之间其实也有人际关系的~

怎么说呢,如果,表和表之间没有共同好友,那他们是不会合并的!

这个共同好友就是我们传说中的~ primary key & foreign key,主键和外键。

其实他们的内容是一样的,表的外键是另一表的主键~所以他们就是“共同好友”,只有一张表键能和另一张表的键匹配,他们才能被合并在一起。


第一个JOIN:INNER JOIN

INNER JOIN会把两个表格中相同的主键所对应的信息结合以来,不相同的就不会出现在合并的表格里面,图解:

快乐SQL复习 - JOIN多表查询

用INNER JOIN 连接表的语法:

SELECT column, another_table_column, …

FROM mytable (主表)

INNER JOIN another_table (要连接的表)

ON mytable.id = another_table.id 

WHERE condition(s)

ORDER BY column, …ASC/DESC

LIMIT num OFFSET num

在这句话中 “ON mytable.id = another_table.id“,等号左边是原来的表的名字,加一个点号,再加上那个primary key的名字。举个栗子:

快乐SQL复习 - JOIN多表查询

我们想把上面这两个表加在一起,最后想看动物们的姓名和他们对应的成绩,按成绩从高到低排列~

SELECT name, score

FROM basic_information

INNER JOIN score(要连接的表)

ON  basic_information.id = score.student_id 

ORDER BY score DESC

解决~

输出的结果:

快乐SQL复习 - JOIN多表查询

 


INNER JOIN 只会保留两个表都存在的数据,这意味着一些数据的丢失,但真实世界中两个表存在差异很正常,所以我们需要更多的连表方式,包括左连接 LEFT JOIN,右连接 RIGHT JOIN 和 全连接 FULL JOIN.

这几个连接方式都会保留不能匹配的行。

LEFT JOIN ,RIGHT JOIN,FULL JOIN 的原理,我们来看看图片,就能很好的理解!

LEFT JOIN就会保留全部的主表,以及另外一个表中与主表能匹配到的部分。

快乐SQL复习 - JOIN多表查询

left join

RIGHT JOIN会保留全部的附表,以及主表中与附表能匹配到的部分。

快乐SQL复习 - JOIN多表查询

FULL JOIN 顾名思义,不管匹不匹配,他全部都会进去合并的表中!

快乐SQL复习 - JOIN多表查询

语法:

SELECT column, another_column, …

FROM mytable LEFT JOIN / RIGHT JOIN / FULL JOIN another_table

ON mytable.id = another_table._id

WHERE condition(s)

ORDER BY column, …ASC/DESC

LIMIT num OFFSET num

举个栗子:

快乐SQL复习 - JOIN多表查询

我想找出所有员工所在的楼和对应的容量,该怎么做呢?

SELECT name,building_name,capacity FROM employees

LEFT JOIN buildings

ON employees.building = buildings.building_name

输出:

快乐SQL复习 - JOIN多表查询

以上就是关于JOIN的复习啦~

喜欢的话可以收藏~也可以给兔子点个赞噢~奥利给!