SQL笔试真题(基础+进阶)带详细解析答案_第1页
SQL笔试真题(基础+进阶)带详细解析答案_第2页
SQL笔试真题(基础+进阶)带详细解析答案_第3页
SQL笔试真题(基础+进阶)带详细解析答案_第4页
SQL笔试真题(基础+进阶)带详细解析答案_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SQL笔试真题(基础+进阶)带详细解析答案本次试题为互联网、传统软件公司通用SQL笔试题型,难度由浅入深,适配校招、初级开发、数据岗面试。无偏题怪题,全部是工作高频考点。前置说明:试题涉及三张核心测试表,所有题目均基于以下表结构,统一字段、数据类型,避免歧义。一、测试表结构(通用题库表)1.用户表user存储平台注册用户基础信息字段名类型说明user_idint用户ID(主键)user_namevarchar(20)用户名ageint年龄gendervarchar(10)性别(男/女)create_timedatetime注册时间2.订单表order存储用户下单记录,一单对应一个用户字段名类型说明order_idint订单ID(主键)user_idint关联用户ID(外键)order_moneydecimal(10,2)订单金额order_statustinyint订单状态(0未支付,1已支付,2已取消)order_timedatetime下单时间3.商品表goods存储下单对应的商品信息字段名类型说明goods_idint商品ID(主键)order_idint关联订单ID(外键)goods_namevarchar(50)商品名称goods_numint购买数量二、SQL笔试题目(15道,含详细答案)基础题型(1-6题)第1题:查询所有性别为女、年龄大于20岁的用户,展示用户ID、用户名、年龄、注册时间参考答案:sql

SELECTuser_id,user_name,age,create_time

FROMuser

WHEREgender='女'ANDage>20;解析:基础条件查询,多条件用AND拼接,严格按照题目要求指定查询字段,不使用*全查,符合企业开发规范。第2题:查询2025年注册的所有用户信息参考答案:sql

SELECT*

FROMuser

WHEREDATE_FORMAT(create_time,'%Y')='2025';解析:通过DATE_FORMAT函数截取年份,也可使用betweenand限定时间范围,适配datetime类型字段筛选。第3题:查询所有已支付的订单(order_status=1),订单金额大于100元的订单ID和用户ID参考答案:sql

SELECTorder_id,user_id

FROM`order`

WHEREorder_status=1ANDorder_money>100;解析:order是SQL关键字,作为表名时必须用反引号``包裹,避免语法报错,同时叠加状态和金额双重筛选条件。第4题:统计平台总用户数、男女用户各多少人参考答案:sql

--总用户数

SELECTCOUNT(*)AStotal_userFROMuser;

--男女用户数量

SELECTgender,COUNT(user_id)ASuser_num

FROMuser

GROUPBYgender;解析:COUNT(*)统计总行数,COUNT(主键)可忽略null数据;分组统计必须搭配GROUPBY性别字段。第5题:查询用户名包含“小”字的所有用户参考答案:sql

SELECT*FROMuserWHEREuser_nameLIKE'%小%';解析:模糊查询关键字LIKE,%代表任意字符,前后匹配即包含指定文字;仅前缀匹配用「小%」,后缀匹配用「%小」。第6题:查询年龄为空的用户ID和用户名参考答案:sql

SELECTuser_id,user_nameFROMuserWHEREageISNULL;解析:数据库中NULL值不能用=判断,必须使用ISNULL,非空判断用ISNOTNULL,是高频易错点。进阶分组统计(7-10题)第7题:统计每个用户的下单总次数、总消费金额,按消费金额降序排序参考答案:sql

SELECTuser_id,COUNT(order_id)ASorder_count,SUM(order_money)AStotal_money

FROM`order`

GROUPBYuser_id

ORDERBYtotal_moneyDESC;解析:COUNT统计订单数,SUM聚合总金额;GROUPBY用户ID实现单人统计,ORDERBYDESC实现降序,ASC为升序(默认)。第8题:查询下单次数大于2次的用户ID和下单次数参考答案:sql

SELECTuser_id,COUNT(order_id)ASorder_count

FROM`order`

GROUPBYuser_id

HAVINGorder_count>2;解析:分组后筛选条件必须用HAVING,WHERE用于分组前筛选原始数据,这是核心考点,不能混用。第9题:查询每月的订单总金额、订单总数(按下单时间月份统计)参考答案:sql

SELECTDATE_FORMAT(order_time,'%Y-%m')ASmonth,COUNT(order_id)ASorder_num,SUM(order_money)ASmonth_money

FROM`order`

GROUPBYmonth

ORDERBYmonth;解析:按年月分组,保证数据按月聚合,最后按时间正序排列,方便数据查看。第10题:查询已支付订单中,单笔订单金额最高的3条订单记录参考答案:sql

SELECT*

FROM`order`

WHEREorder_status=1

ORDERBYorder_moneyDESC

LIMIT3;解析:先筛选已支付订单,再排序,最后用LIMIT限制返回条数,是TOPN题型通用写法。联表查询+子查询(11-15题,高频面试题)第11题:查询所有已下单用户的用户名、下单时间、订单金额、订单状态参考答案:sql

SELECTu.user_name,o.order_time,o.order_money,o.order_status

FROMuseru

INNERJOIN`order`oONu.user_id=o.user_id;解析:内连接INNERJOIN只查询有订单的用户,无订单用户不展示;使用表别名简化SQL语句,是开发通用写法。第12题:查询所有用户的下单信息,包括从未下过单的用户(左连接)参考答案:sql

SELECTu.user_id,u.user_name,o.order_id,o.order_money

FROMuseru

LEFTJOIN`order`oONu.user_id=o.user_id;解析:左连接以左表(user用户表)为基准,左表所有数据全部展示,右表无匹配数据则显示NULL。第13题:查询每个订单对应的用户名、购买的商品名称、商品数量参考答案:sql

SELECTu.user_name,o.order_id,g.goods_name,g.goods_num

FROMuseru

INNERJOIN`order`oONu.user_id=o.user_id

INNERJOINgoodsgONo.order_id=g.order_id;解析:三表联查,依次关联用户-订单-商品,通过外键字段精准匹配数据,是业务最常用的多表查询场景。第14题:查询没有下过任何订单的用户ID和用户名(子查询写法)参考答案:sql

SELECTuser_id,user_name

FROMuser

WHEREuser_idNOTIN(SELECTDISTINCTuser_idFROM`order`);解析:子查询先查出所有有订单的用户ID,外层查询筛选不在该集合内的用户,DISTINCT去重提升查询效率。也可使用LEFTJOIN判空写法。第15题:统计2025年每个用户的累计消费金额,展示用户名、总消费金额,未消费显示0参考答案:sql

SELECTu.user_name,IFNULL(SUM(o.order_money),0)AStotal_money

FROMuseru

LEFTJOIN`order`oONu.user_id=o.user_idANDDATE_FORMAT(o.order_time,'%Y')='2025'

GROUPBYu.user_id,u.user_name;解析:IFNULL函数将NULL值替换为0,解决未消费用户金额为空的问题;筛选年份条件放在联表ON后,不会过滤无订单用户,是易错重点。三、附加简答题(面试口头/笔试常考)1.WHERE和HAVING的区别?答:1、执行顺序不同:WHERE在分组前过滤原始数据,HAVING在分组后过滤聚合结果;2、使用范围不同:WHERE不能使用聚合函数(SUM/COUNT等),HAVING专门用于聚合结果筛选;3、优先级:WHERE>GROUPBY>HAVING。2.INNERJOIN、LEFTJOIN、RIGHTJOIN的区别?答:内连接

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论