0


【MySQL】多表查询

在这里插入图片描述

文章目录

🎉多表查询

🎈3.1 内连接查询

  • 语法
-- 隐式内连接SELECT 字段列表 FROM 表1,表2… WHERE 条件;-- 显示内连接SELECT 字段列表 FROM 表1[INNER]JOIN 表2ON 条件;

内连接相当于查询 A B 交集数据

在这里插入图片描述

  • 案例- 隐式内连接SELECT*FROM emp, deptWHERE emp.dep_id = dept.did;执行上述语句结果如下:在这里插入图片描述- 查询 emp的 name, gender,dept表的dnameSELECT emp. NAME, emp.gender, dept.dnameFROM emp, deptWHERE emp.dep_id = dept.did;执行语句结果如下:在这里插入图片描述上面语句中使用表名指定字段所属有点麻烦,sql也支持给表指别名,上述语句可以改进为SELECT t1. NAME, t1.gender, t2.dnameFROM emp t1, dept t2WHERE t1.dep_id = t2.did;- 显式内连接select*from emp innerjoin dept on emp.dep_id = dept.did;-- 上面语句中的inner可以省略,可以书写为如下语句select*from emp join dept on emp.dep_id = dept.did;执行结果如下:在这里插入图片描述

🎈3.2 外连接查询

  • 语法-- 左外连接SELECT 字段列表 FROM 表1LEFT[OUTER]JOIN 表2ON 条件;-- 右外连接SELECT 字段列表 FROM 表1RIGHT[OUTER]JOIN 表2ON 条件;> 左外连接:相当于查询A表所有数据和交集部分数据> > 右外连接:相当于查询B表所有数据和交集部分数据在这里插入图片描述
  • 案例- 查询emp表所有数据和对应的部门信息(左外连接)select*from emp leftjoin dept on emp.dep_id = dept.did;执行语句结果如下:在这里插入图片描述结果显示查询到了左表(emp)中所有的数据及两张表能关联的数据。- 查询dept表所有数据和对应的员工信息(右外连接)select*from emp rightjoin dept on emp.dep_id = dept.did;执行语句结果如下:在这里插入图片描述结果显示查询到了右表(dept)中所有的数据及两张表能关联的数据。要查询出部门表中所有的数据,也可以通过左外连接实现,只需要将两个表的位置进行互换:select*from dept leftjoin emp on emp.dep_id = dept.did;

🎈3.3 子查询

  • 概念查询中嵌套查询,称嵌套查询为子查询。什么是查询中嵌套查询呢?我们通过一个例子来看:需求:查询工资高于猪八戒的员工信息。来实现这个需求,我们就可以通过二步实现,第一步:先查询出来 猪八戒的工资select salary from emp where name ='猪八戒'第二步:查询工资高于猪八戒的员工信息select*from emp where salary >3600;第二步中的3600可以通过第一步的sql查询出来,所以将3600用第一步的sql语句进行替换select*from emp where salary >(select salary from emp where name ='猪八戒');这就是查询语句中嵌套查询语句。
  • 子查询根据查询结果不同,作用不同- 子查询语句结果是单行单列,子查询语句作为条件值,使用 = != > < 等进行条件判断- 子查询语句结果是多行单列,子查询语句作为条件值,使用 in 等关键字进行条件判断- 子查询语句结果是多行多列,子查询语句作为虚拟表
  • 案例- 查询 ‘财务部’ 和 ‘市场部’ 所有的员工信息-- 查询 '财务部' 或者 '市场部' 所有的员工的部门didselect did from dept where dname ='财务部'or dname ='市场部';select*from emp where dep_id in(select did from dept where dname ='财务部'or dname ='市场部');- 查询入职日期是 ‘2011-11-11’ 之后的员工信息和部门信息-- 查询入职日期是 '2011-11-11' 之后的员工信息select*from emp where join_date >'2011-11-11';-- 将上面语句的结果作为虚拟表和dept表进行内连接查询select*from(select*from emp where join_date >'2011-11-11') t1, dept where t1.dep_id = dept.did;

最后说一句

感谢大家的阅读,文章通过网络资源与自己的学习过程整理出来,希望能帮助到大家。

才疏学浅,难免会有纰漏,如果你发现了错误的地方,可以提出来,我会对其加以修改。

在这里插入图片描述

标签: mysql 数据库 sql

本文转载自: https://blog.csdn.net/m0_69383623/article/details/130187063
版权归原作者 黑洞晓威 所有, 如有侵权,请联系我们删除。

“【MySQL】多表查询”的评论:

还没有评论