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
相关推荐
jiunian_cn23 分钟前
【Redis】数据库管理操作
数据库·redis·缓存
_Johnny_1 小时前
ETCD 配额/空间告警模拟方案
网络·数据库·etcd
猫头虎1 小时前
基于信创openEuler系统安装部署OpenTeleDB开源数据库的实战教程
数据库·redis·sql·mysql·开源·nosql·database
爬山算法1 小时前
MongoDB(1)什么是MongoDB?
数据库·mongodb
Nandeska1 小时前
17、MySQL InnoDB ReplicaSet
数据库·mysql
AI_56781 小时前
SQL性能优化全景指南:从量子执行计划到自适应索引的终极实践
数据库·人工智能·学习·adb
hlABgYML1 小时前
基于NGSIM数据的Wiedemann99跟驰模型标定
mysql
数据知道2 小时前
PostgreSQL 性能优化:分区表实战
数据库·postgresql·性能优化
静听山水2 小时前
StarRocks表模型详解
数据库
静听山水2 小时前
Redis核心数据结构-Set
数据结构·数据库·redis