首页 > 数据库技术 > 详细

sql语句中自连接可以解决的问题

时间:2020-05-16 23:18:00      阅读:75      评论:0      收藏:0      [点我收藏+]

1、自连接可以把同一表中属于一列的数据,平移到一行中,然后进行比较或其他操作。

实例:有两张表学生信息表和分数表;

结构和数据如下:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for zhongxin_student
-- ----------------------------
DROP TABLE IF EXISTS `zhongxin_student`;
CREATE TABLE `zhongxin_student`  (
  `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 姓名,
  `age` int(11) NULL DEFAULT NULL COMMENT 年龄,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of zhongxin_student
-- ----------------------------
INSERT INTO `zhongxin_student` VALUES (1, 张三, 11);
INSERT INTO `zhongxin_student` VALUES (2, 李四, 22);

SET FOREIGN_KEY_CHECKS = 1;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for zhongxin_score
-- ----------------------------
DROP TABLE IF EXISTS `zhongxin_score`;
CREATE TABLE `zhongxin_score`  (
  `id` int(11) NOT NULL,
  `sid` int(11) NULL DEFAULT NULL COMMENT 学生id,
  `course_id` int(11) NULL DEFAULT NULL COMMENT 课程id,
  `score` int(11) NULL DEFAULT NULL COMMENT 分数,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of zhongxin_score
-- ----------------------------
INSERT INTO `zhongxin_score` VALUES (1, 1, 1, 70);
INSERT INTO `zhongxin_score` VALUES (2, 1, 2, 80);
INSERT INTO `zhongxin_score` VALUES (3, 2, 1, 80);
INSERT INTO `zhongxin_score` VALUES (4, 2, 2, 70);

SET FOREIGN_KEY_CHECKS = 1;

数据概览:

student:

技术分享图片

 

 

 

score:

技术分享图片

 

 

 要求:查询课程编号1比课程编号2分数高的学生姓名

sql语句:

//查询‘1’科目成绩比‘2’科目成绩高的学生姓名
select zs.name
from zhongxin_student zs 
join (select sid,score from zhongxin_score where course_id=1)as a on a.sid=zs.id
join (select sid,score from zhongxin_score where course_id=2)as b on b.sid=zs.id
where a.score>b.score

结果:

技术分享图片

 

sql语句中自连接可以解决的问题

原文:https://www.cnblogs.com/whalesea/p/12902567.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!