选读SQL经典实例笔记17_最多和最少

1. 问题4

1.1. 最多选修两门课程的学生,没有选修任何课程的学生应该被排除在外

1.2. sql

select distinct s.*
  from student s, take t
 where s.sno = t.sno
   and s.sno not in ( select t1.sno
                        from take t1, take t2, take t3
                       where t1.sno = t2.sno
                         and t2.sno = t3.sno
                         and t1.cno < t2.cno
                         and t2.cno < t3.cno )

1.3. 两次自连接的解决方案避免了聚合运算

1.4. 基于SNO的内连接操作能够确保子查询返回的每一行都是针对同一个学生的数据

1.5. 子查询就是为了找出选修了3门以上课程的学生

1.6. 外层查询则负责返回至少选修了一门课程,并且SNO不存在于子查询返回结果的学生

1.7. DB2

1.8. Oracle

1.9. SQL Server

1.10. 窗口函数COUNT OVER

1.10.1.   sql

select distinct sno,sname,age
    from (
  select s.sno,s.sname,s.age,
         count(*) over (
           partition by s.sno,s.sname,s.age
         ) as cnt
    from student s, take t
    where s.sno = t.sno
         )x
  where cnt <= 2

1.11. PostgreSQL

1.12. MySQL

1.13. 聚合函数COUNT判断哪些学生最多选修了两门课程

1.13.1. sql

select s.sno,s.sname,s.age
  from student s, take t
 where s.sno = t.sno
 group by s.sno,s.sname,s.age
having count(*) <= 2

1.14. 计算出TAKE表中每个SNO出现的次数

1.15. STUDENT表和TAKE表的内连接操作能够确保剔除掉没有选修任何课程的学生

2. 问题5

2.1. 年龄最多大于其他两名同学的学生

2.1.1. 比其他0个、1个或者2个学生年龄大的学生

2.2. sql

select *
  from student
 where sno not in (
select s1.sno
  from student s1,
       student s2,
       student s3,
       student s4
 where s1.age > s2.age
   and s2.age > s3.age
   and s3.age > s4.age
)
SNO SNAME      AGE
--- ---------- ---
  6 JING        18
  4 MAGGIE      19
  1 AARON       20
  9 GILLIAN     20
  8 KAY         20
  3 DOUG        20

2.3. 找出比其他3个或更多学生年龄大的学生集合

2.3.1. 大于具有传递性

2.4. 为提高可读性,使用DISTINCT压缩结果集

2.5. 在子查询中使用NOT IN就可以筛选出除了上述4人之外的那些学生

2.6. DB2

2.7. Oracle

2.8. SQL Server

2.9. 窗口函数DENSE_RANK

2.9.1.  sql

select sno,sname,age
   from (
 select sno,sname,age,
        dense_rank()over(order by age) as dr
   from student
        ) x
  where dr <= 3

2.10. 窗口函数DENSE_RANK根据有多少人比当前学生年龄小计算出每个学生对应的排名

2.11. DENSE_RANK不仅允许Tie的存在,还能保证名次连续,中间不留空白

2.12. PostgreSQL

2.13. MySQL

2.14. 聚合函数COUNT和关联子查询

2.14.1.  sql

select s1.*
   from student s1
  where 2 >= ( select count(*)
                from student s2
               where s2.age <s1.age )

2.15. 聚合函数解决方案使用标量子查询筛选出最多比其他两名学生年龄大的学生

3. 问题6

3.1. 至少选修了两门课程的学生

3.2. sql

select *
  from student
 where sno in (
select t1.sno
 from take t1,
      take t2
 where t1.sno = t2.sno
   and t1.cno > t2.cno
)
SNO SNAME             AGE
--- ---------- ----------
  1 AARON              20
  3 DOUG               20
  4 MAGGIE             19
  6 JING               18

3.3. 子查询里的SNO相等条件能够确保每个学生只与自己的选课信息相比较

3.4. CNO大于比较条件,只有在一个学生至少选修了一门课程的情况下才会成立,否则CNO会等于另一个CNO

3.4.1. 只有一门课程,只能和自身比较

3.5. DB2

3.6. Oracle

3.7. SQL Server

3.8. 窗口函数COUNT OVER

3.8.1.  sql

select distinct sno,sname,age
   from (
 select s.sno,s.sname,s.age,
        count(*) over (
          partition by s.sno,s.sname,s.age
        ) as cnt
   from student s, take t
  where s.sno = t.sno
        ) x
  where cnt >= 2

3.9. 使用STUDENT表的全部列定义分区并执行COUNT OVER操作

3.10. 只要保留那些CNT大于或者等于2的行即可

3.11. PostgreSQL

3.12. MySQL

3.13. 聚合函数COUNT

3.13.1.  sql

select s.sno,s.sname,s.age
   from student s, take t
  where s.sno = t.sno
  group by s.sno,s.sname,s.age
 having count(*) >= 2

3.14. HAVING子句中使用COUNT筛选出那些选修了两门以上课程的学生

4. 问题7

4.1. 同时选修了CS112和CS114两门课程的学生

4.2. sql

select s.*
  from student s,
       take t1,
       take t2
 where s.sno = t1.sno
   and t1.sno = t2.sno
   and t1.cno = 'CS112'
   and t2.cno = 'CS114'
SNO SNAME       AGE
--- ---------- ----
  1 AARON        20
  3 DOUG         20

4.3. sql

select s.*
  from take t1, student s
 where s.sno   = t1.sno
   and t1.cno  = 'CS114'
   and 'CS112' = any (select t2.cno
                        from take t2
                       where t1.sno = t2.sno
                         and t2.cno != 'CS114')
SNO SNAME       AGE
--- ---------- ----
  1 AARON        20
  3 DOUG         20

4.4. DB2

4.5. Oracle

4.6. SQL Server

4.7. 窗口函数MIN OVER和MAX OVER

4.7.1.  sql

select distinct sno, sname, age
   from (
 select s.sno, s.sname, s.age,
        min(cno) over (partition by s.sno) as min_cno,
        max(cno) over (partition by s.sno) as max_cno
   from student s, take t
  where s.sno = t.sno
    and t.cno in ('CS114','CS112')
        ) x
  where min_cno != max_cno

4.8. PostgreSQL

4.9. MySQL

4.10. 聚合函数MIN和MAX

4.10.1.  sql

select s.sno, s.sname, s.age
   from student s, take t
  where s.sno = t.sno
    and t.cno in ('CS114','CS112')
  group by s.sno, s.sname, s.age
 having min(t.cno) != max(t.cno)

4.11. IN列表确保只有选修CS112或CS114,或者同时两门都选了的学生才会被保留下来

4.12. 如果一个学生没有同时选修这两门课程,那么MIN(CNO)就会等于MAX(CNO),进而该学生会被排除在外

5. 问题8

5.1. 至少比其他两位学生年龄大的学生

5.2. sql

select distinct s1.*
  from student s1,
       student s2,
       student s3
 where s1.age > s2.age
   and s2.age > s3.age
SNO SNAME             AGE
--- ---------- ----------
  1 AARON              20
  2 CHUCK              21
  3 DOUG               20
  5 STEVE              22
  7 BRIAN              21
  8 KAY                20
  9 GILLIAN            20
 10 CHAD               21

5.3. DB2

5.4. Oracle

5.5. SQL Server

5.6. 窗口函数DENSE_RANK

5.6.1.  sql

select sno,sname,age
   from (
 select sno,sname,age,
        dense_rank()over(order by age) as dr
   from student
        ) x
  where dr >= 3

5.7. PostgreSQL

5.8. MySQL

5.9. 聚合函数COUNT和关联子查询

5.9.1.  sql

select s1.*
   from student s1
  where 2 <= ( select count(*)
                from student s2
               where s2.age <s1.age )

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

奥威BI系统|秒分析,更适合分析大数据

根据以往的经验,当数据量多到一定程度就容易导致系统卡顿、崩溃。这种现象给企业级数据分析造成了极大的困扰。随着业务发展扩大和分析需求精细化,企业需要一套能秒分析大数据的系统。而奥威BI系统就是这样一款可以秒分析大数据的商业智能系统。 奥威BI…

数字图像处理(番外)图像增强

图像增强 图像增强的方法是通过一定手段对原图像附加一些信息或变换数据,有选择地突出图像中感兴趣的特征或者抑制(掩盖)图像中某些不需要的特征,使图像与视觉响应特性相匹配。 图像对比度 图像对比度计算方式如下: C ∑ δ δ ( i , j …

第一章-JavaScript基础进阶part1:DOM

文章目录 前言一、DOM简介1.1 DOM树 二、获取DOM元素1、根据元素id获取-getElementById2、根据元素名称获取元素对象-getElementsByTagName3、H5新增API获取元素4、获取body和html元素 三、DOM元素事件四、操作DOM元素1、改变元素内容2、常用元素的属性操作3、实践案例4、操作D…

第125天:内网安全-隧道技术SMBICMP正反向连接防火墙出入规则上线

知识点 #知识点: 1、入站规则不出网上线方案 2、出站规则不出网上线方案 3、规则-隧道技术-SMB&ICMP-隧道技术:解决不出网协议上线的问题(利用出网协议进行封装出网) -代理技术:解决网络通讯不通的问题&#xff0…

Mr. Cappuccino的第54杯咖啡——Mybatis运行原理

Mybatis运行原理 Mybatis运行的三个阶段Mybatis运行原理图 Mybatis运行的三个阶段 初始化阶段:读取并解析XML配置文件和注解中的配置信息,创建配置对象,并完成各个模块的初始化工作,底层采用建造者模式;代理封装阶段&…

钉钉对接打通金蝶云星空获取流程实例列表详情(宜搭)接口与其他应收单接口

钉钉对接打通金蝶云星空获取流程实例列表详情(宜搭)接口与其他应收单接口 对接系统钉钉 钉钉(DingTalk)是阿里巴巴集团专为中国企业打造的免费沟通和协同的多端平台,提供PC版,Web版和手机版,有考…

论文代码学习—HiFi-GAN(4)——模型训练函数train文件具体解析

文章目录 引言正文模型训练代码整体训练过程具体训练细节具体运行流程 多GPU编程main函数(通用代码)完整代码 总结引用 引言 这里翻译了HiFi-GAN这篇论文的具体内容,具体链接。这篇文章还是学到了很多东西,从整体上说&#xff0c…

Centos7.x修改密码

文章目录 Centos7.x修改密码root修改自己的密码root修改普通用户的密码普通用户修改自己的密码 Centos7.x修改密码 root修改自己的密码 云服务器 云服务器则直接在控制台修改(例如阿里云服务器直接在阿里云服务器控制台修改,不赘述)命令行方式: 命令行输入: passw…

redis+token+分布式锁确保接口的幂等性

目录 1.幂等性是什么? 2.如何实现幂等性呢? 1.新增管理员,出弹窗的同时,请求后台。 2.后端根据雪花算法生成唯一标识key,以雪花数为key存到redis。并返回key给前端。 3.前端保存后端传过来的key。 4.前端输入完成…

java+springboot+mysql个人日记管理系统

项目介绍: 使用javaspringbootmysql开发的个人日记管理系统,系统包含超级管理员、管理员、用户角色,功能如下: 超级管理员:管理员管理;用户管理;反馈管理;系统公告;个人…

【网络安全】网络安全威胁实时地图 - 2023

文章目录 [TOC] ① 360 安全大脑360 APT全景雷达 ② 瑞星杀毒瑞星云安全瑞星网络威胁态势感知平台 ③ 比特梵德 Bitdefender④ 飞塔防火墙 FortiGuard⑤ 音墙网络 Sonicwall⑥ 捷邦 Check Point⑦ AO卡巴斯基实验室全球模拟隧道模拟 ⑧ 数字攻击地图⑨ Threatbutt互联网黑客攻击…

C# Blazor 学习笔记(0):初识Blazor

文章目录 Blazor是什么适合人群 开始学习BlazorBlazor资源如何创建BlazorBlazor 基础知识介绍文件分布Razor和cshtml的区别Razor介绍 Blazor是什么 Blazor是微软推出的前端框架,有两种形式,以下以Blazor Server为主。具有一下特点 前端是用C#而不是JS前…

镜头基础知识

本文介绍镜头基础知识。 1.焦距 焦距指透镜中心到光聚集之焦点的距离,如下图,通常用f表示。 焦距是正值,一束平行光将会聚集在一个点上,焦距是负值,一束平行光在通过透镜之后将会扩散开。 注意: 1)这里…

JVM面试突击班2

JVM面试突击班2 对象被判定为不可达对象之后就“死”了吗 对象的生命周期 创建阶段 (1)为对象分配存储空间 (2)开始构造对象 (3)从超类到子类对static成员进行初始化 (4)超类成…

AI深度学习部署全记录

AI部署流程,以PyTorch为例: 1.Torch.Model->ONNX->ONNXSIM->TensortRT->落地 2.Torch.Model->Pt->ONNX->ONNXRunTime->落地 3.Torch.Model->Pt->Libtorch->落地 4.Torch.Model->PNNX->TensorRT->落地 5.…

C高级DAY2

思维导图 递归输出一个数的每一位,递归输出数的二进制 写一个脚本,包含以下内容: 显示/etc/group文件中第五行的内容创建目录/home/ubuntu/copy切换工作路径到此目录赋值/etc/shadow到此目录,并重命名为test将当前目录中test的所属…

Kubernetes概述

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署(二)ETCD集群部署 Kubernetes高可用集群二进制部署(三)部署…

在.net 6.0中 调用远程服务器web服务,Webservices(xxx.asmx) ,RESTful 风格,2种解决方案。

1.使用 Connected Services: 右键单击您的项目,选择 "Add"(添加)-> "Connected Services"(已连接的服务)。 在 "Connected Services" 对话框中,选择 "W…

MongoDB文档-基础使用-在客户端(dos窗口)/可视化工具中使用MongoDB基础语句

阿丹: 本文章将描述以及研究mongodb在客户端的基础应用以及在spring-boot中整合使用mongodb来完成基本的数据增删改查。 先放官方的文章 MongoDB CRUD操作 - MongoDB-CN-Manual 本文章分为: 在客户端(dos窗口)/可视化工具中使用…

ESP32 LVGL:无法显示过大的GIF图片(修改VLGL RAM缓存大小)

文章目录 问题描述:问题解决更改LVGL RAM缓存大小看ESP32的RAM使用情况 参考链接 问题描述: 使用LVGL可显示64 * 64的GIF,但是却无法显示120*120的GIF。 问题解决 更改LVGL RAM缓存大小 分析原因:在用LVGL显示GIF图片时&#…