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

    结果:

    就算这个世道烂成一堆粪坑,那也不是你吃屎的理由
  • 相关阅读:
    .htaccess注释
    Ubuntu开机自启动jar包和Nginx
    Rook部署和管理Ceph集群
    Python 打包 Nuitka
    Python 反射 备查
    Python 屏幕坐标点取色
    Python pynput 监听事件
    【线性代数】基本概念
    C# 调用SendMessage刷新任务栏图标(强制结束时图标未消失)
    Asp.Net Core Swagger 接口分组(支持接口一对多暴露)
  • 原文地址:https://www.cnblogs.com/whalesea/p/12902567.html
Copyright © 2011-2022 走看看