MySql连接查询方式详解

 更新时间:2022年09月19日 09:08:18   作者:在人间负债^  
这篇文章主要介绍了mysql连接查询,当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回,本文给大家介绍的非常详细,需要的朋友参考下吧

1. 什么是连接查询

从一张表中单独查询,称为单表查询。

跨表查询,多张表联合其来查询,称为连接查询。

2. 连接查询的方式

内连接:

  • 等值连接
  • 非等值连接
  • 自连接

外连接:

  • 左外连接(左连接)
  • 右外连接(右连接)

当对多张表进行查询,没有任何限制的时候,返回的值是笛卡尔积

3. 内连接

1. 等值连接

查询每个员工所在部门名称,显示员工名和部门名?

emp e 和 dept d 表进行连接,条件是:e. deptno = d.deptno

SQL92语法

mysql> select e.ename, d.dname from emp e, dept d where e.deptno = d.deptno;

SQL99语法

mysql> select e.ename, d.dname from emp e join dept d on e.deptno = d.deptno;

SQL92的缺点:结构不清晰,表的连接条件,和后期进一步筛选的条件,都放到了where后面。

SQL99的优点:表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后继续添加where语句。

2. 非等值连接

找出每个员工的薪资等级,要求显示员工名、薪资、薪资等级?

mysql> select e.ename, e.sal, s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;

3. 自连接

查询员工的上级领导,要求显示员工名对应的领导名?

一张表看成两张表

emp a 员工表

emp b 领导表

mysql> select a.ename as '员工名', b.ename as '领导名' from emp a join emp b on a.mgr = b. empno;

4. 外连接

与内连接不同的地方在于,内连接对于没有匹配的值,就不在查询结果中;而外连接对于没有匹配的值,依旧存在与查询结果中。

right:将 join 关键字右边的表看为主表

left:将 join 关键字左边的表看为主表

1. 右外连接

mysql> select e.ename, d.dname from emp e right join dept d on e.deptno = d.deptno;

2. 左外连接

mysql> select e.ename, d.dname from dept d left join emp e on e.deptno = d.deptno;

查询每个员工的上级领导,要求显示所有员工的姓名和领导姓名?

mysql> select a.ename as '员工名', b.ename as '领导名' from emp a left join emp b on a.mgr = b.empno;

5. 多张表(两张以上)连接

找出每个员工的部门名称以及工资等级,要求显示员工名、薪资、薪资等级?

select e.ename, e.sal, d.dname, s.grade from emp e join dept d on e.deptno = d.deptno join salgrade s on e.sal between s.losal and s.hisal;

到此这篇关于MySql连接查询方式详解的文章就介绍到这了,更多相关MySql连接查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 教你解决往mysql数据库中存入汉字报错的方法

    教你解决往mysql数据库中存入汉字报错的方法

    这篇文章主要介绍了Mysql基础之教你解决往数据库中存入汉字报错的方法,文中有非常详细的代码示例,对正在学习mysql的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05
  • 8种MySQL分页方法总结

    8种MySQL分页方法总结

    这篇文章主要介绍了8种MySQL分页方法总结,小编现在才知道,MySQL分页竟然有8种实现方法,本文就一一讲解了这些方法,需要的朋友可以参考下
    2015-01-01
  • MYSQL多表联查on和where的区别小结

    MYSQL多表联查on和where的区别小结

    在使用left join时过滤条件放到on后面还是where后面是有区别的,如果没有搞清楚他们的区别,连表汇总的结果就会变少或者变多,本文就来详细介绍一下两者的区别,感兴趣的可以了解一下
    2023-11-11
  • MySQL 8.0 之索引跳跃扫描(Index Skip Scan)

    MySQL 8.0 之索引跳跃扫描(Index Skip Scan)

    这篇文章主要介绍了MySQL 8.0 之索引跳跃扫描(Index Skip Scan)的相关资料,帮助大家学习MySQL8.0的新特性,感兴趣的朋友可以了解下
    2020-10-10
  • 利用MySQL函数实现判断视频扩展名的代码

    利用MySQL函数实现判断视频扩展名的代码

    MySQL拥有强大的自定义函数功能,如下,我写了一个用MySQL函数 判断视频地址是否可以手机端播放
    2012-02-02
  • MySQL多表查询详解上

    MySQL多表查询详解上

    这篇文章主要介绍了MySQL多表查询详解上,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 一条慢SQL语句引发的改造之路

    一条慢SQL语句引发的改造之路

    这篇文章主要给大家介绍了关于一条慢SQL语句引发的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • MySQL报错 table “xxx” doesn‘t exit的解决

    MySQL报错 table “xxx” doesn‘t exit的解决

    本文主要介绍了MySQL报错 table “xxx” doesn‘t exit的解决,主要原因是英文字母大小写敏感导致,下面就来介绍一下解决方法,感兴趣的可以了解一下
    2023-10-10
  • win10下mysql 8.0.11 压缩版安装教程

    win10下mysql 8.0.11 压缩版安装教程

    这篇文章主要为大家详细介绍了win10下mysql 8.0.11 压缩版安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Ubuntu搭建Mysql+Keepalived高可用的实现(双主热备)

    Ubuntu搭建Mysql+Keepalived高可用的实现(双主热备)

    本文主要介绍了Ubuntu搭建Mysql+Keepalived高可用的实现(双主热备),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论