24 MySQL 多表联合查询·上(4)

在前几章中,大致了解了如何在一张表中读取数据,但是在真正的应用中,经常需要从数据库的两个或多个数据表中匹配读取数据。

注:以下SQL语句示例全部基于下面「user表」、「department表」「job表」:

user表

uid uname depid jid
1 张三 2 1
2 李四 2 2
3 王铿 3 4
4 彭昶 3 4
5 王小二 4 3

department表

depid depname master
1 总裁办 李大宝
2 研发部 张三
3 测试部 王铿
4 开发小组A 王潇潇
5 开发小组B 尼古拉叶
6 财务部 佳琪佳

job表

jid jname
1 高级开发工程师
2 Java工程师
3 前端开发
4 测试工程师
5 产品经理
6 财会
  • INNER JOIN(内连接,或等值连接): 获取两个表中字段匹配关系的记录,即查询两表交集部分的数据。
  • LEFT JOIN(左连接): 获取左表所有记录,即使右表没有对应匹配的记录。
  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

两表联合查询

sql 复制代码
--内连接:INNER JOIN
SELECT * FROM user
INNER JOIN department on user.depid = department.depid ;
或
SELECT * FROM user,department WHERE user.depid = department.depid; 
--查询「user表」「department表」中共有的数据。

结果如下:

uid uname depid jid depid depname master
1 张三 2 1 2 研发部 张三
2 李四 2 2 2 研发部 张三
3 王铿 3 4 3 测试部 王铿
4 彭昶 3 4 3 测试部 王铿
5 王小二 4 3 4 开发小组A 王潇潇
sql 复制代码
--左连接:LEFT JOIN
SELECT * FROM user u 
LEFT JOIN department d ON u.uname = d.master;
--查询「user表」中所有的数据,和匹配上「department表」中的数据。

结果如下:

uid uname depid jid depid depname master
1 张三 2 1 2 研发部 张三
2 李四 2 2 Null Null Null
3 王锵 3 4 3 测试部 王锵
4 彭昶 3 4 Null Null Null
5 王小二 4 3 Null Null Null
sql 复制代码
--右连接:RIGHT JOIN
SELECT * FROM user u 
RIGHT JOIN department d ON u.uname = d.master;
--查询「department表」中所有的数据,和匹配上「user表」中的数据。

结果如下:

depid depname master uid uname depid jid
1 总裁办 李大宝 Null Null Null Null
2 研发部 张三 1 张三 2 1
3 测试部 王铿 3 王铿 3 4
4 开发小组A 王潇潇 Null Null Null Null
5 开发小组B 尼古拉叶 Null Null Null Null
6 财务部 佳琪佳 Null Null Null Null
相关推荐
且行志悠43 分钟前
Mysql的使用
mysql
白鹭44 分钟前
MySQL源码部署(rhel7)
数据库·mysql
666和7771 小时前
Struts2 工作总结
java·数据库
还听珊瑚海吗1 小时前
SpringMVC(一)
数据库
星期天要睡觉3 小时前
MySQL 综合练习
数据库·mysql
Y4090013 小时前
数据库基础知识——聚合函数、分组查询
android·数据库
JosieBook4 小时前
【数据库】MySQL 数据库创建存储过程及使用场景详解
数据库·mysql
处女座_三月4 小时前
改 TDengine 数据库的时间写入限制
数据库·sql·mysql