首页 > 其他分享 >9)子查询

9)子查询

时间:2023-05-28 21:23:58浏览次数:36  
标签:no 查询 score 子句 where select

1、子查询:

  如果一个select语句嵌入到一个SQL语句,(select、insert、update、delete等)中,那么该select语句称为 “子查询”,包含子查询的语句称为“主查询”;通常将其写小括号内;

子查询可以用在主查询的where子句、having子句、select子句、from子句;

 2、where子句中的子查询:

1)子查询返回单值:

例如,我们在choose表中返回低于平均值的信息;

select avg(score) from choose;
select student_no,course_no,score from choose
    where score < (select avg(score) from choose);

 可以看到这儿我们的子查询只是返回了单值;

2)子查询返回多值:

例如,我们查询没有开设课程老师的所有信息;

首先我们新建一个老师信息,让其没有开设课程;若是使用左外连接的话:

insert into teacher values('005','林老师','1110000005');
select t.*
    from teacher t left join course c 
    on t.teacher_no = c.teacher_no
    where c.teacher_no is null;

 我们可以使用子查询得到相同的结果:

select * from teacher
    where teacher_no not in (select teacher_no from course);

 同样,对于查询没有学生的班级:

select * from classes
    where class_no not in (select distinct class_no from student where class_no is not null);

这儿注意我们要将子查询的结果使用 distinct 关键字去重,因为,班级里面有许多学生,导致班级号的结果会重复出现;

 其中,子查询的结果如下:

 3、from子句中的子查询:

from子句中,select语句可以看成一个是虚拟的内存表,在此基础上进一步筛选;

1)之前写过一个group by子句的例子:得到系统数据库中的表数量;

select table_schema, count(*) cnt 
    from information_schema.tables
    group by table_schema
    having cnt > 50;

我们可以写成子查询形式:

select * from
    (select table_schema, count(*) cnt from information_schema.tables
    group by table_schema) db
    where cnt > 50;

可以看到整个 from 子句中,使用select子句作为from的数据表,此处要注意,必须用别名;上述中 的db 就是子查询的结果集 的别名;

这儿不同于之前的where子句,不能用别名,此处 cnt 就是数据表中的字段列表;

 2)得到低于自己平均分的课程、成绩:

select c.student_no,c.course_no,c.score,a.avg_score 
    from (select student_no,avg(score) avg_score from choose
     group by student_no) a, choose c
    where c.student_no = a.student_no
    and c.score < a.avg_score;

 在上述中,将子查询得到的结果集作为一个数据表,与另一张表choose 连接;使用where子句内连接的方法,得到低于自己平均分的课程;

标签:no,查询,score,子句,where,select
From: https://www.cnblogs.com/xuan01/p/17438742.html

相关文章

  • mybatis 查询 map 多参数
         返回map 返回一个大map 主键id作为keyvalue本身作为map  ......
  • Java学习:使用MyBatis Plus的分页插件和QueryWrapper结合自定义mapper xml实现多表关联
     Vo:/***用来返回给前端展示列表的数据实体*/@DatapublicclassCourseVoimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privateStringid;privateStringtitle;privateStringsubjectParentTitle;private......
  • Mybatis-plus中自定义的sql语句调用QueryWrapper实现查询
     一、引言MP自带的条件构造器虽然很强大,有时候也避免不了写稍微复杂一点业务的sql,那么今天说说MP怎么自定义sql语句吧。 二、具体实现使用注解实现:在我们Mapper接口中定义自定义方法即可。/***@Date:2019/6/1014:40*@Description</span>:User对象持久层*/p......
  • ip,端口查询
                                         ......
  • Python连接es笔记一之连接与查询es
    本文首发于公众号:Hunter后端原文链接:Python连接es笔记一之连接与查询es有几种方式在Python中配置与es的连接,最简单最有用的方法就是定义一个默认的连接,如果系统不是需要访问多个集群,最建议的方式就是使用create_connection方法创建连接,然后所有的操作都会自动使用这个连......
  • 基于Expression Lambda表达式树的通用复杂动态查询构建器——《原型篇一》[已开源]
    续接上编,本篇来讲讲俄罗斯套娃的设计与实现。首先简单地完善一下前面提到的例子,代码如下:测试实体类//测试实体类publicclassTable{publicintA;publicintB;}独立条件类//独立条件:publicclassField{publicLogicalLogical{get;set;} ......
  • aws athena创建库表读取s3数据并查询
    建表CREATEEXTERNALTABLEtestlogdb.testlog(`date`string,`log`string)PARTITIONEDBY(yearint,monthint,dayint)ROWFORMATSERDE'org.openx.data.jsonserde.JsonSerDe'WITHSERDEPROPERTIES('ignore.malformed.json'='true......
  • SQL(Structured Query Language)介绍及查询示例
    SQL(StructuredQueryLanguage)是结构化查询语言的缩写,它是一种专门用于操作关系型数据库的编程语言。SQL可以用于数据的存储、查询、更新、删除等常见操作,并且是目前世界上最流行的关系型数据库操作语言。SQL的主要特点包括:1.简单易学:SQL的语法清晰简单,易于学习和使用。2.......
  • 级联查询
    代码在com.bjpowernode.ajax.servletMyRequestServletpackagecom.bjpowernode.ajax.servlet;importcom.alibaba.fastjson.JSON;importcom.bjpowernode.ajax.bean.Area;importjakarta.servlet.ServletException;importjakarta.servlet.annotation.WebServlet;importja......
  • 地铁线路查询系统时间花费时间
    地铁线路查询系统实际花费时间发表日期:2023年4月26日完成系统后,我们可以使用PSP表格来记录实际花费的时间,以便于评估我们的预估时间与实际开发时间的偏差。下面是我在实际开发中所用的时间。1.需求调研计划和跟踪时间:0.5小时估算时间:1小时设计时间:3小时代码时间:0小时调试......