SQLZOO 多数据库支持教程:MySQL/PostgreSQL 练习题,职场人士技能提升

2025-06-23| 904 阅读

? SQLZOO 多数据库支持教程:MySQL/PostgreSQL 练习题,职场人士技能提升


咱们打工人在职场里混,SQL 技能那可是相当重要的。不管是数据分析、数据开发还是后端开发,熟练掌握 SQL 能让咱们干活效率翻倍,升职加薪也更有底气。今天就给大家好好讲讲 SQLZOO 这个宝藏平台,它能支持多种数据库,尤其是 MySQL 和 PostgreSQL,通过上面的练习题,能让咱们的 SQL 技能蹭蹭往上提。

? 认识 SQLZOO:开启多数据库练习之旅


可能有些朋友还不了解 SQLZOO,这是一个特别适合学习和练习 SQL 的在线平台。它里面有超多不同难度的练习题,而且支持多种数据库,像咱们常用的 MySQL、PostgreSQL,还有 SQL Server、Oracle 等都能支持。对于咱们想同时掌握不同数据库 SQL 语法的打工人来说,简直太方便了。

第一次用 SQLZOO 的话,先打开浏览器,输入 SQLZOO 的网址(具体网址大家可以自行搜索哈),然后注册一个账号,很简单的,用邮箱就能注册。注册好登录进去,就能看到首页有各种数据库的选项。咱们要练习 MySQL 和 PostgreSQL,就点击对应的数据库模块。每个模块下面又分了很多章节,从基础的 select 语句开始,到复杂的连接查询、子查询、窗口函数等,循序渐进,特别适合系统学习。

?️ 基础查询练习:万丈高楼从地起


不管是 MySQL 还是 PostgreSQL,基础查询都是最核心的部分。咱们先从最简单的 select 语句练起,比如查询表中的某一列或者几列数据。在 SQLZOO 的练习题里,会给咱们一个示例表,比如学生表 student,里面有学号 s_id、姓名 s_name、年龄 s_age、性别 s_sex 等字段。

比如有一道题是让查询所有学生的姓名和年龄,那咱们就可以写:

sql
select s_name, s_age from student;

这在 MySQL 和 PostgreSQL 里语法是一样的。再比如查询年龄大于 20 岁的学生,就要用到 where 条件了:

sql
select s_name, s_age from student where s_age > ;

这里要注意的是,在 SQL 里,字符串比较要用单引号,数字直接写就行。还有 like 运算符,用来模糊查询,比如查询姓名以 “张” 开头的学生:

sql
select s_name from student where s_name like '张%';

在这两种数据库里,like 的用法也是一致的,不过 PostgreSQL 对大小写更敏感,默认情况下,like 是区分大小写的,而 MySQL 默认不区分,除非加 binary 关键字。

? 连接查询:数据关联的关键


在实际工作中,咱们很少只操作一张表,更多的时候需要关联多张表来获取数据,这就用到连接查询了。连接查询包括内连接、左连接、右连接、全连接等。在 MySQL 中,全连接是不支持的,只能通过 union 来实现,而 PostgreSQL 是支持全连接的,用 full join 关键字。

先来看内连接,比如有学生表 student 和课程表 course,学生表有 s_id,课程表有 c_id 和 s_id(学生选课的学号),要查询学生姓名和对应的课程名称,就可以用内连接:

sql
select s_name, c_name from student inner join course on student.s_id = course.s_id;

这里 inner join 可以简写为 join,两种数据库都支持。左连接是查询左表所有记录,以及右表符合条件的记录,比如查询所有学生的选课情况,包括没选课的学生:

sql
select s_name, c_name from student left join course on student.s_id = course.s_id;

右连接和左连接相反,是查询右表所有记录,以及左表符合条件的记录。在 PostgreSQL 中,全连接可以这样写:

sql
select s_name, c_name from student full join course on student.s_id = course.s_id;

而在 MySQL 中,要实现全连接,就需要用左连接 union 右连接:

sql
select s_name, c_name from student left join course on student.s_id = course.s_id
union
select s_name, c_name from student right join course on student.s_id = course.s_id;

这里要注意的是,union 会去重,如果需要保留重复记录,要用 union all。

? 聚合函数:数据统计的好帮手


聚合函数用于对一组数据进行统计,比如 count、sum、avg、max、min 等。在使用聚合函数时,通常会和 group by 子句一起使用,按某个字段分组统计。

比如要统计每个班级的学生人数,学生表中有班级字段 class_id:

sql
select class_id, count(s_id) as student_count from student group by class_id;

这里 count (s_id) 是统计每个班级的学生数量,as 是给统计结果起别名,两种数据库都支持。再比如统计每个班级学生的平均年龄:

sql
select class_id, avg(s_age) as avg_age from student group by class_id;

如果要对分组后的结果进行筛选,就要用到 having 子句,比如统计学生人数大于 5 的班级:

sql
select class_id, count(s_id) as student_count from student group by class_id having student_count > ;

这里要注意,where 是对原始数据进行筛选,having 是对分组后的结果进行筛选,顺序上 where 在 group by 之前,having 在 group by 之后。

? 子查询:复杂查询的利器


子查询就是在一个查询语句中嵌套另一个查询语句,分为单行子查询和多行子查询,可以用在 where、from、select 等子句中。

比如查询年龄大于平均年龄的学生,就可以用子查询先算出平均年龄:

sql
select s_name, s_age from student where s_age > (select avg(s_age) from student);

这是一个单行子查询,因为 avg (age) 返回的是一个值。再比如查询选修了某门课程的学生姓名,课程表中有课程编号 c_id,假设要查询 c_id 为 1 的课程的学生:

sql
select s_name from student where s_id in (select s_id from course where c_id = );

这里 in 关键字用于多行子查询,只要 s_id 在子查询的结果集中就符合条件。子查询还可以用 exists 关键字,比如上面的例子也可以写成:

sql
select s_name from student where exists (select  from course where course.s_id = student.s_id and c_id = );

exists 只要子查询有结果返回就为真,效率上有时候比 in 更高,尤其是在大表中。

? 语法差异对比:MySQL vs PostgreSQL


虽然 MySQL 和 PostgreSQL 都是关系型数据库,大部分 SQL 语法是通用的,但还是有一些差异需要咱们注意,这样在切换数据库时才不会出错。

数据类型


PostgreSQL 支持更多的数据类型,比如 JSON、数组、几何类型等,而 MySQL 在这方面相对较弱。比如在 PostgreSQL 中,可以创建一个 JSON 类型的字段:

sql
create table user_info (
    id serial primary key,
    data json
);

而在 MySQL 中,要存储 JSON 数据,需要用 json 数据类型,但功能没有 PostgreSQL 强大。

函数差异


在字符串函数方面,两种数据库有些不同。比如获取字符串长度,MySQL 用 length () 函数,返回的是字节数,而 PostgreSQL 用 char_length () 函数,返回的是字符数。如果字符串是 UTF - 8 编码,一个汉字在 MySQL 中 length () 返回 3,而 char_length () 返回 1。

在日期函数上,MySQL 的 now () 返回当前日期时间,PostgreSQL 的 now () 也是一样的,但 PostgreSQL 还有更多的日期操作函数,比如计算两个日期之间的天数差,可以用 age () 函数,而 MySQL 需要用 datediff () 函数。

语法严格性


PostgreSQL 对语法的要求更严格,比如在 select 语句中,如果使用了 group by,那么 select 后面的字段要么是聚合函数中的字段,要么是 group by 的字段,否则会报错。而 MySQL 在宽松模式下,允许 select 后面出现非聚合函数和非 group by 的字段,但这是不推荐的,容易导致结果不准确。

? 实战项目:模拟职场场景练习


咱们光练练习题还不够,最好能模拟职场中的实际场景来练习,这样才能更好地把技能应用到工作中。比如假设咱们是一个电商公司的数据分析师,需要分析用户的购买行为。

有用户表 user(u_id, u_name, u_age, u_gender)、订单表 order(o_id, o_date, u_id, total_amount)、订单明细表 order_detail(o_id, p_id, quantity, price)。

需求一:查询每个用户的总购买金额


这就需要用到连接查询和聚合函数,先把用户表和订单表通过 u_id 连接,然后按 u_id 分组,对 total_amount 求和:

sql
select u_name, sum(total_amount) as total_purchase from user
left join order on user.u_id = order.u_id
group by u_id, u_name;

这里用左连接是为了包括没有下单的用户,显示他们的总购买金额为 null。

需求二:查询购买金额前 10 的用户


在上面的基础上,用 order by 子句按 total_purchase 降序排列,再用 limit 10(MySQL)或者 fetch first 10 rows only(PostgreSQL):

sql
-- MySQL
select u_name, sum(total_amount) as total_purchase from user
left join order on user.u_id = order.u_id
group by u_id, u_name
order by total_purchase desc
limit ;

-- PostgreSQL
select u_name, sum(total_amount) as total_purchase from user
left join order on user.u_id = order.u_id
group by u_id, u_name
order by total_purchase desc
fetch first  rows only;

这里要注意两种数据库分页语法的不同,MySQL 用 limit,PostgreSQL 用 fetch...only 或者 offset...limit。

需求三:查询在 2023 年下单的用户及其购买的商品


这需要用到日期筛选和多表连接,订单表中有 o_date 字段,先筛选出 2023 年的订单,然后连接订单明细表获取商品信息:

sql
select u_name, p_id from user
join order on user.u_id = order.u_id
join order_detail on order.o_id = order_detail.o_id
where o_date between '2023 - 01 - 01' and '2023 - 12 - 31';
sql
复制
下载
select u_name, p_id from user
join order on user.u_id = order.u_id
join order_detail on order.o_id = order_detail.o_id
where o_date between '2023 - 01 - 01' and '2023 - 12 - 31';


这里 between...and 是闭区间,包括开始和结束日期。

? 总结:坚持练习,提升技能


通过 SQLZOO 练习 MySQL 和 PostgreSQL 的练习题,咱们可以系统地学习和掌握两种数据库的 SQL 语法,从基础查询到复杂的连接查询、子查询、聚合函数等,再到模拟职场实战项目,一步步提升自己的 SQL 技能。

在练习过程中,要注意两种数据库的语法差异,多动手写代码,遇到问题多思考,学会查看错误信息,慢慢积累经验。咱们打工人在职场中,就是要不断学习新技能,才能不被淘汰,让自己更有竞争力。

最后提醒大家,SQLZOO 上的练习题很多,大家可以根据自己的水平选择合适的章节开始练习,每天花一点时间,坚持下去,肯定能看到自己的进步。

【该文章由dudu123.com嘟嘟 ai 导航整理,嘟嘟 AI 导航汇集全网优质网址资源和最新优质 AI 工具】

分享到:

相关文章

创作资讯2025-02-26

朱雀 ai 检测免费可靠吗?对比传统工具优势解析 2025

🔍 免费是真的吗?实测揭秘朱雀 AI 检测的可靠性 作为深耕内容创作领域多年的老司机,最近被一款叫朱雀 AI 检测的工具刷屏了。很多人都在问,这东西真的免费又好用吗?我花了整整两周时间,从技术原理到

第五AI
创作资讯2025-02-18

在线 ai 检测网站医疗应用:医学影像分析与癌症诊断工具

🔍 在线 AI 检测网站医疗应用:医学影像分析与癌症诊断工具深度评测 在医疗科技飞速发展的今天,在线 AI 检测网站正逐渐成为医学影像分析与癌症诊断的重要辅助工具。这些工具依托深度学习算法,能够快速

第五AI
创作资讯2025-01-02

情感故事赛道如何进行商业化探索?广告、电商与知识付费

情感故事赛道要实现商业化,广告、电商和知识付费这三个方向都有不少玩法。就说广告这一块,现在很多情感类账号都在尝试软性植入。像抖音号 @一块方糖,他们做的青年情感微剧,就把五菱汽车、DR 钻戒这些品牌的

第五AI
创作资讯2025-06-24

易点微信编辑器怎么排版好看?高手都在用的图文美化技巧

💡易点微信编辑器怎么排版好看?高手都在用的图文美化技巧 ✨ 选对模板,让排版事半功倍易点编辑器的模板库简直是个宝藏。这里的模板分类特别细,像节日活动、行业专题、风格类型这些都有。比如你要写一篇美食推

第五AI
推荐2025-08-08

力扣模拟面试防作弊指南:双机位 + 实时代码审查策略揭秘

?双机位布置:打造360°无死角面试环境力扣模拟面试的双机位要求让不少同学犯难,其实把它想象成给电脑装个「监控搭档」就简单了。主机位就是咱们平时用的电脑摄像头,记得调整到能露出整张脸和桌面的角度——下巴别藏在阴影里,键盘也别只露出半个。副机位一般用手机支架固定,放在身体侧后方45度角,这个位置既能拍

第五AI
推荐2025-08-08

Examify AI 是一款怎样的考试平台?2025 最新个性化学习计划解析

?精准提分黑科技!ExamifyAI如何重塑2025考试备考模式?一、核心功能大揭秘:AI如何让考试准备更高效?ExamifyAI作为新一代智能考试平台,最吸引人的地方就是它的自适应学习引擎。这个系统就像一个贴心的私人教练,能根据你的答题数据自动调整学习路径。比如你在数学几何题上错误率高,系统会优先

第五AI
推荐2025-08-08

公众号注册的“蝴蝶效应”:一个选择,可能影响未来三年的运营 - 前沿AIGC资讯

你可能觉得公众号注册就是填几个信息的事,殊不知,这里面的每个选择都像蝴蝶扇动翅膀,未来三年的运营轨迹可能就被悄悄改变了。很多人刚开始没当回事,等到后面想调整,才发现处处受限,那叫一个后悔。今天就跟你好好聊聊,注册时那些看似不起眼的选择,到底能给未来的运营带来多大影响。​📌账号类型选不对,三年运营路难

第五AI
推荐2025-08-08

AI写作如何进行事实核查?确保头条文章信息准确,避免误导读者 - AI创作资讯

上周帮同事核查一篇AI写的行业报告,发现里面把2023年的用户增长率写成了2025年的预测数据。更离谱的是,引用的政策文件号都是错的。现在AI生成内容速度快是快,但这种硬伤要是直接发出去,读者信了才真叫坑人。今天就掰开揉碎了说,AI写作怎么做好事实核查,别让你的头条文章变成 误导重灾区 。​📌AI写

第五AI
推荐2025-08-08

10w+阅读量爆文案例拆解分析:高手都从这5个维度入手 - AI创作资讯

🎯维度一:选题像打靶,靶心必须是「用户情绪储蓄罐」做内容的都清楚,10w+爆文的第一步不是写,是选。选题选不对,后面写得再好都是白搭。高手选选题,就像往用户的「情绪储蓄罐」里投硬币,投对了立刻就能听到回响。怎么判断选题有没有击中情绪?看三个指标:是不是高频讨论的「街头话题」?是不是藏在心里没说的「抽

第五AI
推荐2025-08-08

135编辑器会员值得买吗?它的AI模板库和秀米H5比哪个更丰富? - AI创作资讯

📌135编辑器会员值不值得买?AI模板库和秀米H5谁更胜一筹?🔍135编辑器会员的核心价值解析企业级商用保障与效率提升135编辑器的企业会员堪称新媒体运营的「合规保险箱」。根据实际案例,某团队通过企业会员节省了大量设计费用,完成多篇内容创作,单篇成本从千元降至百元内。这得益于其海量正版模板和素材库,

第五AI
推荐2025-08-08

新公众号被限流怎么办?粉丝增长影响分析及 2025 恢复指南 - AI创作资讯

新公众号被限流怎么办?粉丝增长影响分析及2025恢复指南🔍新公众号限流的核心原因解析新公众号被限流,往往是多个因素叠加的结果。根据2025年最新数据,超过70%的限流案例与内容质量直接相关。比如,有些新手喜欢用“震惊体”标题,像“惊!某公众号三天涨粉十万”,这类标题在2025年的算法里已经被明确标记

第五AI
推荐2025-08-08

AI内容重复率太高怎么办?掌握这些技巧轻松通过AIGC检测 - AI创作资讯

⚠️AI内容重复率高的3大核心原因现在用AI写东西的人越来越多,但很多人都会遇到同一个问题——重复率太高。明明是自己用工具生成的内容,一检测却显示和网上某些文章高度相似,这到底是为什么?最主要的原因是AI训练数据的重叠性。不管是ChatGPT还是国内的大模型,训练数据来源其实大同小异,都是爬取的互联

第五AI
推荐2025-08-08

135编辑器让排版更简单 | 专为公众号运营者设计的效率工具 - AI创作资讯

🌟135编辑器:公众号运营者的效率革命做公众号运营的朋友都知道,排版是个费时费力的活。一篇文章从内容到排版,没几个小时根本搞不定。不过现在好了,135编辑器的出现,彻底改变了这一现状。135编辑器是提子科技旗下的在线图文排版工具,2014年上线至今,已经成为国内新媒体运营的主流工具之一。它的功能非常

第五AI
推荐2025-08-08

用对prompt指令词,AI内容的原创度能有多高?实测效果惊人 - 前沿AIGC资讯

现在做内容的人几乎都离不开AI,但最头疼的就是原创度。平台检测一严格,那些模板化的AI文很容易被打回,甚至判定为“非原创”。但你知道吗?同样是用AI写东西,换个prompt指令词,原创度能差出天壤之别。我最近拿不同的prompt测了好几次,结果真的吓一跳——好的指令能让AI内容原创度直接从“及格线”

第五AI