详解MySQL多表查询

 更新时间:2023年04月18日 14:16:23   作者:黑洞晓威  
最近学习了多表查询,这篇文章主要给大家介绍了关于MySQL多表查询,文中通过实例代码介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下

🎉多表查询

🎈内连接查询

  • 语法
-- 隐式内连接
SELECT 字段列表 FROM 表1,表2… WHERE 条件;

-- 显示内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;

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

  • 案例
    • 隐式内连接
SELECT
	*
FROM
	emp,
	dept
WHERE
	emp.dep_id = dept.did;

执行上述语句结果如下:

  • 查询 emp的 name, gender,dept表的dname
SELECT
	emp. NAME,
	emp.gender,
	dept.dname
FROM
	emp,
	dept
WHERE
	emp.dep_id = dept.did;

执行语句结果如下:

上面语句中使用表名指定字段所属有点麻烦,sql也支持给表指别名,上述语句可以改进为

SELECT
	t1. NAME,
	t1.gender,
	t2.dname
FROM
	emp t1,
	dept t2
WHERE
	t1.dep_id = t2.did;
  • 显式内连接
select * from emp inner join dept on emp.dep_id = dept.did;
-- 上面语句中的inner可以省略,可以书写为如下语句
select * from emp  join dept on emp.dep_id = dept.did;

执行结果如下:

🎈外连接查询

  • 语法
-- 左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;

-- 右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;

左外连接:相当于查询A表所有数据和交集部分数据

右外连接:相当于查询B表所有数据和交集部分数据

 

  • 案例
    • 查询emp表所有数据和对应的部门信息(左外连接)
select * from emp left join dept on emp.dep_id = dept.did;

执行语句结果如下:

结果显示查询到了左表(emp)中所有的数据及两张表能关联的数据。

  • 查询dept表所有数据和对应的员工信息(右外连接)
select * from emp right join dept on emp.dep_id = dept.did;

执行语句结果如下:

结果显示查询到了右表(dept)中所有的数据及两张表能关联的数据。

要查询出部门表中所有的数据,也可以通过左外连接实现,只需要将两个表的位置进行互换:

select * from dept left join emp on emp.dep_id = dept.did;

🎈子查询

  • 概念

    查询中嵌套查询,称嵌套查询为子查询。

    什么是查询中嵌套查询呢?我们通过一个例子来看:

    需求:查询工资高于猪八戒的员工信息。

    来实现这个需求,我们就可以通过二步实现,第一步:先查询出来 猪八戒的工资

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 等关键字进行条件判断
    • 子查询语句结果是多行多列,子查询语句作为虚拟表
  • 案例
    • 查询 ‘财务部’ 和 ‘市场部’ 所有的员工信息
-- 查询 '财务部' 或者 '市场部' 所有的员工的部门did
select 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多表查询的文章就介绍到这了,更多相关MySQL多表查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL交换分区的实例详解

    MySQL交换分区的实例详解

    这篇文章主要介绍了MySQL交换分区的实例详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • MySQL表的创建及字段介绍(小白入门篇)

    MySQL表的创建及字段介绍(小白入门篇)

    这篇文章主要为大家介绍了MySQL表的创建及字段介绍(小白入门篇),有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • mysql实现if语句判断功能的6种使用形式小结

    mysql实现if语句判断功能的6种使用形式小结

    这篇文章主要给大家介绍了关于mysql实现if语句判断功能的6种使用形式,MySQL的IF既可以作为表达式用,也可在存储过程中作为流程控制语句使用,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • SQL 聚合、分组和排序

    SQL 聚合、分组和排序

    这篇文章主要介绍了SQL 聚合、分组和排序,文章围绕SQL 聚合、分组、排序的相关资料展开具体内容,需要的朋友可以参考一下
    2021-11-11
  • mysql-canal-rabbitmq 安装部署超详细教程

    mysql-canal-rabbitmq 安装部署超详细教程

    这篇文章主要介绍了mysql-canal-rabbitmq 安装部署超详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Win下Mysql5.6升级到5.7的方法

    Win下Mysql5.6升级到5.7的方法

    MySQL的升级方式分为两种:原地升级和逻辑升级。这两种升级方式,本质没有什么区别的,下面通过本文给大家详细介绍Win下Mysql5.6升级到5.7的方法,需要的的朋友参考下
    2017-04-04
  • MySQL 字符串日期格式转换的几种方法

    MySQL 字符串日期格式转换的几种方法

    MySQL经常需要将字符串类型的日期转换成日期或时间类型,本文主要介绍了MySQL 字符串日期格式转换的几种方法,包括使用STR_TO_DATE()和DATE_FORMAT()函数,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • mysql多表联合查询返回一张表的内容实现代码

    mysql多表联合查询返回一张表的内容实现代码

    在使用mysql多表联合查询时怎样可以做到只返回返回一张表的内容,本文将详细介绍,需要了解的朋友可以参考下
    2012-12-12
  • MySQL中对表连接查询的简单优化教程

    MySQL中对表连接查询的简单优化教程

    这篇文章主要介绍了MySQL中对表连接查询的简单优化教程,表连接查询是MySQL最常用到的基本操作之一,因而其的优化也非常值得注意,需要的朋友可以参考下
    2015-12-12
  • MySql闪退和服务无法启动的解决方法

    MySql闪退和服务无法启动的解决方法

    今天小编就为大家分享一篇关于MySql闪退和服务无法启动的解决方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02

最新评论