zoukankan      html  css  js  c++  java
  • sql语句中自连接可以解决的问题

    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

    结果:

    就算这个世道烂成一堆粪坑,那也不是你吃屎的理由
  • 相关阅读:
    vue 同页面不同参数
    vue的data用到this问题
    vue轮播,不是只有左右切换的,还有只切换src的
    vue页面高度填充,不出现滚动条
    WdatePicker做出onchange效果
    总结最近移动端遇到的坑(auto-size + zepto)
    react
    ES6-set && 数组剔重
    [置顶] Jquery easyui+Jsonp+asp.net+翻页 事件版
    扩展Jquery easyui的validator插件
  • 原文地址:https://www.cnblogs.com/whalesea/p/12902567.html
Copyright © 2011-2022 走看看