mysql内表和外表_内表查询用到外表
在 csdn 上看到的一个例子,很多记录中以某个字段为中心最前面的两条数据
--给个例子参考
--查询每门课程的前2名成绩
CREATE TABLE StudentGrade(
stuId CHAR(4), --学号
subId INT, --课程号
grade INT, --成绩
PRIMARY KEY (stuId,subId)
)
GO
--表中数据如下
INSERT INTO StudentGrade(stuId,subId,grade) VALUES('001',1,97);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES('001',2,50);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES('001',3,70);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES('002',1,92);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES('002',2,80);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES('002',3,30);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES('003',1,93);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES('003',2,95);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES('003',3,85);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES('004',1,73);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES('004',2,78);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES('004',3,87);
GO
/*
要查询每门课程的前2名成绩
001 1 97
003 1 93
003 2 95
002 2 80
004 3 87
003 3 85
如何实现?
*/
--查看数据
select * from StudentGrade
--假如出现并列时,也只取两个同学的话。
--方法一:
select distinct *
from studentgrade as t1
where stuid in
(select top 2 stuid
from studentgrade as t2
where t1.subid=t2.subid
order by t2.grade desc)
order by subid, grade desc
--方法二:
select * from StudentGrade a where (select count(1) from studentGrade where subId=a.subId and grade>=a.grade)<=2
--方法三:
select * from StudentGrade t
where (select count(1) from StudentGrade where subid=t.subid and grade>t.grade)<=1
order by subId,grade desc
--结果
/*
stuId subId grade
----- ----------- -----------
001 1 97
003 1 93
003 2 95
002 2 80
004 3 87
003 3 85
(6 row(s) affected)
*/
共有三种方案,从难易程度上讲我倾向于后两种,从查询逻辑思想上来讲后两种是一样的
select * from StudentGrade t
where (select count(1) from StudentGrade where subid=t.subid and grade>t.grade)<=1
order by subId,grade desc
mysql内表和外表_内表查询用到外表相关推荐
- 【MySQL笔记 第06章_多表查询】
第06章_多表查询 多表查询概述 1.一个案例引发的多表连接 1.1 案例说明 1.2 笛卡尔积(或交叉连接)的理解 演示代码 2. 多表查询分类讲解 分类1:等值连接 vs 非等值连接 等值连接 非 ...
- mysql的表面sno大全_学生表学号sno数据库
Microsoft SQL Server 2005习题汇总小结 先建student ,course,sc表: CREATE TABLE Student ( Sno char(7) PRIM ...
- mysql数据库视图重命名_数据表和视图:修改数据表
在MySQL中,ALTER 语句用来修改数据表名称或者数据表字段名称.也可以用来添加或者删除数据表字段. ALTER 语句经常和"ADD", "DROP" an ...
- mysql连表删除语句_两表联合查询的sql删除语句的写法(连表删除)
DELETE删除多表数据,怎样才能同时删除多个关联表的数据呢?这里做了深入的解释: 1 delete from t1 where 条件 2 delete t1 from t1 where 条件 3 d ...
- mysql判断视图是否存在_使用JDBC查询是否存在某表或视图,按月动态生成表
查询数据库是否有某表的存在,主要用的就是Connection对象对元数据的操作,代码很简单,贴出来大家参考 /** * 查询数据库是否有某表 * @param cnn * @param tableNa ...
- java mysql 表关系分析_数据库表的关系
表与表之间一般存在三种关系,即一对一,一对多,多对多关系. 下面分别就三种关系讲解数据库相关设计的思路和思考过程: (1)一对一关系 例如,下面的一张表,保存了人的相关信息,有男有女,要求查处所有的夫 ...
- sql 两表数据合并_多表查询SQL语句
本篇文章中主要讲述以下内容: 一.表的加法 合并两张表的过程: 然后运用sql语句: select 课程号,课程名称 from course union select 课程号,课程名称 from co ...
- java 顺序表的实现_顺序表的简单实现(Java)
采用Java实现数据结构中的顺序表 /** *Apr 15, 2013 *Copyright(c)JackWang *All rights reserve *@Author JackWang */ p ...
- mysql清空表分区数据恢复_清空表数据恢复 mysql恢复某个表数据
excel表格删除后如何恢复? 谢邀,如果是删除时间很短且只是删除内容,可以使用撤回.如果是整个文件删除,回收站没有,可以使用数据恢复软件恢复. excel数据清空保存了,怎么恢复原数据? 1.首先在 ...
- mysql 查询表后三行数据库_单表千万行数据库 LIKE 搜索优化手记
我们经常在数据库中使用 LIKE 操作符来完成对数据的模糊搜索,LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式. 如果需要查找客户表中所有姓氏是"张"的数据,可以使用 ...
最新文章
- mysql种编译码写在哪_深入理解Java虚拟机(程序编译与代码优化)
- Zip文件中文乱码问题解决方法(MAC->Windows)
- hdu 3401(单调队列优化dp)
- SpringBoot_日志-SpringBoot默认配
- github服务器停止响应,如何解决“git pull,致命:无法访问'https://github.com ... \':服务器空回复”...
- js删除两个集合中共同元素_多个集合中的共同和独特元素
- 学考语言成绩c对高考有影响吗_三大影响!考生务必上心,最近正在进行的学考对升学很重要...
- html获取url后面的参数_Golang Gin 实战(四)| URL查询参数的获取和原理分析
- 计算机关闭的时候自动更新,win7自动更新关闭有什么影响_win7系统关闭自动更新的步骤-win7之家...
- codeforces 675D Tree Construction set
- mysql配置文件 my.ini
- 应用商店打开服务器错误,教你应用商店出现错误的修复方法
- 《STM32》F103C8T6最小系统
- md5和sha256算法的区别,哪个比较安全
- opencv2.4.9 + vc2012配置过程记录
- <Halcon> 区域划分算子partition_dynamic和partition_rectangle
- Win11如何添加默认打印机?
- 第一讲:最能入门的爬虫教程(Python实现)
- 巴菲特致股东的一封信:2001年
- 敏捷开发实践经验分享
热门文章
- 软考(网络工程师)-必备网络知识(笔记一)
- Java为什么要序列化
- 码农也来关注下经济问题美元加息对我们的影响
- ARM9——五级流水线结构,以及PC指针
- 永久域名注册流程知识
- Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目...
- 程序员因接外包坐牢!两万字长文揭露心酸真实经历
- Firefox插件Xmarks的使用方法
- luogu P1338 末日的传说
- 如何升级 Win10 系统