SQL——3、用JOIN进行表连接

JOIN进行多表联合查询

主键(primary key)

INNER JOIN 连接表的语法

SELECT column, another_table_column, …

FROM mytable (主表)

INNER JOIN another_table (要连接的表)

    ON mytable.id = another_table.id (想象一下刚才讲的主键连接,两个相同的连成1条)

WHERE condition(s)

ORDER BY column, … ASC/DESC

LIMIT num_limit OFFSET num_offset;

 

小贴士?

通过ON条件描述的关联关系;INNER JOIN 先将两个表数据连接到一起. 两个表中如果通过ID互相找不到的数据将会舍弃。此时,你可以将连表后的数据看作两个表的合并,SQL中的其他语句会在这个合并基础上 继续执行(想一下和之前的单表操作就一样了)。还有一个理解INNER JOIN的方式,就是把 INNER JOIN 想成两个集合的交集。

 

例子:

SELECT movies.DIRECTOR,Boxoffice.International_sales

FROM movies

INNER JOIN Boxoffice

  ON movies.ID=Boxoffice.Movie_id

ORDER BY International_sales DESC

LIMIT 1;

 

外连接(OUTER JOIN

 INNER JOIN 只会保留两个表都存在的数据,这意味着一些数据的丢失。本节要介绍的左连接LEFT JOIN,右连接RIGHT JOIN 和 全连接FULL JOIN. 这几个连接方式都会保留不能匹配的行。

LEFT/RIGHT/FULL JOINs 做多表查询

SELECT column, another_column, …

FROM mytable

INNER/LEFT/RIGHT/FULL JOIN another_table

    ON mytable.id = another_table.matching_id

WHERE condition(s)

ORDER BY column, … ASC/DESC

LIMIT num_limit OFFSET num_offset;

和INNER JOIN 语法几乎是一样的. 我们看看这三个连接方法的工作原理:表A 连接 B, LEFT JOIN保留A的所有行,不管有没有能匹配上B;反过来RIGHT JOIN则保留所有B里的行。最后FULL JOIN 不管有没有匹配上,同时保留A和B里的所有行,如果某一行在另一个表不存在,会用 NULL来填充结果数据。所有在用这三个JOIN时,你需要单独处理 NULL关于 NULL 下一节会做更详细的说明

 

 

 

 

 

 

posted @ 2022-04-26 17:06  七月安生里  阅读(401)  评论(0)    收藏  举报