别再死记硬背SQL了!我用这30个PTA数据库练习题,带你从零到实战通关

张开发
2026/4/19 13:31:14 15 分钟阅读

分享文章

别再死记硬背SQL了!我用这30个PTA数据库练习题,带你从零到实战通关
从零到实战30个PTA数据库练习题构建SQL思维体系当我在大学第一次接触SQL时那些SELECT、WHERE、JOIN就像天书一样令人困惑。直到我发现PTA平台的这套数据库练习题才真正理解了SQL不是用来死记硬背的语法规则而是解决实际问题的思维工具。今天我将分享如何通过这些练习题建立起从基础查询到复杂操作的完整知识框架。1. 基础查询从筛选数据开始任何SQL学习之旅都始于最简单的SELECT语句。PTA的前几道题教会我们如何用WHERE子句精确抓取需要的数据。比如第10-1题要求查询重量在40到65之间的产品这看似简单却包含了几个关键点范围查询的两种写法BETWEEN 40 AND 65或Weight 40 AND Weight 65字段类型对比较操作的影响decimal类型的精确比较-- 方案A使用BETWEEN包含边界值 SELECT Pid, PName, Weight FROM product WHERE Weight BETWEEN 40 AND 65; -- 方案B使用比较运算符 SELECT Pid, PName, Weight FROM product WHERE Weight 40 AND Weight 65;类似的基础筛选模式在第10-2题按姓氏查询和第10-19题按性别查询中再次出现题目编号筛选条件关键语法实际应用场景10-2姓名以刘开头LIKE 刘%客户分类统计10-19性别为女生(sex0)WHERE sex 0用户画像分析10-21姓李的学生WHERE sname LIKE 李%校友信息检索提示LIKE操作符中%匹配任意多个字符_匹配单个字符。在大型表中过度使用LIKE可能导致性能问题。2. 数据操作增删改的实战技巧当我们需要修改数据时INSERT、UPDATE和DELETE语句就派上用场了。PTA的这部分练习题特别有价值因为它们展示了真实业务场景中的数据维护需求。2.1 精准更新数据第10-11题演示了如何定位并修改特定记录-- 修改学号为1911203的学生的联系电话 UPDATE students SET phone 590987 WHERE sno 1911203;而第10-15题则展示了基于条件的批量更新-- 将所有低于75分的女生成绩提高5% UPDATE sc SET grade grade * 1.05 WHERE sno IN ( SELECT sno FROM stu WHERE sex 0 ) AND grade 75;2.2 安全删除数据第10-16题强调了删除操作的外键约束处理-- 先删除从表(sc)中的相关记录 DELETE FROM sc WHERE sno IN ( SELECT sno FROM stu WHERE sname 周强 ); -- 再删除主表(stu)中的记录 DELETE FROM stu WHERE sname 周强;关键要点更新前先用SELECT测试WHERE条件是否准确删除操作要考虑外键约束可能需要事务处理重要数据删除前建议先备份3. 高级查询多表关联与聚合分析真正的业务场景很少只涉及单表查询。PTA中期的练习题开始引入多表关联和聚合函数这是SQL真正强大的地方。3.1 多表连接实战第10-7题展示了典型的INNER JOIN应用-- 查询供应商信息及其订单 SELECT orders.Sid, supplier.SName, supplier.City, orders.OrdNo FROM orders JOIN supplier ON orders.Sid supplier.Sid;而第10-9题则演示了LEFT JOIN的重要性-- 查询职工及其仓库信息包括没有分配仓库的职工 SELECT employee.Eid, employee.EName, employee.Wno, warehouse.City FROM employee LEFT JOIN warehouse ON employee.Wno warehouse.Wno;连接类型对比连接类型保留哪些记录典型应用场景INNER JOIN只保留两表匹配的记录精确关联查询LEFT JOIN保留左表所有记录包含可能为空的关系数据RIGHT JOIN保留右表所有记录较少使用FULL JOIN保留两表所有记录数据比对与合并3.2 聚合函数与分组统计第10-8题介绍了基本的聚合函数-- 计算销售价格的最大值和进货价格的最小值 SELECT MAX(sale_price) AS top_sale, MIN(purchase_price) AS bottom_pur FROM Product;而第10-31题则展示了复杂的分组统计-- 统计各专业学生的平均成绩无成绩的计为0 SELECT mname AS 专业名, IFNULL(AVG(grade), 0) AS 平均成绩 FROM major LEFT OUTER JOIN ( SELECT mno, grade FROM stu, sc WHERE stu.sno sc.sno ) AS a ON major.mno a.mno GROUP BY major.mno ORDER BY major.mno;常见聚合函数COUNT()计数SUM()求和AVG()平均值MAX()/MIN()最大/最小值GROUP_CONCAT()连接字符串MySQL特有4. 视图与复杂查询封装查询逻辑当某些查询变得复杂或需要重复使用时视图(View)就成为得力工具。PTA的最后几题引导我们创建和使用视图。4.1 创建视图简化查询第10-32题创建平均分视图CREATE VIEW V_average_grade AS SELECT Student.Sdept, SC.Sno, Student.Sname, AVG(SC.Grade) AS Average_grade FROM Student JOIN SC ON SC.Sno Student.Sno GROUP BY Student.Sdept, SC.Sno, Student.Sname HAVING AVG(SC.Grade) 80;第10-33题创建不及格学生视图CREATE VIEW V_FailedCourseStudent AS SELECT Student.Sdept, SC.Sno, Student.Sname, Course.Cname, SC.Grade FROM Student JOIN SC ON Student.Sno SC.Sno JOIN Course ON Course.Cno SC.Cno WHERE Grade 60;4.2 子查询与高级筛选第10-28题展示了如何使用子查询进行比较-- 查询比网络工程专业所有学生年龄都小的学生 SELECT sname FROM stu WHERE birdate ( SELECT MAX(birdate) FROM stu WHERE mno ( SELECT mno FROM major WHERE mname 网络工程 ) );第10-30题演示了NOT IN的用法-- 查询S001选修而S003未选修的课程 SELECT cno AS 课程号 FROM sc WHERE sno S001 AND cno NOT IN ( SELECT cno FROM sc WHERE sno S003 );视图的优势简化复杂查询提高安全性隐藏敏感字段保持逻辑一致性向后兼容表结构变更不影响应用这套PTA练习题最宝贵的地方在于它模拟了真实的数据处理场景。当我第一次成功写出那个多表连接的查询时突然明白了SQL不是孤立的语法点而是一套解决数据问题的完整思维方式。

更多文章