连接查询(MySQL)


前言

介绍MySQL的连续查询操作我们选择使用可视化软件Navicat,对应的数据库使用了某公司员工数据库,该数据库包含员工信息表、部门信息表、公司地址信息表、工作职业信息表、员工等级表。

当遇到多表查询(查询的字段来自多个表时)就需要用到连接查询,根据前面介绍的知识,直接from对应的表的话,就会遇到笛卡尔乘积现象,这个时候为了解决问题,我们就要通过增加有效的连接手段来避免。

连接查询分类

∙ \bullet 按功能分类:

∙ \bullet 按年代分类:sql92标准、sql99标准。其中sql92只支持内连接,sql99支持内连接、左(右)外连接、交叉连接。

sql92连接

内连接显示的是多个表之间交集的部分,n表连接至少需要n-1个连接条件。

等值连接

语法

select 查询列表
from 表1 别名,表2 别名
where 表1.key=表2.key
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】

示例一:查询员工名和对应的部门名

示例二:查询有奖金的员工名、部门名

示例三:查询员工名、部门名和所在城市(三表连接)

特点

∙ \bullet 为表起别名,方便书写,区分重名的字段,起别名后查询字段只能用别名

∙ \bullet 两个表的顺序可以调换

∙ \bullet 可以加筛选where,后面使用and接下一个筛选条件

∙ \bullet 可以加分组、进行排序,可以实现多表连接

非等值连接

where语句下的连接条件不再是等于号。

示例一:查询员工的工资和工资级别

自连接

在一个表中进行查询,一定要记得起别名来进行区分。

示例一:查询员工名和上级的名称

sql99连接

语法

select 查询列表
from 表1 别名
【连接类型】 join 表2 别名 on 连接条件 【where 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】

注意:多表连接时重复【连接类型】join 表2 别名 on 连接条件

内连接

连接类型为inner,其余于sql92的内连接基本相同。

等值连接

示例一:查询部门个数大于3的城市名和部门个数

示例二:查询员工名、部门名、工种名,并按部门名降序

特点

∙ \bullet 添加排序、分组、筛选

∙ \bullet inner可以省略

∙ \bullet 筛选条件放在where之后,连接条件放在on之后,提高分离性,便于阅读

∙ \bullet inner join 连接于sql92连接效果相同,都是查询多表的交集部分

非等值连接

示例一:查询员工的工资和工资级别

自连接

示例一:查询员工的名字、上级的名字

外连接

用于查询一个表中有,另一个表中没有的信息。分主从表,显示信息为主表全部信息,当对应的项没有记录时用null填充。左外连接的连接类型为left 【outer】,右外连接的连接类型为right 【outer】,全外连接的连接类型为full 【outer】

左(右)外连接

左外、右外连接的唯一区别是表示的主从表不同。即左外连接left左边的表为主表,右边的表为从表;右外连接右边的表为主表,左边的表为从表。

示例一:查询哪个部门没有员工

全外连接

mysql不支持全外连接,所以这里简单的介绍一下全外连接的功能。

全外连接=内连接的结果+表1中有但表2没有的+表2中有表1中没有的

交叉连接

交叉连接的连接类型为cross,不加on连接条件,最终实现的结果相当于笛卡尔集。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比奇堡咻飞兜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值