选读SQL经典实例笔记18_Exactly

 

1. 问题9

1.1. 只讲授一门课程的教授

1.2. sql

select p.*from professor p,teach twhere p.lname = t.lnameand p.lname not in (
select t1.lnamefrom teach t1,teach t2where t1.lname = t2.lnameand t1.cno > t2.cno
)
LNAME      DEPT           SALARY        AGE
---------- ---------- ---------- ----------
POMEL      SCIENCE           500         65

1.3. 找到讲授了两门以上课程的教授

1.4. 找到讲授了至少一门课程但不存在于第一步返回结果集的教授

1.5. DB2

1.6. Oracle

1.7. SQL Server

1.8. 窗口函数COUNT OVER

1.8.1. sql

select lname, dept, salary, agefrom (
select p.lname,p.dept,p.salary,p.age,count(*) over (partition by p.lname) as cntfrom professor p, teach twhere p.lname = t.lname) xwhere cnt = 1

1.9. PostgreSQL

1.10. MySQL

1.11. 聚合函数COUNT

1.11.1. sql

select p.lname,p.dept,p.salary,p.agefrom professor p, teach twhere p.lname = t.lnamegroup by p.lname,p.dept,p.salary,p.age
having count(*) = 1

1.12. 内连接PROFESSOR表和TEACH表能够确保把不讲授任何课程的教授都排除掉

1.13. PARTITION是动态的、更灵活的GROUP BY

2. 问题10

2.1. 只选修CS112和CS114课程的学生

2.1.1. 只选了这两门,没有选其他课程

2.2. sql

select s.*from student s, take twhere s.sno = t.snoand t.cno = 'CS112'and t.cno = 'CS114'

2.3. sql

select s1.*from student s1,take t1,take t2where s1.sno = t1.snoand s1.sno = t2.snoand t1.cno = 'CS112'and t2.cno = 'CS114'and s1.sno not in (
select s2.snofrom student s2,take t3,take t4,take t5where s2.sno = t3.snoand s2.sno = t4.snoand s2.sno = t5.snoand t3.cno > t4.cnoand t4.cno > t5.cno
)
SNO SNAME      AGE
--- ---------- ---3 DOUG        20

2.4. 找到至少选修了3门课程的学生

2.5. 使用TAKE表的自连接找出选修CS112和CS114的学生

2.6. 筛选出选修CS112和CS114,但选修课程数量又不多于两门的学生

2.7. DB2

2.8. Oracle

2.9. SQL Server

2.10. 窗口函数COUNT OVER和CASE表达式

2.10.1. sql

select sno,sname,agefrom (
select s.sno,s.sname,s.age,count(*) over (partition by s.sno) as cnt,sum(case when t.cno in ( 'CS112', 'CS114' )then 1 else 0end)over (partition by s.sno) as both,row_number()over (partition by s.sno order by s.sno) as rnfrom student s, take twhere s.sno = t.sno) xwhere cnt = 2and both = 2and rn = 1

2.10.2. CASE表达式的结果计算出来之后会被传递给窗口函数SUM OVER

2.10.3. 使用了窗口函数ROW_NUMBER,从而避免使用DISTINCT

2.11. PostgreSQL

2.12. MySQL

2.13. CASE表达式和聚合函数COUNT

2.13.1. sql

select s.sno, s.sname, s.agefrom student s, take twhere s.sno = t.snogroup by s.sno, s.sname, s.age
having count(*) = 2and max(case when cno = 'CS112' then 1 else 0 end) +max(case when cno = 'CS114' then 1 else 0 end) = 2

2.13.2. STUDENT表和TAKE表的内连接能够确保没有选修任何课程的学生被排除掉

2.13.3. HAVING子句的COUNT表达式只保留选修两门课程的学生

2.13.4. 只有选修了CS112和CS114两门课程的学生,其SUM结果才可能等于2

3. 问题11

3.1. 找出比其他两位学生年龄大的学生

3.1.1. 找出按照年龄从小到大排序排在第三位的学生

3.2. sql

select s5.*from student s5,student s6,student s7where s5.age > s6.ageand s6.age > s7.ageand s5.sno not in (
select s1.snofrom student s1,student s2,student s3,student s4where s1.age > s2.ageand s2.age > s3.ageand s3.age > s4.age
)
SNO SNAME      AGE
--- ---------- ---1 AARON       203 DOUG        209 GILLIAN     208 KAY         20

3.3. 找出比3名以上学生年龄大的学生

3.4. 找出比两位以上学生年龄大的学生,但又不属于第一步返回结果集的学生

3.5. DB2

3.6. Oracle

3.7. SQL Server

3.8. 窗口函数DENSE_RANK

3.8.1. sql

select sno,sname,agefrom (
select sno,sname,age,dense_rank()over(order by age) as drfrom student) xwhere dr = 3

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

3.9. PostgreSQL

3.10. MySQL

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

3.11.1. sql

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

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

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

相关文章

MIT 6.824 -- MapReduce -- 01

MIT 6.824 -- MapReduce -- 01 引言抽象和实现可扩展性可用性(容错性)一致性MapReduceMap函数和Reduce函数疑问 课程b站视频地址: MIT 6.824 Distributed Systems Spring 2020 分布式系统 推荐伴读读物: 极客时间 – 大数据经典论文解读DDIA – 数据密集型应用大数据相关论文…

LeetCode 热题 100 JavaScript--102. 二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 示例 2: 输入:root [1…

C#核心知识回顾——19.插入排序

1.插入排序的基本原理 871542639 两个区域 排序区 未排序区 用一个索引值做分水岭 未排序区元素 与排序区元素比较 插入到合适位置 直到未排序区清空 int[] arr { 8, 6, 7, 2, 9, 4 };//第一步//能取出未排序区…

Unity面试题:热更新篇

请简要介绍Unity热更新的原理和实现方式。 答:Unity热更新的原理是通过将游戏的资源和代码分离,将代码部分放置在服务器端,游戏启动时通过网络下载更新的代码并动态加载,以达到实现热更新的目的。实现方式包括AssetBundle、ILRunt…

CVE漏洞复现-CVE-2019-5021 镜像漏洞利用

CVE-2019-5021 镜像漏洞利用 随着容器技术的普及,容器镜像也成为软件供应链中非常重要的一个组成的部分。人们像使用 pip 等工具从仓库获取各种编程软件库一样,可以从 Docker Hub 或 第三方仓库拉取镜像,在其基础上进行开发,从而…

网络基础1

文章目录 网络基础11. 计算机网络背景1.1 网路发展1.2 认识 "协议" 2. 网络协议初识2.1 协议分层2.2 OSI七层模型2.3 TCP/IP五层(或四层)模型协议栈与OS的关系 3. 网络传输基本流程3.1 同一个局域网两台主机通信3.2 同一个路由器的两个子网通信 4. 网络中的地址管理4…

WebGL: 几个入门小例子

本文罗列几个WebGL入门例子,用于帮助WebGL学习。 一、概述 WebGL (Web Graphics Library)是一组基于Open ES、在Web内渲染3D图形的Javascript APIs。 Ref. from Khronos Group: WebGL WebGL™ is a cross-platform, royalty-free open web standard for a low-lev…

flink1.17 eventWindow不要配置processTrigger

理论上可以eventtime processtime混用,但是下面代码测试发现bug,输入一条数据会一直输出. flink github无法提bug/问题. apache jira账户新建后竟然flink又需要一个账户,放弃 bug复现操作 idea运行代码后 往source kafka发送一条数据 a,1,1690304400000 可以看到无限输出…

python的下载和安装步骤,python下载安装教程3.10.0

大家好,给大家分享一下python下载安装教程3.10.0,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 第一步:下载Python安装包 在Python的官网 www.python.org 中找到最新版本的Python安装包,点击进行下载&a…

探究Spring事务:了解失效场景及应对策略

在现代软件开发中,数据的一致性和完整性是至关重要的。为了保证这些特性,Spring框架提供了强大的事务管理机制,让开发者能够更加自信地处理数据库操作。然而,事务并非银弹,存在一些失效的情景,本文将带您深…

AtcoderABC227场

A - Last CardA - Last Card 题目大意 一共 K 张卡片分发给 N 个人,这些人的编号为 1, 2, …, N 从第 A 个人开始,按照顺序依次将卡片发给以下人员:A, A1, A2, …, N, 1, 2, …问最后一个卡片将发给哪个人? 具体来说,…

2023年C++面试宝典

目录 第一章:C基础知识1.1 C语言起源与发展1.2 C的重要特点和优点1.3 C的数据类型和变量1.4 函数和命名空间1.5 运算符和表达式 第二章:面向对象编程2.1 类与对象的概念2.2 封装、继承和多态2.3 构造函数和析构函数2.4 静态成员和常量成员2.5 虚函数和纯…