快乐SQL复习 - JOIN多表查询
如何才能联合好几张表进行查询呢~ 我们应该学会用JOIN来合并我们的表。
但是,表是说合并就能合并的吗~ NONONO~ 表和表之间其实也有人际关系的~
怎么说呢,如果,表和表之间没有共同好友,那他们是不会合并的!
这个共同好友就是我们传说中的~ primary key & foreign key,主键和外键。
其实他们的内容是一样的,表的外键是另一表的主键~所以他们就是“共同好友”,只有一张表键能和另一张表的键匹配,他们才能被合并在一起。
第一个JOIN:INNER JOIN
INNER 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的名字。举个栗子:
我们想把上面这两个表加在一起,最后想看动物们的姓名和他们对应的成绩,按成绩从高到低排列~
SELECT name, score
FROM basic_information
INNER JOIN score(要连接的表)
ON basic_information.id = score.student_id
ORDER BY score DESC
解决~
输出的结果:
INNER JOIN 只会保留两个表都存在的数据,这意味着一些数据的丢失,但真实世界中两个表存在差异很正常,所以我们需要更多的连表方式,包括左连接 LEFT JOIN,右连接 RIGHT JOIN 和 全连接 FULL JOIN.
这几个连接方式都会保留不能匹配的行。
LEFT JOIN ,RIGHT JOIN,FULL JOIN 的原理,我们来看看图片,就能很好的理解!
LEFT JOIN就会保留全部的主表,以及另外一个表中与主表能匹配到的部分。
left join
RIGHT JOIN会保留全部的附表,以及主表中与附表能匹配到的部分。
FULL 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
举个栗子:
我想找出所有员工所在的楼和对应的容量,该怎么做呢?
SELECT name,building_name,capacity FROM employees
LEFT JOIN buildings
ON employees.building = buildings.building_name
输出:
以上就是关于JOIN的复习啦~
喜欢的话可以收藏~也可以给兔子点个赞噢~奥利给!