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 下一节会做更详细的说明




浙公网安备 33010602011771号