MySQL:内连接、左连接、右连接

    技术2025-09-28  58

    目前有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. 右连接,显示右表的全部数据,左表中和右表没有联系的记录不出现。

     

     

     

     

     

     

    Processed: 0.008, SQL: 9