SQL基础面试题及详细答案(初级)_第1页
SQL基础面试题及详细答案(初级)_第2页
SQL基础面试题及详细答案(初级)_第3页
SQL基础面试题及详细答案(初级)_第4页
SQL基础面试题及详细答案(初级)_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

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

文档简介

SQL基础面试题及详细答案(初级)说明:本套题目为职场初级SQL高频面试题,适配数据运营、开发实习生、初级开发、数据分析岗面试,题型由浅入深,答案贴合实际工作写法,简洁实用。默认测试数据表(所有题目均基于以下两张表,统一场景):1.用户表user字段:user_id(用户ID,主键)、user_name(用户名)、age(年龄)、gender(性别)、create_time(注册时间)2.订单表order字段:order_id(订单ID,主键)、user_id(关联用户ID)、order_money(订单金额)、order_status(订单状态)、order_time(下单时间)一、基础查询类(入门必考)1、SQL中select、where、groupby、having、orderby、limit的执行顺序是什么?答案:执行顺序和书写顺序不一致,真实执行顺序:from表→where筛选→groupby分组→聚合函数计算→having分组筛选→select查字段→orderby排序→limit限制条数补充说明:where是分组前筛选,不能用聚合函数;having是分组后筛选,可以使用聚合函数,这是两者最核心的区别。2、查询用户表中所有性别为男、年龄大于20岁的用户,只展示用户ID、用户名、年龄答案:sql

SELECTuser_id,user_name,age

FROMuser

WHEREgender='男'ANDage>20;3、去重关键字是什么?查询用户表中所有不重复的性别答案:去重关键字为DISTINCTsql

SELECTDISTINCTgenderFROMuser;4、模糊查询关键字是什么?查询用户名包含“张”的所有用户答案:模糊查询使用LIKE,搭配通配符%(匹配任意字符)、_(匹配单个字符)sql

SELECT*FROMuserWHEREuser_nameLIKE'%张%';补充:%张代表以张结尾,张%代表以张开头5、查询年龄为空的用户数据,为什么不能用age=null?答案:null在SQL中代表未知值,不能用=判断,必须使用ISNULL/ISNOTNULL正确写法:sql

SELECT*FROMuserWHEREageISNULL;二、聚合函数与分组查询(高频)1、常用的SQL聚合函数有哪些?答案:count():统计条数;sum():求和;avg():平均值;max():最大值;min():最小值注意:count(*)统计所有数据,包含null;count(字段)不统计字段为null的数据2、统计订单表的总订单数、总交易金额、平均订单金额答案:sql

SELECT

COUNT(order_id)AS总订单数,

SUM(order_money)AS总交易金额,

AVG(order_money)AS平均订单金额

FROMorder;3、按用户分组,统计每个用户的下单数量,只展示下单数量≥2的用户答案:sql

SELECTuser_id,COUNT(order_id)AS下单数

FROMorder

GROUPBYuser_id

HAVINGCOUNT(order_id)>=2;考点解析:分组后的条件筛选必须用having,不能用where4、查询订单金额最高的一条订单数据答案:sql

SELECT*FROMorderORDERBYorder_moneyDESCLIMIT1;三、联表查询(核心必考)1、SQL常用的联表查询有几种?区别是什么?答案:共4种核心联表方式:1、innerjoin(内连接):只查询两张表中匹配成功的数据,交集数据2、leftjoin(左连接):以左表为准,左表所有数据全部展示,右表匹配不到则显示null3、rightjoin(右连接):以右表为准,右表所有数据全部展示,左表匹配不到则显示null4、fulljoin(全连接):展示两张表所有数据,无匹配则显示null(部分数据库如MySQL不支持)2、查询所有用户的用户名、下单金额,包含从未下单的用户(展示金额为null)答案:需求需要保留所有用户,使用左连接,用户表为左表sql

SELECTu.user_name,o.order_money

FROMuseru

LEFTJOINorderoONu.user_id=o.user_id;3、查询有过下单记录的用户姓名、订单金额答案:只需匹配有订单的用户,使用内连接sql

SELECTu.user_name,o.order_money

FROMuseru

INNERJOINorderoONu.user_id=o.user_id;四、子查询与进阶基础1、查询下单金额大于平均订单金额的所有订单答案:sql

SELECT*FROMorder

WHEREorder_money>(SELECTAVG(order_money)FROMorder);2、in和exists的区别?答案:1、in:先查询子查询结果集,再匹配主表数据,子查询数据量小的时候效率高2、exists:遍历主表数据,逐条判断子查询是否存在匹配数据,主表数据量小、子查询数据量大时效率更高简单总结:小表驱动大表用in,大表驱动小表用exists3、查询没有下过单的用户信息答案:两种常用写法写法1(子查询notin):sql

SELECT*FROMuser

WHEREuser_idNOTIN(SELECTDISTINCTuser_idFROMorder);写法2(左连接判空,工作更常用,效率更高):sql

SELECTu.*FROMuseru

LEFTJOINorderoONu.user_id=o.user_id

WHEREo.order_idISNULL;五、基础概念面试问答(口头面试必考)1、union和unionall的区别?答案:1、union:合并查询结果,自动去重,效率低2、unionall:直接合并所有结果,不去重,效率更高工作中若无去重需求,优先使用unionall2、where和having的区别?答案:1、执行时机:where在分组前筛选,having在分组后筛选2、函数支持:where不能使用聚合函数,having可以使用聚合函数3、适用场景:普通字段筛选用where,分组后的统计结果筛选用having3、索引的作用是什么?答案:索引是数据库优化手段,核心作用是提升查询效率,

温馨提示

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

评论

0/150

提交评论