MySql连接查询方式详解

2023年 4月 15日 39.1k 0

目录 1. 什么是连接查询 2. 连接查询的方式 3. 内连接 1. 等值连接 2. 非等值连接 3. 自连接 4. 外连接 1. 右外连接 2. 左外连接 5. 多张表(两张以上)连接 1. 什么是连接查询 从一张表中单

目录1. 什么是连接查询2. 连接查询的方式3. 内连接1. 等值连接2. 非等值连接3. 自连接4. 外连接1. 右外连接2. 左外连接5. 多张表(两张以上)连接

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连接查询内容请搜索每日运维以前的文章或继续浏览下面的相关文章希望大家以后多多支持每日运维!

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论