MySQL——连接查询与子查询

一、连接查询

单表查询:在一张表当中查询数据,叫做单表查询。

连接查询,结合俩(多)张表,在俩张(多)表当中查询数据,在一张表当中查询一部分,在另一张表当中查询另一部分数据,这种跨表查询,连接多张表查询数据的方法叫做连接查询!

连接查询分为:SQL92语法,SQL99语法。目前主流使用SQL99语法。

SQL92 的语法 结构更加的粗糙,语法结构不清晰 表连接的判断和其他条件都放在了where 后面,非常的混乱。select.....from .....where....

SQL99的语法结构清晰,某一个表和另一个表连接用 join, 然后判断条件放在on 的后面。select.....from......inner join.....on.....inner join....on....where.....(inner 可以省略,但加上语法结构更清晰)

笛卡尔积现象:

当连接俩张表进行查询的时候,如果没有任何限制的情况下,查询的次数为两张表所有记录的乘积!

这个时候内外连接的限制条件的作用就体现出来了!

1、内连接:

等值连接:查询结果是由where 条件的等号来 决定的

上面虽然查询出来想要的结果,但是查询次数依旧没有减少,只是筛选出来了而已。同时我们也知道在今后连接的表的数量越少越好,否则会使效率降低!

非等值连接:

自连接:一张表当做两张表来解决。

2、外连接(right/left + outer[outer可以省略]):

内连接与外连接的区别:内连接没有主次关系,两(多)张表是平级的,而外连接有主次关系,主要是查什么,其次是查什么!

左外连接(left): 表示join关键字左边的表是主表,主要是查出左边表的数据,顺带将右边的表的数据也查出来。

右外连接(right):表示join关键字右边的表是主表,主要是查出右边表的数据,顺带将左边的表的数据也查出来。

总结:外连接的查询次数 >= 内连接的查询次数。

多表连查:

使用select .....from ......join....on......join....on.....where.....group by .......having........order by .......

例如查:找出每个员工的部门名称和工资等级,上级领导,显示出员工名字,领导名,部门名,工资,工资等级。

select e.ename,d.dname,n.ename as '上级',e.sal,s.grade from emp e join dept d on e.deptno = d.deptno left join emp n on e.mgr = n.empno join salgrade s on e.sal between s.losal and s.hisal;

三、全连接(用的很少)


二、子查询

子查询:select 语句当中嵌套select语句,被嵌套的select语句被称为子查询。

子查询语句可以放在select ,from ,where 后面。

where子句中出现子查询:

例如:查询员工当中大于800元的员工姓名和工资

from 子句当中出现子查询:

注意:from 当中的子查询,可以把子查询当中查出来的东西当中一张临时表。

例如:找出每个岗位的平均工资的薪资等级?

select t.*,s.grade from (select job,avg(sal) as avgsal from emp group by job) t join salgrade s on t.avgsal between s.losal and s.hisal;

select t.*,s.grade from (select ename,avg(sal) as avgsal from emp) t join salgrade s on t.avgsal between s.losal and s.hisal;

select 子句当中的出现的子查询:

查询每个员工的部门名称,要求显示部门名和员工名?

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

注意:select后的子查询返回的结果只能是返回一条,当多余一条的时候,就会报错!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/102942.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE4/UE5 动画控制

工程下载​ ​​​​​​​​​​​​​https://mbd.pub/o/bread/ZJ2cm5pu 蓝图控制sequence播放/倒播动画: 设置开启鼠标指针,开启鼠标事件 在场景中进行过场动画制作 设置控制事件

MySQL的概述、版本、安装过程

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 一、MySQL的概述 二、MySQL的版本 三、MySQL的下载与安装 前言 本文将来谈谈MySQL的概述,MySQL的版本,以及它…

实相融、云启未来,智慧公厕让城市生活更美好

现代社会,随着科技的不断发展,人们对于城市生活的要求也在不断提升。在这个过程中,智慧公厕作为城市基础设施中的重要组成部分,正在发挥着越来越重要的作用。通过数字化、云管理、人工智能等未来的科技方式,智慧公厕为…

Android lint配置及使用

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、将 lint 配置为不显示警告3.1 在 A…

OpenWrt系统开发笔记

openWrt英文官网: https://openwrt.org/ 中文官网: http://www.openwrt.org.cn/ 一、开发环境及编译 在github上有两个源码使用的比较多   一个是lede,地址为:https://github.com/coolsnowwolf/lede   另一个为OpenWrt的官方源码&#…

【美团3.18校招真题1】

大厂笔试真题网址:https://codefun2000.com/ 塔子哥刷题网站博客:https://blog.codefun2000.com/ 小美剪彩带 提交网址:https://codefun2000.com/p/P1088 题意:找出区间内不超过k种数字子数组的最大长度 使用双指针的方式&…

【JAVA】Object类与抽象类

作者主页:paper jie_的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和…

包管理工具--》发布一个自己的npm包

包管理工具系列文章目录 一、包管理工具--》npm的配置及使用(一) 二、包管理工具--》npm的配置及使用(二) 三、包管理工具--》发布一个自己的npm包 四、包管理工具--》yarn的配置及使用 五、包管理工具--》其他包管理器之cnpm…

【PTA】浙软2020年上机题目自测

个人学习记录,代码难免不尽人意。 在PTA买了浙软2020年的保研上机真题时光机做了做,20年的明显要比19年的难一些,我用了差不多2小时多一点做完了,最后得分90分,在当年排名26左右。下面是4道题和我的做法 7-1 Standard…

[MySQL]查看数据库大小

查看库大小 例如:查看当前MySQL中数据总量超过2GB的库: select table_schema as 数据库,table_rows as 记录数,data_size as 数据容量(GB),index_size as 索引容量(MB) from (selecttable_schema,sum(table_rows) as table_rows,sum(truncate(data_leng…

C++毕业设计基于QT实现的超市收银管理系统源代码+数据库

C毕业设计基于QT实现的超市收银管理系统源代码数据库 编译使用 编译完成后,需要拷贝 file目录下的数据库 POP.db文件到可执行程序目录下 登录界面 主界面 会员管理 完整代码下载地址:基于QT实现的超市收银管理系统源代码数据库

高频golang面试题:简单聊聊内存逃逸?

文章目录 问题怎么答举例 问题 知道golang的内存逃逸吗?什么情况下会发生内存逃逸? 怎么答 golang程序变量会携带有一组校验数据,用来证明它的整个生命周期是否在运行时完全可知。如果变量通过了这些校验,它就可以在栈上分配。…