mysql 连接查询
在前面,我们学习了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中我们经常需要从多个数据表中读取数据。
本文我们将学习如何使用 MySQL 的 JOIN 在两个或多个表中查询数据。
JOIN
INNER JOIN(内连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 获取右表所有记录,即使左表没有对应匹配的记录。
mysql> use users; Database changed mysql> select * from user_info; +------+---------+--------+ | id | user_id | name | +------+---------+--------+ | 1000 | U1000 | 聂离 | | 1001 | U1001 | 杜泽 | | 1002 | U1002 | 陆飘 | +------+---------+--------+ 3 row in set (0.00 sec) mysql> select * from user_tag; +------+---------+----------+ | id | user_id | tag_id | +------+---------+----------+ | 1000 | U1000 | TAG20000 | | 1001 | U1002 | TAG20001 | | 1002 | U1003 | TAG20005 | | 1003 | U2000 | TAG20009 | +------+---------+----------+ 4 rows in set (0.00 sec)
1. INNER JOIN
mysql> select a.user_id,a.name,b.tag_id from user_info a inner join user_tag b on a.user_id=b.user_id; +---------+-------+----------+ | user_id | name | tag_id | +---------+-------+----------+ | U1000 | 聂离 | TAG20000 | | U1002 | 陆飘 | TAG20001 | +---------+-------+----------+ 2 rows in set (0.00 sec)
2. LEFT JOIN
mysql> select a.user_id,a.name,b.tag_id from user_info a left join user_tag b on a.user_id=b.user_id; +---------+-------+----------+ | user_id | name | tag_id | +---------+-------+----------+ | U1000 | 聂离 | TAG20000 | | U1001 | 杜泽 | NULL | | U1002 | 陆飘 | TAG20001 | +---------+-------+----------+ 3 rows in set (0.00 sec)
3. RIGHT JOIN
mysql> select a.user_id,a.name,b.tag_id from user_info a right join user_tag b on a.user_id=b.user_id; +---------+-------+----------+ | user_id | name | tag_id | +---------+-------+----------+ | U1000 | 聂离 | TAG20000 | | U1002 | 陆飘 | TAG20001 | | NULL | NULL | TAG20005 | | NULL | NULL | TAG20009 | +---------+-------+----------+ 4 rows in set (0.00 sec)
联合查询
MySQL UNION 操作符用于连接两个或两个以上的 SELECT 语句的结果组合到一个结果集合中。会删除重复的数据。
UNION ALL 返回所有结果集,包含重复数据。
SELECT expression1, expression2, ... expression_n FROM table_1 [WHERE conditions] UNION [ALL] SELECT expression1, expression2, ... expression_n FROM table_2 [WHERE conditions];