码迷,mamicode.com
首页 > 数据库 > 详细

SQL表中的自连接定义与用法示例

时间:2015-04-23 12:47:06      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

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

问题的提出:一个网友提出这样一个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)
  

 

SQL表中的自连接定义与用法示例

标签:

原文地址:http://www.cnblogs.com/zhanghai/p/4449895.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!