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
相关推荐
FYKJ_20101 小时前
springboot雅集社区养老管理系统04456-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
FYKJ_20101 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
javascript·vue.js·spring boot·mysql·typescript·spark·express
FYKJ_20101 小时前
springboot羽毛球场地管理系统00626-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
FYKJ_20102 小时前
django药饮个性化推荐系统54839-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
IT枫斗者枫哥7 小时前
MyBatis一对多分页:LIMIT 20,为什么凑不齐20个订单?
java·数据库
Flynt7 小时前
"MySQL搜不动就上ES"?我先在50万行数据上测了它自带的ngram全文索引
mysql·elasticsearch·搜索引擎
Y008 小时前
PostgreSQL 的锁:为什么你的 ALTER TABLE 会卡住,以及怎么查
数据库·postgresql
imDwAaY8 小时前
Redo Log 和 Binlog 为什么需要两阶段提交?
后端·mysql
灰原喜欢柯南8 小时前
OceanBase 运维管理知识点——OCP 监控、诊断与变更控制
数据库·oceanbase
码农-0048 小时前
Springboot 集成 Ehcache操作数据库显示SQL语句设置
数据库·spring boot·sql