热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL高级③(多表查询)

文章目录笛卡尔积多表查询种类内连接查询隐式内连接显示内连接外连接查询子查询单行单列多行单列多行多列笛卡尔积首先我们有两张表:emp表:dept表&#x

文章目录

  • 笛卡尔积
  • 多表查询种类
  • 内连接查询
    • 隐式内连接
    • 显示内连接
  • 外连接查询
  • 子查询
    • 单行单列
    • 多行单列
    • 多行多列


笛卡尔积

首先我们有两张表:
emp表:
在这里插入图片描述
dept表:
在这里插入图片描述
现在我们执行以下语句:

select * from emp , dept; -- 从emp和dept表中查询所有的字段数据

结果:
在这里插入图片描述
从上面的结果我们看到有一些无效的数据,如 孙悟空 这个员工属于1号部门,但也同时关联的2、3、4号部门。

这就是笛卡尔积的情况。也就是说它会在两表集合中取出所有可能情况。

所以我们要通过限制员工表中的 dep_id 字段的值和部门表 did 字段的值相等来消除这些无效的数据:

select * from emp , dept where emp.dep_id = dept.did;

在这里插入图片描述
上面语句就是连接查询

多表查询种类

在这里插入图片描述

内连接查询

内连接相当于查询 A B 交集数据
在这里插入图片描述

语法:

-- 隐式内连接
SELECT 字段列表 FROM1,2WHERE 条件;-- 显示内连接
SELECT 字段列表 FROM1 [INNER] JOIN2 ON 条件;

隐式内连接

在这里插入图片描述
我们前面所得到的这张表就属于隐式内连接。现在我们可以取其中的几列进行搜寻:

SELECTemp. NAME,emp.gender,dept.dname
FROMemp,dept
WHEREemp.dep_id = dept.did;

因为两张表的字段可能会有重合,所以我们在SELECT字段的时候最好是带上字段所属表的前缀。

同时考虑到表的名字可能会很长,这就给我们带来不必要的麻烦。所以我们可以给表起别名。

SELECTt1. NAME,t1.gender,t2.dname
FROMemp t1,dept t2
WHEREt1.dep_id = t2.did;

这段代码与上面的代码是等价的,执行结果如下:
在这里插入图片描述
因为是内连接,所以取得是交集,我们可以发现在这张表中,没有小白龙,还有销售部。

显示内连接

同样是上面的结果,如果我们使用显示内连接来写,如下:

select * from emp inner join dept on emp.dep_id = dept.did;
-- 上面语句中的inner可以省略,可以书写为如下语句
select * from emp join dept on emp.dep_id = dept.did;

外连接查询

在这里插入图片描述

左外连接和右外连接本质上是可以相互转换的,换个位置就行了

例如还是前文的两张表:
使用左外连接:

select * from emp left join dept on emp.dep_id = dept.did;

结果:
在这里插入图片描述
使用右外连接:

select * from emp right join dept on emp.dep_id = dept.did;

在这里插入图片描述

子查询

子查询说白了就是嵌套查询。

子查询根据结果不同,作用也不同:

  • 单行单列
  • 多行单列
  • 多行多列

在这里插入图片描述

单行单列

例如:查询工资高于猪八戒的员工信息

select * from emp where salary > (select salary from emp where name = '猪八戒');

多行单列

例如:查询 ‘财务部’ 和 ‘市场部’ 所有的员工信息。
那我们的思路是要先查询这两个部门的id号,再根据这个id号去查找具体的员工

select did from dept where dname = '财务部' or dname = '市场部';select * from emp where dep_id in (select did from dept where dname = '财务部' or dname = '市场部');

多行多列

例如:查询入职日期是 ‘2011-11-11’ 之后的员工信息和部门信息
我们思路是先查询入职日期是 ‘2011-11-11’ 之后的员工信息,然后将结果与dept表进行内连接

-- 查询入职日期是 '2011-11-11' 之后的员工信息
select * from emp where join_date > '2011-11-11' ;
-- 将上面语句的结果作为虚拟表和dept表进行内连接查询
select * from (select * from emp where join_date > '2011-11-11' ) t1, dept where t1.dep_id = dept.did;


推荐阅读
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • MySQL外键1对多问题的解决方法及实例
    本文介绍了解决MySQL外键1对多问题的方法,通过准备数据、创建表和设置外键关联等步骤,实现了用户分组和插入数据的功能。详细介绍了数据准备的过程和外键关联的设置,以及插入数据的示例。 ... [详细]
  • 本文介绍了在MySQL8.0中如何查看性能并解析SQL执行顺序。首先介绍了查询性能工具的开启方法,然后详细解析了SQL执行顺序中的每个步骤,包括from、on、join、where、group by、having、select distinct、union、order by和limit。同时还介绍了虚拟表的概念和生成过程。通过本文的解析,读者可以更好地理解MySQL8.0中的性能查看和SQL执行顺序。 ... [详细]
  • 本文介绍了在SQL中查询分组后每组行数的统计方法。通过使用count()函数和GROUP BY子句可以统计每组的行数,但是如何统计所有组的行数呢?本文提供了一种实现方法,并给出了相应的SQL查询语句。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了通过mysql命令查看mysql的安装路径的方法,提供了相应的sql语句,并希望对读者有参考价值。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
author-avatar
mobiledu2502869153
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有