博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL表中的自连接定义与用法示例
阅读量:5259 次
发布时间:2019-06-14

本文共 697 字,大约阅读时间需要 2 分钟。

一个表与自身进行连接,称为自连接

问题的提出:一个网友提出这样一个SQL题目,说自己想了很久没解决,我一看,这不是很简单吗
可是自己在查询分析器调试了半天原来问题并不是那不简单
有一个学生表,里面有 学号 功课编号
学生成绩三个字段.用一个SQL查询语句得出每门功课成绩最好的前两名
学号  功课编号     学生成绩
 1          1             99
 2          1             98
 3          1             100
 4          2             88
 5          2             87
 6          2             88
 7          3             99
 8          3             88
 9          3             100
解决方法

SELECT DISTINCT 学生表1.*FROM 学生表 学生表1 INNER JOIN      学生表 学生表2 ON 学生表1.学号 IN          (SELECT TOP 2 学生表.学号         FROM 学生表         WHERE 学生表.功课编号 = 学生表1.功课编号         ORDER BY 学生成绩 DESC)

查询结果

学号  功课编号     学生成绩
 1          1             99
 2          1             98
 4          2             88
 6          2             88
 7          3             99
 9          3             100
同样的问题还有
查找不同课程成绩相同的学生的学号、课程号、学生成绩。

同时:以上sql语句还可以优化下:

 

SELECT 学生表1.* FROM 学生表 学生表1 WHERE 学生表1.学号 IN (SELECT TOP 2 学生表.学号 FROM 学生表 WHERE 学生表.功课编号 = 学生表1.功课编号 ORDER BY 学生成绩 DESC)

 

转载于:https://www.cnblogs.com/zhanghai/p/4449895.html

你可能感兴趣的文章
题解: [GXOI/GZOI2019]与或和
查看>>
MacOS copy图标shell脚本
查看>>
国外常见互联网盈利创新模式
查看>>
Oracle-05
查看>>
linux grep 搜索查找
查看>>
Not enough free disk space on disk '/boot'(转载)
查看>>
android 签名
查看>>
android:scaleType属性
查看>>
SuperEPC
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Js时间处理
查看>>
Java项目xml相关配置
查看>>
三维变换概述
查看>>
vue route 跳转
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Entityframework:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。...
查看>>
Linux中防火墙centos
查看>>
mysql新建用户,用户授权,删除用户,修改密码
查看>>