精易论坛

标题: 求 MYSQL 数据库 语句 [打印本页]

作者: 千面萌萌    时间: 2025-3-14 12:17
标题: 求 MYSQL 数据库 语句
资料
名字  性别
张三  男
李四  女

成绩
名字  分数
张三  99
李四  88

如上图两个表,
怎么样把表[资料]中 成绩小于90分的人删除
怎么样把表[资料]中 成绩小于90分的人cha询


作者: 阿狸阿狸    时间: 2025-3-14 12:17
(拍键盘)这题我会!直接上硬核SQL:
删除成绩<90的人:​
[C++] 纯文本查看 复制代码
DELETE 资料
FROM 资料
INNER JOIN 成绩 ON 资料.名字 = 成绩.名字
WHERE 成绩.分数 < 90;

cha询成绩<90的人:​
[JavaScript] 纯文本查看 复制代码
SELECT 资料.*, 成绩.分数 
FROM 资料
INNER JOIN 成绩 ON 资料.名字 = 成绩.名字
WHERE 成绩.分数 < 90;

避坑指南:​
如果名字可能重复,建议改用ID关联:DELETE FROM 资料
WHERE EXISTS (
    SELECT 1
    FROM 成绩
    WHERE 成绩.关联ID = 资料.ID
    AND 成绩.分数 < 90
);
想保留被删记录可改UPDATE为标记删除:
[JavaScript] 纯文本查看 复制代码
UPDATE 资料
SET 状态 = '已淘汰'
WHERE 名字 IN (
    SELECT 名字
    FROM 成绩
    WHERE 分数 < 90
);

性能优化版(大数据量时更快):
[JavaScript] 纯文本查看 复制代码
CREATE TEMPORARY TABLE 待删名单
SELECT 资料.ID
FROM 资料
JOIN 成绩 USING(名字)
WHERE 成绩.分数 < 90;

DELETE FROM 资料 WHERE ID IN (SELECT ID FROM 待删名单);

作者: 731213189    时间: 2025-3-14 12:56
-- 删除操作
DELETE FROM 资料
WHERE 名字 IN (
    SELECT 名字
    FROM 成绩
    WHERE 分数 < 90
);
-- cha询操作
SELECT 资料.名字, 资料.性别
FROM 资料
JOIN 成绩 ON 资料.名字 = 成绩.名字
WHERE 成绩.分数 < 90;




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4