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

    结果:

    就算这个世道烂成一堆粪坑,那也不是你吃屎的理由
  • 相关阅读:
    npm切换淘宝镜像
    Linux下安装Node.js环境
    Electron入门
    Grunt实现前端自动化
    Javascript代码复审(review)
    Eclipse启动Tomcat报错:Could not load the Tomcat server configuration at Servers2Tomcat v8.0 Server at localhost-config
    maven常用命令
    Element form表单验证无法生效
    css 绝对定位参考对象
    vscode 不识别 less代码
  • 原文地址:https://www.cnblogs.com/whalesea/p/12902567.html
Copyright © 2011-2022 走看看