mysql去掉两个最高分_数据分析系列 16/32 | MySQL中子查询与联合查询

2592cef190836db53dfadd23faa77cdc.gif

前面说了很多MySQL中的查询,比如条件查询、分组聚合查询、连接查询,今天来说一下另外两个非常的重要的查询,MySQL中的子查询和联合查询。

6ceb5716f7ffe175dec8e2f065aeaa0d.png

PART

01

子查询

子查询也称嵌套查询,是将一个查询语句嵌套在另一个查询语句的WHERE子句或者HAVING短语中,前者被称为内层查询或子查询,后者被称为外层查询或父查询。在整个SELECT语句中,先计算子查询,然后将子查询的结果作为父查询的过滤条件,嵌套查询可以用多个简单的查询构成一个复杂的查询,用来增强SQL的查询能力。

1、带IN关键字的查询

带IN关键字的子查询是最常用的一类子查询,用于判定一个给定值是否存在与子查询的结果集中,使用IN关键字进行子查询是,内层查询语句仅仅返回一个数据列,其值将提供给外层查询进行比较操作。

#在学生表tb_student中,将学号出现在成绩表tb_score中(表明该学生选修了课程)的学生姓名查询出来SELECT studentNameFROM tb_studentWHERE tb_student.studentNo IN(SELECT DISTINCT tb_score, studentNo  FROM tb_score);或SELECT DISTINCT studentNameFROM tb_student, tb_scoreWHERE tb_student.studentNo = tb_score.studentNo;

说明:在处理这类子查询时MySQL实际上执行了两个操作,即先执行内层查询,再执行外层查询,内层查询的结果作为外层查询的比较条件。也可以使用NOT IN来判定一个给定值不属于子查询的结果。但是,这类表示否定的查询不能用连接查询来改写。

2、带比较运算符的子查询

带比较运算符的子查询是指父查询与子查询之间用用比较运算符进行连接,当用户能确定知道内层查询返回的是单值时,可以用=、>、=、<=、!=(<>)等比较运算符构造子查询。

#查询班级“计算机17-1班”所有学生的学号、姓名SELECT studentNo, studentName FROMtb_studentWHERE classNo =(SELECT classNo FROM tb_classWHERE className = ‘计算机17-1班’)#查询与“李明”在同一个班学习的学生学号、姓名、班号SELECT studentNo, studentName, classNo FROMtb_student s1WHERE classNo =(SELECT classNo FROM tb_ students s2WHERE studentName=’李明’) AND studentName != ’李明’;#上面的最后一个条件,是为了从结果集中去掉李明本人。

比较运算符还可以与ALL、SOME、ANY关键字一起构造子查询。ALL、SOME、ANY用于指定对比较运算符的限制,ALL用于指定表达式需要与子查询结果集中的每个值都进行比较当表达式与每个值都满足比较关系时,会返回TRUE,否则返回FALSE,SOME和ANY是同义词,表示表达式与子查询结果集中的某个值满足比较关系时,就返回TRUE,否则返回FALSE。

#查询男生中比某个女生出生年份晚的学生姓名和出生年份SELECT studentName, YEAR(birthday) FROM tb_studentWHERE sex=’男’ AND YEAR(birthday)>ANY(SELECT YEAR(birthday) FROM tb_student WHEREsex=’女’);

3、带EXISTS关键字的子查询

使用关键字EXISTS构建子查询时,系统对子查询进行运算以判断它是否返回结果集,如果子查询的结果集不为空,则EXISTS返回的结果为TRUE,此时外层查询语句将进行查询,如果子查询的结果集为空,则EXISTS返回的结果为FALSE,此时外层查询不进行查询。

由于带EXISTS的子查询只返回TRUE或FALSE,内层查询的SELECT 子句给出字段名称的实际意义,所以其目标列表达式通常用星号“*”。与EXISTS相对应的是NOT EXISTS,使用方法相同。

#查询选修了课程号为“31002”的学生姓名SELECT studentName FROM tb_student aWHERE EXISTS(SELECT * FROM tb_score bWHERE a.studentNo= b.studentNo AND courseNo=’31002’);或SELECT studentName FROM tb_studentWHERE studentNo IN(SELECT studentNo FROM tb_score WHERE courseNo=’31002’);

说明:与关键字IN不同的是,外层的WHERE子句中关键字EXISTS前面没有指定内层查询结果集与外层查询的比较条件,故使用关键字EXISTS构造子查询时内层的WHERE子句中需要指定连接条件,即a.studentNo=b.studentNo。

a0c728be6dfb6ae69055d8cdffe12c51.png

PART

02

联合查询

使用UNION关键字可以把来自多个SELECT语句的结果组合到一个结果集中,这种查询称为并(UNION)运算或联合查询。合并时,多个SELECT子句中对应的字段数和数据类型必须相同。下面不使用ALL关键字,执行的时候去掉重复的记录,所有返回的行都是唯一的,使用关键字ALL的作用是不去掉重复的记录,也不对结果进行自动排序。

语法格式是:

SELECT -FROM -WHEREUNION [ALL]SELECT -FROM -WHERE[...UNION [ALL]SELECT -FROM -WHERE]

例子:

#使用UNION查询选修了“管理学”或“计算机基础”的学生学号SELECT studentNo FROM tb_score, tb_courseWHERE tb_score .courseNo= tb_course. courseNoAND courseName=’管理学’UNIONSELECT studentNo FROM tb_score, tb_courseWHERE tb_score .courseNo= tb_course. courseNoAND courseName=’ 计算机基础’;

使用UNION语句需要注意以下几点:

  • UNION语句必须由两条或两条以上的SELECT语句组成,且彼此间用关键字UNION分隔。
  • UNION语句中的每个SELECT子句必须包含相同的列、表达式或聚合函数。
  • 每个SELECT子句对应的目标列的数据类型必须兼容,目标列的数据类型不必完全相同,但必须是MySQL可以隐含转换的类型,例如,不同的数值类型或不同的日期类型。
  • 第一个SELECT子句对应的目标列名会被作 为UNION语句结果集的列名称。
  • 联合查询中只能使用一条ORDER BY自己或LIMIMT自己,且它们置于最后一条SELECT语句之后。

今天分享下MySQL中的子查询和联合查询,这对多层查询很有帮助,在工作中,我们常用的是子查询,因为很多数据都不是存储在一个表中,需要进行多层查询。

欢迎关注微信公众号,访问更多精彩:数据之魅

如需转载,请联系授权,谢谢合作。

b7e4968c6c307eb267319f1f75fc3384.png

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

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

相关文章

那些不回你微信的人都在看什么?

如何成为一个“聊得开”的人&#xff1f;如何丰富空闲时光&#xff1f;如何在短时间内获取最最专业的文化、艺术资讯&#xff1f;小编给大家推荐几个公众号它们有趣有颜有料长按二维码&#xff0c;选择“识别图中二维码”关注印客美学id&#xff1a;inkbetter△长按二维码“识别…

按照学号查找学生_[源码和文档分享]基于JAVA和MYSQL数据库的学生成绩管理系统...

一、需求分析本系统是学生成绩管理系统&#xff0c;所以应该做到可以录入学生成绩&#xff0c;修改学生成绩&#xff0c;删除学生成绩&#xff0c;查询学生成绩&#xff0c;以及最后的所有学生按照GPA排名。本系统的数据来源期末考试成绩&#xff0c;用来实现录入&#xff0c;查…

颜宁问4对科研夫妻:男科学家怎样平衡事业家庭?

全世界只有3.14 % 的人关注了爆炸吧知识本文来源&#xff1a;科学网网上很多人一说到我&#xff0c;就说颜宁之所以能成功&#xff0c;因为她是单身&#xff0c;没有家庭拖累。但事实上&#xff0c;有家庭、有事业才是绝大多数人的现状。我们这次请来四对科研伉俪&#xff0c;不…

WebService学习笔记---CXF入门

2019独角兽企业重金招聘Python工程师标准>>> 一、准备 软件环境&#xff1a; JDK1.8, Eclipse JEE 4.4, Maven-3.2.5, Spring-4, CXF-3.1.5 二、创建项目 新建一个Maven项目&#xff0c;在pom.xml里添加spring依赖<dependencyManagement><dependencies>…

.NET 6新特性试用 | ArgumentNullException卫语句

前言在前面的文章中&#xff08;《可空引用类型》&#xff09;&#xff0c;我们介绍过编译器会帮我们检查空引用&#xff0c;但是仅仅是警告。最好的方式还是在运行时用卫语句进行检查&#xff1a;private void Test(WeatherForecast weatherForecast) {if (weatherForecast n…

JSP之EL表达式详细介绍

一、JSP EL语言定义 E L&#xff08;Expression Language&#xff09; 目的&#xff1a;为了使 JSP写起来更加简单。 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言&#xff0c;它提供了在 JSP 中简化表达式的方法。它是一种简单的语言&#xff0c;基于可用的命名空…

那一年,爱因斯坦输得很惨很惨,被十几个诺奖得主怼了一遍后,退出了群聊……...

全世界只有3.14 % 的人关注了爆炸吧知识科学家撕逼原来这么刺激“遇事不决&#xff0c;量子力学”&#xff0c;作为长期在民间被调侃的学科&#xff0c;量子力学的名声不小&#xff0c;但它究竟有多重要&#xff0c;又是怎么来的&#xff0c;却少有人了解。而说到量子力学&…

带有帐号密码验证的apche服务器文件下载

2019独角兽企业重金招聘Python工程师标准>>> 使用python访问 #!/usr/bin/python #fileencoding:utf-8def testUrl():import urllib2import sysimport reimport base64from urlparse import urlparse#下载路径theurl http://ip/release/LHJH/Server/er_service.waru…

使用keytool查看Android APK签名

文章目录 一、找到JDK位置二、使用方法2.1 打开windows命令行工具2.2 查看签名 三、如何给APK做系统签名呢? 一、找到JDK位置 安卓AS之后&#xff0c;可选择继续安装JDK&#xff0c;如本文使用amazon版本默认位置&#xff1a;C:\Users\66176.jdks\corretto-1.8.0_342可通过自…

exchange服务器维护模式命令,Exchange服务器系列课程之七--维护邮件服务器(二)

继续上次的讨论&#xff0c;上次讨论了邮件服务器的一些监控和排错手段&#xff0c;今天我们继续来讨论邮件服务器的维护。今天主要来讨论一下邮件服务器的备份与还原。为什么要备份我就不多说了&#xff0c;备份的方法也非常简单&#xff0c;通过备份工具直接备份就可以了。这…

任务管理器在右下角的图标不显示

任务管理器在右下角的图标不显示 2012年11月7日18:22:23 症状如下图所示&#xff0c;不管是打开任务管理器还是最小化它&#xff0c;右下角均没有它的图标。 网上查到的说法均不靠谱。后来我CtrlAltDel调出任务管理器&#xff0c;找到任务管理器对应进程“taskmgr.exe”&#x…

MAUI中构建跨平台原生控件实现

简介MAUI中使用Handler体系来处理不同平台的原生控件实现, 即对应的, 如果我们想要创建控件, 只需要创建基于不同平台的Handler即可。那么下面主要教大家如何通过创建Handler(事件处理程序)来构建自己的控件。开始下面, 将通过创建一个进度条控件案例, 来演示如何在MAUI项目中创…

Android之android studio如何获取证书指纹 (SHA1)

android studio如何获取证书指纹 (SHA1) 为什么要用SHA1 我们做百度地图或是高德地图的时候。注册app信息要求填写数字签名 我们可以通过外部命令行获取&#xff0c;也可以通过eclipse获取 &#xff0c;现在主流是android studio下面是通过Android studio获取的方法 第一步&am…

排位重要还是媳妇儿重要?

1 刚打到的车&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 还是排位要紧&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 大叔为求省事在家自行焚烧床垫▼4 好家伙&#xff0c;这回答直呼&#xff1a;想不到吧&#xff01;&#xff08;素材来源网络&…

锁屏快捷键_全面屏 iPhone 锁屏快捷键美化,让你的 iPhone 更特别

苹果从iPhone X以后的手机都是全面屏(即刘海屏)&#xff0c;在你的全面屏手机锁屏状态在&#xff0c;屏幕下方有两个快捷按钮&#xff0c;左边的是「手电筒」&#xff0c;右边的是「相机」&#xff0c;在锁屏状态下这两个功能是圆形的&#xff0c;今天堂堂分享一个无需越狱即可…

URLEncode编码和URLDecode解码

1 String text1 java.net.URLEncoder.encode("中国" ,"utf-8" ); 2 String text2 java.net.URLDecoder.decode(text1,"utf-8"); (1).URLEncoder需要注意&#xff1a;这个方法编码了符号&#xff0c;“\” ,“&”,“”,和“&#xff1…

MAUI 移植 Xamarin.Forms 自定义渲染器

简介众所周知, .NET MAUI使用的是Handler处理程序, 而Xamarin使用的则是Render渲染器模式。尽管MAUI中使用了新的渲染模式, 但是仍然Xamarin中的支持Render渲染器, 这意味着如果你的项目是从Xamarin移植到MAUI当中, 大部分代码能够可以重用, 本篇文章介绍如何将Xamarin 渲染器(…

当下流行的分布式文件系统大阅兵

本文对目前数种分布式文件系统进行简单的介绍。当前比较流行的分布式文件系统包括&#xff1a;Lustre、Hadoop、MogileFS、FreeNAS、FastDFS、NFS、OpenAFS、MooseFS、pNFS、以及GoogleFS。Lustre&#xff08;www.lustre.org&#xff09;lustre是一个大规模的、安全可靠的&…

酒桌上,领导将酒泼到你脸上......

1 哈尔滨的冬天能有多冷&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 复刻经典&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 从泥浆里出来的老虎▼4 让你再吵&#xff01;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼5 酒桌上&#…

机房网络服务器维修图片,机房机柜尾纤布线图片 机房布线维护整理

原标题&#xff1a;机房机柜尾纤布线图片 机房布线维护整理评价一个工人的机柜布线水平&#xff0c;总的来说还是主要看他打标签的熟练度、重视度、清晰度、整洁度。工具&#xff1a;理线夹&#xff0c;理线器&#xff0c;理线架&#xff0c;桥架固定器&#xff0c;线卡&#x…