mysql子查询语句 sql数据库查询语句例子

前面讲了MySQL中的很多查询,比如条件查询,分组聚合查询,连接查询。今天我就来说说MySQL中另外两个非常重要的查询,子查询和联合查询。部分01子查询子查询也称为嵌套查询,是将一条查询语句嵌套在另一条查询语句的WHERE子句或H***ING短语中。前者称为内部查询或子查询,后者...

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

部分

01

子查询

子查询也称为嵌套查询,是将一条查询语句嵌套在另一条查询语句的WHERE子句或H***ING短语中。前者称为内部查询或子查询,后者称为外部查询或父查询。在整个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.带有比较运算符的子查询

带有比较运算符的子查询是指父查询和子查询之间通过比较运算符的连接。当用户可以确定内部查询返回单个值时,他们可以使用=,>;、& lt、gt;= 、& lt=、!=(<& gt)和其他比较运算符来构造子查询。

#查询班级“计算机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用于指定表达式需要与子查询结果集中的每个值进行比较。当表达式满足与每个值的比较关系时,返回TRUE,否则返回FALSE。一些和任何是同义词,这意味着当子查询结果集中的一个值满足比较关系时,它将返回TRUE,否则将返回FALSE。

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

3.带有EXISTS关键字的子查询

当使用关键字EXISTS构建子查询时,系统操作子查询以确定它是否返回结果集。如果子查询的结果集不是空,EXISTS返回的结果为真,将查询外部查询语句。如果子查询的结果集是空,则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中的关键字不同,关键字EXISTS IN outer WHERE子句不指定内部查询结果集与外部查询的比较条件。因此,使用关键字EXISTS构造子查询时,内部WHERE子句需要指定连接条件,即a.studentNo=b.studentNo

部分

02

联合查询

UNION关键字可用于将多个SELECT语句的结果组合成一个结果集。这种查询称为联合操作或联合查询。合并时,多个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中的子查询和联合查询,对多级查询很有帮助。在我们的工作中,经常会用到子查询,因为很多数据不是存储在一个表中,所以需要进行多级查询。

本文来自一九九几的她投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/621412.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 07-05
下一篇 07-05

相关推荐

  • 携程怎么查询订单

    1首先进入携程登录界面,选择打开手机号查单选项2其次打开手机号查单后,输入查询人的手机号并填写验证码即可查询3最后输入验证码后,跳转到订单页面,即可查询订单人信息;1登录携程官网2点击我的,进入我的页面3点击全部订单,发现打开的页面并没有自己已定好的票4点击手机

    2023-07-28 10:34:02
    1056 0
  • 网贷借一次钱查一次征信吗 查询太多影响不好

    虽然没有逾期还款记录,但如果频繁查询征信记录,也会对自己的征信产生不良影响。银行可能会怀疑用户经常借钱。有网友问,网贷借钱一次查征信吗?让我们来看看吧。如果网贷每次申请都需要授权查征信,那么个人征信报告就要查一次。如果网贷不接入征信,自然不需要查看用户的征

    2023-07-28 06:14:01
    184 0
  • 查询备案号怎么查询 个人房产查询系统网站

    部分楼盘在未取得预售证前就已销售,证件资料不规范的楼盘无法准备销售。所以,在看中房子后,一定要先查一下正在看的房子的信息。以昆山为例,查询方式基本相似。首先我们找到了昆山房管局官网,在右上角看到了一栋楼的详细信息。点击进入。然后在项目名称中输入要查找的建筑

    2023-07-26 07:56:01
    269 0
  • google关键词查询工具叫什么 关键词搜索次数查询

    Chrome 团队近日正在测试名为“Side Search”的新功能。虽然该功能并未在任何 Chrome 分支中上线,不过最近在 Chromium Gerrit 上合并的一个提交内容已经为这个即将到来的功能提供了更多信息。Chrome团队最近正在测试一项名为“侧面搜索”的新功能。虽然这个功能没有在Chrome

    2023-07-25 11:19:01
    589 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信