首页 > 数据库 >SQL关联子查询

SQL关联子查询

时间:2024-02-29 11:35:44浏览次数:26  
标签:Cid Sid 查询 SQL score Scores 关联 WHERE

上节课我们讲的子查询,都是先一次性得出子查询的结果,再返回给主查询使用。这种子查询与主查询之间是没有关联,互不影响的。

 

但在相关子查询中,子查询是在主查询每一条记录层面上依次进行的,子查询依赖主查询。

 

相关子查询比非关联查询执行起来慢一些。但是有很多实际的应用。

 

实例:选出Scores成绩表中,学生编号在1~6之间的记录,找出那些超过相同科目平均成绩的学生成绩。

 

 

实例解析:要注意的是,这里我们需要知道是当前科目的平均成绩。所以使用子查询计算当前科目平均成绩的时候,要知道此时主查询的课程编号Cid是什么。


我们给主查询Scores表设置别名s,这样在子查询当前科目平均成绩的时候,加上WHERE Cid = s.Cid ,就能获得当前课程的平均成绩。

 

SELECT *
FROM Scores s  -- 将主查询的字段加上别名
WHERE score > (
    SELECT AVG(score)
    FROM Scores
    WHERE Cid = s.Cid  -- 获取当前主查询的的课程编号Cid
)
AND Sid BETWEEN 1 AND 6;

 

 

 

作业:通过SId连接Scores表和Students表,Cid连接Scores表和Courses表,选出学生编号在1~6之间,那些成绩超过相同科目平均成绩的学生。

 

最终得到Students表的Sname列,Courses表的Cname列以及Scores表中的score列。

 

示例结果:

 

 

作业解析:其实就是在我们课程实例中,加上两个JOIN连接,需要注意的是,加上JOIN连接后,使用字段时要加上表的别名。比如Sid BETWEEN 1 AND 6中的Sid,要写成s.Sid。

 

SELECT st.Sname,c.Cname,s.score
FROM Scores s 
JOIN Students st
ON s.Sid = st.Sid
JOIN Courses c
ON s.Cid = c.Cid
WHERE score > (
    SELECT AVG(score)
    FROM Scores
    WHERE Cid = s.Cid 
)
AND s.Sid BETWEEN 1 AND 6;

 

下节课讲讲SQL数值函数和字符函数。

标签:Cid,Sid,查询,SQL,score,Scores,关联,WHERE
From: https://www.cnblogs.com/shijianchuzhenzhi/p/18043085

相关文章

  • MySQL启停耗时久是什么原因
    一、问题背景 基础环境:主机类型:x3850X6操作系统:DB:RedHatEnterpriseLinux9.17.8存储:IBM存储,500GB内存:64GCPU型号:[email protected]核数:32CORE数据库环境:8.0.27 问题现象:测试环境数据库启停耗时较长。 说明:测试环境有一套MySQL数据......
  • CentOS 7 - 安装MySQL 5.7
    本文涉及的产品云数据库RDSSQLServer,独享型2核4GB推荐场景:SQLServer性能诊断案例分析立即试用云数据库RDSMySQLServerless,0.5-2RCU50GB推荐场景:学生管理系统数据库设计搭建个人博客立即试用 简介: CentOS7的默认yum仓......
  • 三分钟数据持久化:Spring Boot, JPA 与 SQLite 的完美融合
    三分钟,迎接一个更加高效和简便的开发体验。在快节奏的软件开发领域,每一个简化工作流程的机会都不容错过。想要一个无需繁琐配置、能够迅速启动的数据持久化方案吗?这篇文章将是你的首选攻略。在这里,我们将向你展示如何将SpringBoot的便捷性、JPA的强大查询能力和SQLite的......
  • 如何在WSL 2 (Ubuntu) 中安装MySQL8.0
    前言​ 在CSDN上找了一圈如何在WSL2上的Ubuntu下载Mysql8.0,并于Windows主机上的Navicat进行连接的教程,找了七八篇,跟着走了一遍,结果全部失败!全部失败!​ 于是我果断的选择谷歌搜索,找到一篇一次成功的文章,这里是原文.这里仅做转载,感谢作者大佬!​ 在这里贴出自己的版本号......
  • FastAPI系列:fastapi定制的数据库操作库sqlmodel
    官网sqlmodel安装#安装sqlmodel会自动安装pydantic和sqlalchemypipinstallsqlmodel使用#步骤1,创建sqlmodel引擎fromsqlmodelimportcreate_engine#driver://用户名:密码@ip/数据库engine=create_engine("mysql+mysqldb://root:123456@localhost/api")#步骤......
  • FastAPI系列:查询字符串参数
    单个查询字符串@app.get('/index/{username}')defindex(username:str,id:int):#id为查询字符串?id=5return{"message":"success","username":username,"id":id}可选的查询字符串参数@app.get('/items/{item_id}......
  • Mybatis 批量更新 PostgreSQL 数据库,返回更新行数
    1.拼接成1条sql语句,可返回修改行数。PostgreSQL的批量更新原生sql:updatepersonsetname=tmp.name,age=tmp.age,addr=tmp.addr,num=tmp.num,update_time=tmp.update_timefrom(values(1,'关羽',43,'成都',1,'2021-03-2617:32:2......
  • mysql各版本的区别介绍
    摘要:mysql各版本的区别介绍,MySQLCommunityServer是开源免费的,这也是我们通常用的MySQL的版本。essentials”是指精简版,不包含embeddedserverandbenchmarksuite,有自动安装程序和配置向导,没有MySQL文档。“noinstall”是指非安装的压缩包的。现在官方已经不提供windows已......
  • mysql 复制表结构
    业务系统数据大增时,经常会使用到分表,我们对于日志表按月来分,若原有日志表:trxn_detail_log_201806,现在像创建以后每个月的表,可以使用以下语句复制表数据。CREATETABLE表名LIKESELECT*FROM模板表名;CREATETABLEtrxn_detail_log_201807LIKESELECT*FROMtrxn_detai......
  • docker 运行postgresql 极限简洁教程
    首先要拉取pq的image:dockerpullpostgres,拉取后可以用dockerimagels查看是否拉取镜像成功。同理,一同拉取pgadmin4方便查看数据:dockerpulldpage/pgadmin4。然后运行image,生成container,运行pq和pgadmin:注意,因为数据库需要存储空间,配合docker运行就需要volume,注意下......