【无标题】

DDL


-- 创建student表
CREATE TABLE student (
    id INT PRIMARY KEY AUTO_INCREMENT,
    createDate DATE,
    userName VARCHAR(255),
    phone VARCHAR(15),
    age INT,
    sex CHAR(1),
    introduce TEXT
);


-- 创建score表
CREATE TABLE score (
    id INT PRIMARY KEY AUTO_INCREMENT,
    scoreName VARCHAR(255),
    result FLOAT,
    studentId INT,
    FOREIGN KEY (studentId) REFERENCES student(id)
);

DML


-- 插入student表数据
INSERT INTO student (createDate, userName, phone, age, sex, introduce) VALUES
('2023-10-01', '张三', '13800138000', 18, '男', '我是张三'),
('2023-10-02', '李四', '13800138001', 19, '男', '我是李四'),
('2023-10-03', '王五', '13800138002', 20, '女', '我是王五'),
('2023-10-04', '赵六', '13800138003', 21, '男', '我是赵六'),
('2023-10-05', '孙七', '13800138004', 22, '女', '我是孙七');


-- 插入score表数据
INSERT INTO score (scoreName, result, studentId) VALUES
('数学', 90.5, 1),
('英语', 85.5, 1),
('数学', 92.5, 2),
('英语', 88.0, 2),
('数学', 88.5, 3),
('英语', 91.0, 3),
('数学', 93.5, 4),
('英语', 86.5, 4),
('数学', 89.5, 5),
('英语', 92.0, 5);

根据score表的DDL添加4条语句,要求studentId为3和4,每个studentId都添加2条数据,科目是数学与英语
 


-- 为studentId为3的学生添加数学和英语成绩
INSERT INTO score (scoreName, result, studentId) VALUES
('数学', 95.0, 3), -- 假设这是studentId为3的学生的数学成绩
('英语', 89.5, 3); -- 假设这是studentId为3的学生的英语成绩


-- 为studentId为4的学生添加数学和英语成绩
INSERT INTO score (scoreName, result, studentId) VALUES
('数学', 94.0, 4), -- 假设这是studentId为4的学生的数学成绩
('英语', 90.5, 4); -- 假设这是studentId为4的学生的英语成绩



-- 为studentId为3的学生添加数学成绩
INSERT INTO score (scoreName, result, studentId) VALUES
('数学', 96.0, 3); -- 假设这是studentId为3的学生新增的数学成绩


-- 为studentId为3的学生添加英语成绩
INSERT INTO score (scoreName, result, studentId) VALUES
('英语', 87.0, 3); -- 假设这是studentId为3的学生新增的英语成绩


-- 为studentId为4的学生添加数学成绩
INSERT INTO score (scoreName, result, studentId) VALUES
('数学', 97.5, 4); -- 假设这是studentId为4的学生新增的数学成绩


-- 为studentId为4的学生添加英语成绩
INSERT INTO score (scoreName, result, studentId) VALUES
('英语', 89.0, 4); -- 假设这是studentId为4的学生新增的英语成绩

帮我创建一个多表联合查询以student为主表,查看学生的所有科目成绩成绩总分,并根据总成绩进行倒序排名,在查询第一列添

SELECT 
    (@row_number:=@row_number + 1) AS ranking, 
    s.id, 
    s.userName, 
    SUM(sc.result) AS total_score
FROM 
    student s
JOIN 
    score sc ON s.id = sc.studentId
JOIN 
    (SELECT @row_number:=0) r -- 初始化排名变量
GROUP BY 
    s.id, s.userName
ORDER BY 
    total_score DESC;

加排名顺序

问题4  存储过程
帮我根据两个DDL创建一个插入信息的存储过程,先插入10条学生信息,再根据插入的学生表信息插入100条对应studentId的score成绩
所有信息随机生成,学生表的自增序号从6开始

DELIMITER //
CREATE PROCEDURE InsertRandomData()
BEGIN
    DECLARE v_student_id INT;
    DECLARE v_counter INT DEFAULT 0;
    DECLARE v_random_score FLOAT;
    DECLARE v_random_score_name VARCHAR(255);
    DECLARE v_random_age INT;
    DECLARE v_random_sex CHAR(1);
    
    -- 插入10条学生信息
    WHILE v_counter < 10 DO
        -- 生成随机数据(这里使用简单的随机数生成,可以根据需要调整)
        SET v_random_age = FLOOR(RAND() * 10 + 18); -- 随机年龄在18到27之间
        SET v_random_sex = IF(RAND() > 0.5, '男', '女'); -- 随机性别
        
        -- 插入学生记录,并获取生成的ID
        INSERT INTO student (createDate, userName, phone, age, sex, introduce)
        VALUES (CURDATE(), CONCAT('学生', FLOOR(RAND() * 1000 + 100)), 
                CONCAT('1', FLOOR(RAND() * 899999999 + 100000000)), 
                v_random_age, v_random_sex, 
                CONCAT('我是学生', FLOOR(RAND() * 1000 + 100)));
        
        -- 获取最后插入的ID
        SET v_student_id = LAST_INSERT_ID();
        
        -- 为每个学生插入10条成绩记录
        SET v_counter = 0;
        WHILE v_counter < 10 DO
            SET v_random_score = FLOOR(RAND() * 100); -- 随机分数0到99之间
            SET v_random_score_name = CONCAT('科目', FLOOR(RAND() * 6 + 1)); -- 随机科目名
            
            INSERT INTO score (scoreName, result, studentId)
            VALUES (v_random_score_name, v_random_score, v_student_id);
            
            SET v_counter = v_counter + 1;
        END WHILE;
        
        SET v_counter = v_counter + 1; -- 外层循环计数器增加
    END WHILE;
END //
DELIMITER ;

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值