博客
关于我
MySQL学习-连接查询
阅读量:799 次
发布时间:2023-02-12

本文共 1122 字,大约阅读时间需要 3 分钟。

连接查询

在实际开发中,通常需要从多张表中查询数据以获取最终结果。一个业务通常对应多张表,例如员工、部门、薪水等。以下是连接查询的详细说明。

连接查询的分类

根据连接方式划分,包括:

  • 内连接:两张表作为平等实体连接。

    • 等值连接:基于字段值进行连接。
    • 非等值连接:基于字段非值关系进行连接。
    • 自连接:一张表连接自身。
  • 外连接:一张表作为主表,另一张作为副表。

    • 左外连接:左边表为主表。
    • 右外连接:右边表为主表。

连接查询原理及笛卡尔积现象

笛卡尔积现象是指两张表连接时,所有记录都进行匹配,导致结果数量为两张表记录数的乘积。例如,若员工表有10条记录,部门表有5条记录,笛卡尔积将产生50条记录。

避免笛卡尔积现象的方法:在WHERE子句中添加连接条件,确保只匹配有效记录。

内连接之等值连接

案例:找出每个员工所属的部门名称。

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

结果将显示每个员工对应的部门名称,避免了笛卡尔积现象。

内连接之非等值连接

案例:找出每个员工的薪资等级。

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

结果将显示员工名、薪资和对应的薪资等级。

内连接之自连接

案例:找出每个员工的上级领导。

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

结果将显示员工名及其对应的领导名。

外连接

案例:找出所有部门及其对应的员工名。

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

结果将显示所有部门的名称及其对应的员工名,包括部门中没有员工的记录。

多张表连接查询

案例:找出每个员工的部门名称、薪资等级及上级领导。

select e.ename, d.dname, s.grade, e1.ename as '领导名' from emp ejoin dept d on e.deptno = d.deptnojoin salgrade s on e.sal between s.losal and s.hisalleft join emp e1 on e.mgr = e1.empno;

结果将显示每个员工的详细信息,包括领导名,外连接确保所有员工数据被包含。

转载地址:http://hrbfk.baihongyu.com/

你可能感兴趣的文章
nanoGPT 教程:从零开始训练语言模型
查看>>
NASA网站曝严重漏洞,或将沦为黑客钓鱼网站?
查看>>
Nash:轻量级、安全且可靠的脚本语言
查看>>
NAS、SAN和DAS的区别
查看>>
NAS个人云存储服务器搭建
查看>>
NAS服务器有哪些优势
查看>>
NAT PAT故障排除实战指南:从原理到技巧的深度探索
查看>>
nat 网卡间数据包转发_你是不是从来没有了解过光纤网卡,它跟普通网卡有什么区别?...
查看>>
NAT-DDNS内网穿透技术,快解析DDNS的优势
查看>>
NAT-DDNS内网穿透技术,快解析DDNS的优势
查看>>
NAT-DDNS内网穿透技术,解决动态域名解析难题
查看>>
natapp搭建外网服务器
查看>>
NativePHP:使用PHP构建跨平台桌面应用的新框架
查看>>
nativescript(angular2)——ListView组件
查看>>
NativeWindow_01
查看>>
Native方式运行Fabric(非Docker方式)
查看>>
Nature | 电子学“超构器件”, 从零基础到精通,收藏这篇就够了!
查看>>
Nature和Science同时报道,新疆出土四千年前遗骸完成DNA测序,证实并非移民而是土著...
查看>>
Nature封面:只低一毫米,时间也会变慢!叶军团队首次在毫米尺度验证广义相对论...
查看>>
Nat、端口映射、内网穿透有什么区别?
查看>>