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
相关推荐
DBA小马哥2 小时前
时序数据库迁移替换与时序数据库分片
数据库·时序数据库
DBA小马哥2 小时前
时序数据库迁移方案在物联网设备监测中的实践与性能突破
数据库·物联网·时序数据库
ID_180079054732 小时前
小红书笔记详情API接口基础解析:数据结构与调用方式
数据结构·数据库·笔记
ruleslol8 小时前
MySQL的段、区、页、行 详解
数据库·mysql
天若有情6738 小时前
校园二手交易系统实战开发全记录(vue+SpringBoot+MySQL)
vue.js·spring boot·mysql
while(1){yan}8 小时前
MyBatis Generator
数据库·spring boot·java-ee·mybatis
それども8 小时前
MySQL affectedRows 计算逻辑
数据库·mysql
是小章啊8 小时前
MySQL 之SQL 执行规则及索引详解
数据库·sql·mysql
富士康质检员张全蛋9 小时前
JDBC 连接池
数据库
yangminlei9 小时前
集成Camunda到Spring Boot项目
数据库·oracle