详解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新建用户中的%到底包不包括localhost?

    MySQL新建用户中的%到底包不包括localhost?

    操作MySQL的时候发现,有时只建了%的账号,可以通过localhost连接,有时候却不可以,网上搜索也找不到满意的答案,干脆手动测试一波
    2019-02-02
  • MySQL中的随机抽取的实现

    MySQL中的随机抽取的实现

    本文主要介绍了MySQL中的随机抽取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • SQL语句实现多表查询

    SQL语句实现多表查询

    这篇文章主要介绍了SQL语句实现多表查询,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参一下下面文章详细内容
    2022-07-07
  • Mysql循环插入数据的实现

    Mysql循环插入数据的实现

    这篇文章主要介绍了Mysql循环插入数据的实现过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • MAC下Mysql5.7.10版本修改root密码的方法

    MAC下Mysql5.7.10版本修改root密码的方法

    这篇文章主要介绍了MAC下Mysql5.7.10版本修改root密码的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • MySQL存储过程中sql语句条件的in无效问题及解决

    MySQL存储过程中sql语句条件的in无效问题及解决

    这篇文章主要介绍了MySQL存储过程中sql语句条件的in无效问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 详解MySQL中的视图

    详解MySQL中的视图

    视图是一个虚拟表,非真实存在,其本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用视图名称即可获取结果集,并可以将其当作表来使用,这篇文章主要介绍了MySQL的视图,需要的朋友可以参考下
    2022-12-12
  • MySql获取当前时间并转换成字符串的实现

    MySql获取当前时间并转换成字符串的实现

    本文主要介绍了MySql获取当前时间并转换成字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Mysql深入了解联表查询的特点

    Mysql深入了解联表查询的特点

    这篇文章主要给大家介绍了关于MySQL联表查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2022-07-07
  • Mysql中实现修改主键自增值

    Mysql中实现修改主键自增值

    这篇文章主要介绍了Mysql中实现修改主键自增值方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论