MySQL数据库中去重与连接查询的方法
导读:本文共4408字符,通常情况下阅读需要15分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 目录1.去重2.连接查询使用where进行多表连接查询内连接 - 等值连接内连接 - 非等值连接内连接 - 自连接外连接 - 左右外连接三表连接1.去重示例表内容参考此文章有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。例如:去重显示岗位信息:mysql>selectdistinctjob... ...
目录
(为您整理了一些要点),点击可以直达。1.去重
2.连接查询
使用where进行多表连接查询
内连接 - 等值连接
内连接 - 非等值连接
内连接 - 自连接
外连接 - 左右外连接
三表连接
示例表内容参考此文章
有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。
例如:去重显示岗位信息:
另一个示例:联合去重,查找部门和岗位的独有信息:
另一个示例:现在我们想统计一下工作岗位的数量,结合使用count函数:
我们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。
JOIN 按照功能大致分为如下三类:
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
多表连接的机制是:从其中一个表中取出每一条数据,从另一个表中的数据行进行匹配。这就涉及到了效率控制问题
现在我们来演示一个例子:取出每个员工的名字和部门名字:
上面的sql语句实际上效率很低,我们尝试进行优化(给表起别名):(sql92语法)
注意:表的连接次数越多,效率越低,请尽量减少表的连接次数!
还是上面的例子,取出每个员工的名字和部门名字:(sql99语法)
内连接,我们使用inner
sql99的优点是:表的连接是独立的,不占用where的位置。使sql语句整体更加清晰
案例:找出每个员工的薪资等级,要求显示员工名,薪资,薪资等级
案例:查询员工的上级领导,要求显示员工名和对应的领导名
我们可以发现,员工和领导的关系在一张表中,此时需要用到自连接(技巧:一张表看成两张表)
外连接与内连接的区别是,外连接没有匹配成功的某一个表的记录也会被取出
案例:查找员工的部门信息。要求部门即使没有员工也要查出
同样的,如果是左外连接,将查询出左表的全部数据,使用left join关键字即可
外连接的查询结果条数一定是 >= 内连接的查询结果条数
更为复杂的情况是,群表连接
我们来看一个案例:
找出每个员工的部门名称及工资等级。要求显示员工名,部门名,薪资,薪资等级
再来看一个更复杂的情况:
找出每个员工的部门名称及工资等级及领导名称。要求显示员工名,部门名,领导名,薪资,薪资等级
MySQL数据库中去重与连接查询的方法的详细内容,希望对您有所帮助,信息来源于网络。