mysql连接查询和子查询效率_子查询和连接查询性能

mysql连接查询和子查询效率_子查询和连接查询性能多表连接的基本语法 多表连接,就是将几张表拼接为一张表,然后进行查询 select 字段1, 字段2, … from 表1 {inner|lift|right} join 表2 on 连接条件;

MySQL之连接查询和子查询

多表连接的基本语法

多表连接,就是将几张表拼接为一张表,然后进行查询

select 字段1, 字段2, ...
from 表1 {inner|lift|right} join 表2
on 连接条件;

有如下两张表:部门表和员工表

mysql连接查询和子查询效率_子查询和连接查询性能

mysql连接查询和子查询效率_子查询和连接查询性能

交叉连接和笛卡尔积现象

交叉连接

交叉连接,又名无条件内连接/笛卡尔连接

第一张表种的每一项会和另一张表的每一项依次组合

select * from employee,department;

mysql连接查询和子查询效率_子查询和连接查询性能

上述结果肯定不是我们想晓得的,左表中每一个人都有4个部门,仔细观察这4条记录,正好是左表每一条记录和右表一一匹配后的结果。

笛卡尔积现象

mysql连接查询和子查询效率_子查询和连接查询性能

笛卡尔积现象产生的原因:两张表没有有效的连接条件。既然你没有连接条件,本表中的第一行肯定是能和另外表中的所有行进行一一匹配,同理,本表中的第二行肯定是能和另外表中的所有行进行一一匹配,以此类推,本表中的最后一行m也可以和另外表中的所有行进行一一匹配。若另外一张表有n行,那么最后显示的行数,肯定就是m*n行了。

如果不想产生笛卡尔积现象,就需要添加有效的表连接条件。拿上述例子来说,左表dep_id只有和右表id相等时,才代表他们的部门。

内连接

内连接(INNER JOIN)是找几张表的交集,即根据条件筛选出来正确的结果。

select emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
from employee as emp INNER JOIN department as dep
on emp.dep_id=dep.id;

mysql连接查询和子查询效率_子查询和连接查询性能

由于部门表中没有id=5的部门,所以员工表dep_id=5的这条记录没有返回;而由于行政部没有员工,所以这条记录也没返回。

外连接

左外连接

左连接(left join)是以左表为准,如果右表中没有合适的记录,用NULL补全;其本质是在内连接的基础上增加左表有结果而右表没有的记录(内连接时,这种情况的记录会忽略)。

select emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
from employee as emp left join department as dep
on emp.dep_id=dep.id;

mysql连接查询和子查询效率_子查询和连接查询性能

右外连接

跟左连接正好相反,右连接(right join)是以右表为准,如果左表中某些字段没有合适的结果,用NULL补全;其本质是在内连接的基础上增加右表有结果而左表没有的记录(内连接时,这种情况的记录会忽略)。

select emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
from employee as emp right join department as dep
on emp.dep_id=dep.id;

mysql连接查询和子查询效率_子查询和连接查询性能

全外连接

全外连接,在内连接的基础上,展示左右表的所有的记录,而左右表中缺省记录以NULL补全。

MySQL中并没有全外连接的FULL JOIN语法,而是借助UNION/UNION ALL语句实现。

UNIONUNION ALL的区别,UNION具有去重功能。

select emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
from employee as emp left join department as dep
on emp.dep_id=dep.id
union
select emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
from employee as emp right join department as dep
on emp.dep_id=dep.id;

mysql连接查询和子查询效率_子查询和连接查询性能

子查询

子查询是将一个查询语句嵌套再另一个查询语句中的查询方式:

  • 子查询的内层查询结果,可以作为外层查询语句提供查询条件。
  • 子查询中可以包含INNOT INANDALLEXISTSNOT EXISTS等关键字。
  • 子查询中还可以包含比较运算符,如=!=><等。
-- 查询平均年龄在20以上的部门名称
select name
from department
where id in (
select dep_id
from employee
group by dep_id
having avg(age) > 20);

-- 查询财务部员工姓名
select name 
from employee
where dep_id in (
select id 
from department 
where name="财务部");


-- 查询所有大于平均年龄的员工的年龄和姓名
select name,age 
from employee 
where age > (
select avg(age) from employee);

mysql连接查询和子查询效率_子查询和连接查询性能

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5882.html

(0)
上一篇 2023-04-21 20:00
下一篇 2023-04-22

相关推荐

  • python微信自动回复脚本(Python自动回复代码)

    python微信自动回复脚本(Python自动回复代码)您好!很高兴能为您解答,   最近在网上转悠, 无意中发现一个python库:itchat, 这个库能用来干嘛呢, 用这个库可以实现很多有趣的功能如: 微信群发、检测好友是否被你拉黑、让你的微信实现自动回复等。 原理大概是封装了微信网页版的http请求。 想起前几天写的爬取糗事百科的爬虫, 觉得两者可以合在一起, 把自己的微信做成一个可以自动回复段子的简单机器人。

    2023-11-29
    116
  • Python安装库方法

    Python安装库方法Python是一种面向对象、解释型计算机程序设计语言,它在人工智能、Web开发、数据科学、游戏开发等众多领域都有应用。这些应用从底层到应用层都需要许多扩展库的支持,在Python中,安装扩展库是非常简单的事情。本文将介绍Python安装库的方法,一方面让初学者快速熟悉Python库的安装流程,另一方面可以帮助开发人员快速选取对应的库。

    2024-04-30
    74
  • 用PyQt5 UI转换Py文件的方法

    用PyQt5 UI转换Py文件的方法PyQt5是Python的一个GUI库,它支持使用不同的工具创建用户界面。我们可以使用Qt Designer创建用户界面,然后使用PyQt5将它们转化为Python文件。这样做的好处是可以提高界面设计的效率。本文将介绍如何用PyQt5 UI转换Py文件的方法。

    2024-07-29
    30
  • 利用Python操作字典快速实现数据处理

    利用Python操作字典快速实现数据处理Python中的字典是一种无序的键值对集合,用{}括起来,其中每个键值对用冒号 : 分割,每个键值对之间用逗号 , 隔开。它的基本操作包括以下几种:

    2024-01-24
    112
  • mysql基础入门使用和命令的使用顺序_MySQL常用命令

    mysql基础入门使用和命令的使用顺序_MySQL常用命令数据库了解 概念 数据库就是一种特殊的文件,其中存储着需要的数据 一个数据库可以有多张表 MySQL是一种关系型数据库 具有关联性数据的就是关系型数据库 MySQL是一种软件可以用来创建mysql数据

    2022-12-29
    142
  • java JDBC工具类 分包[通俗易懂]

    java JDBC工具类 分包[通俗易懂]JDBC工具类 “获得数据库连接”操作,将在以后的增删改查所有功能中都存在,可以封装工具类JDBCUtils。提供获取连接对象的方法,从而达到代码的重复利用。 该工具类提供方法:public sta…

    2023-03-29
    162
  • Spark基础和RDD「建议收藏」

    Spark基础和RDD「建议收藏」spark 1. Spark的四大特性 1. 速度快 spark比mapreduce快的两个原因 1. 基于内存 2. 进程与线程 2. 易用性 1. 可以用java、scala、python、R等不

    2023-01-24
    153
  • MySQL 操作已存在的表(ALTER TABLE)[通俗易懂]

    MySQL 操作已存在的表(ALTER TABLE)[通俗易懂]说明: &lt;&gt; 中的内容是自己定义的内容 [] 中的内容是可以省略的 field 包含字段名和数据类型,field_name 仅指字段名 table_name 指表名 pos

    2023-03-09
    155

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注