目前有2个表:users表和scores表,它们的数据如下:
mysql> SELECT * FROM users; +----+----------+ | id | username | +----+----------+ | 1 | xiaoming | | 2 | awen | | 3 | kate | | 4 | lily | +----+----------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM scores; +---------+-------+ | user_id | score | +---------+-------+ | 2 | 80 | | 3 | 70 | | 4 | 100 | | 5 | 60 | +---------+-------+ 4 rows in set (0.00 sec)可见, id为1的xiaoming在scores中没有对应的记录,同样,user_id为5的score在users中没有对应的记录。
1、内连接, 从下面的SQL查询可见,2个表中在另一个表中没有对应记录的记录都没有出现。
mysql> SELECT * FROM users INNER JOIN scores ON users.id = scores.user_id; +----+----------+---------+-------+ | id | username | user_id | score | +----+----------+---------+-------+ | 2 | awen | 2 | 80 | | 3 | kate | 3 | 70 | | 4 | lily | 4 | 100 | +----+----------+---------+-------+ 3 rows in set (0.00 sec)2、左连接, 从下面的SQL查询可见,JOIN左边的表中所有记录都有出现,id为1的没有对应的score记录的记录也有出现, 并且缺少的右表字段的数据全部补NULL。
mysql> SELECT * FROM users LEFT JOIN scores ON users.id = scores.user_id; +----+----------+---------+-------+ | id | username | user_id | score | +----+----------+---------+-------+ | 1 | xiaoming | NULL | NULL | | 2 | awen | 2 | 80 | | 3 | kate | 3 | 70 | | 4 | lily | 4 | 100 | +----+----------+---------+-------+ 4 rows in set (0.00 sec)3、右连接, 从下面的SQL查询可见,JOIN右边的表中所有记录都有出现,user_d为5的没有对应的user记录的记录也有出现, 并且缺少的左表字段的数据全部补NULL。
mysql> SELECT * FROM users RIGHT JOIN scores ON users.id = scores.user_id; +------+----------+---------+-------+ | id | username | user_id | score | +------+----------+---------+-------+ | 2 | awen | 2 | 80 | | 3 | kate | 3 | 70 | | 4 | lily | 4 | 100 | | NULL | NULL | 5 | 60 | +------+----------+---------+-------+ 4 rows in set (0.00 sec)综上所述,
a. 内连接,显示两个表中有联系的的全部数据。
b. 左连接, 显示左表的全部数据,右表中和左表没有联系的记录不出现。
c. 右连接,显示右表的全部数据,左表中和右表没有联系的记录不出现。