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

下载本文档

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

文档简介

SQL基础面试题及详细答案(真实面试版)本套试题为企业面试高频基础题型,涵盖SQL核心概念、基础查询、多表关联、分组聚合、子查询、索引、数据库基础等核心内容,答案贴合实际工作场景,通俗易懂,无书面化套话,适合初级开发、测试、数据岗位面试复习。一、基础概念类(高频必问)1、什么是SQL?SQL的分类有哪些?答案:SQL是结构化查询语言,是关系型数据库的通用操作语言,主要用于实现数据库的查询、新增、修改、删除以及数据库结构管理、权限管理等操作。主流分为四大类:DQL(数据查询语言):核心语句SELECT,用于查询数据库数据,工作中使用频率最高。DML(数据操作语言):INSERT、UPDATE、DELETE,用于对表中数据进行增改删。DDL(数据定义语言):CREATE、ALTER、DROP,用于创建、修改、删除数据库、数据表、索引等结构。DCL(数据控制语言):GRANT、REVOKE,用于用户权限的授予和回收。2、简述数据库、数据表、字段、数据行的关系答案:数据库是整体容器,一个数据库可以包含多张数据表;数据表是存储具体业务数据的载体,是结构化的二维表格;表中纵向的每一列是字段(列),代表数据的属性,比如用户表的姓名、年龄、手机号;横向的每一行是一条数据记录,代表一条完整的业务数据,比如一个用户的全部信息。3、CHAR和VARCHAR的区别是什么?工作中如何选择?答案:长度特性:CHAR是固定长度,定义多少位就占用多少存储空间;VARCHAR是可变长度,存储数据多长就占用多大空间,会轻微额外占用1-2字节记录长度。性能差异:CHAR读写速度更快,无需动态计算长度;VARCHAR更节省存储空间。尾部空格:CHAR会自动补齐尾部空格,查询时忽略尾部空格;VARCHAR会保留输入的尾部空格。使用选择:固定长度、长度较短、查询频繁的字段用CHAR,比如手机号、身份证号、性别;长度不固定、长短差异大的字段用VARCHAR,比如用户名、备注、地址。4、NULL和空字符串''的区别?答案:NULL代表无值、未知值,不占用存储空间,判断必须用ISNULL/ISNOTNULL,不能用=、!=判断。空字符串''是有值的空字符,占用存储空间,是确定的值,可以用=''判断。工作中建议尽量避免字段为NULL,会导致查询、索引、统计结果出现异常,通常默认设置空字符串或0替代NULL。二、基础查询类(实操高频)5、SELECT语句的完整执行顺序是什么?答案:书写顺序:SELECT->FROM->WHERE->GROUPBY->HAVING->ORDERBY->LIMIT真实执行顺序(核心考点):FROM->WHERE->GROUPBY->HAVING->SELECT->ORDERBY->LIMIT关键说明:WHERE在分组前过滤数据,HAVING在分组后过滤聚合结果;SELECT的别名,WHERE中不能用,ORDERBY和HAVING可以用。6、WHERE和HAVING的区别?答案:执行时机不同:WHERE是分组前过滤原始数据;HAVING是分组后过滤聚合后的结果。支持函数不同:WHERE不能使用聚合函数(SUM、COUNT、MAX等);HAVING专门用于过滤聚合函数结果。使用场景:普通条件筛选用WHERE,分组后的条件筛选必须用HAVING。7、DISTINCT的作用及使用注意事项答案:DISTINCT用于去除查询结果中的重复数据,返回唯一值。注意事项:DISTINCT作用于后面所有字段,不是只作用于第一个字段,多字段组合重复才会去重。性能较差,会全表扫描、排序去重,大数据量下尽量少用,可以通过分组替代。不识别NULL,多个NULL值会被视为重复值,只会保留一个。8、LIMIT的用法?如何实现分页查询?答案:LIMIT用于限制查询结果的返回条数,语法:LIMIT起始下标,条数。分页公式:LIMIT(页码-1)*每页条数,每页条数示例:查询第3页,每页10条数据:LIMIT20,10注意:页码从1开始,数据下标从0开始;大页码分页(比如LIMIT100000,10)效率极低,工作中会用主键索引分页优化。三、聚合函数与分组考点9、常用的聚合函数有哪些?聚合函数的特性?答案:常用聚合函数:COUNT(统计条数)、SUM(求和)、AVG(平均值)、MAX(最大值)、MIN(最小值)。核心特性:所有聚合函数都会忽略NULL值。补充区别:COUNT(*)统计所有行数,包含NULL;COUNT(字段)统计字段非空的行数,自动忽略NULL。工作中统计总行数优先用COUNT(*)。10、GROUPBY分组的使用规范?为什么分组后查询字段必须是分组字段或聚合函数?答案:GROUPBY是按照指定字段对数据进行分组,相同字段值的数据合并为一组。规范:SELECT后的字段,只能是GROUPBY后的分组字段,或者聚合函数。原因:分组后每一组是多条数据合并后的结果,非分组字段存在多个值,数据库无法确定展示哪一个,会直接报错。部分低版本MySQL可以松散查询,但属于不规范写法,生产环境必须禁止。四、多表查询与关联查询11、SQL常用的表连接方式有哪些?区别是什么?答案:常用四种连接方式,以A表、B表为例:INNERJOIN(内连接):只返回两张表中匹配成功的数据,交集数据,匹配不到的数据直接过滤。LEFTJOIN(左连接):以左表为基准,左表所有数据全部展示,右表匹配不到的字段显示NULL。RIGHTJOIN(右连接):以右表为基准,右表所有数据全部展示,左表匹配不到的字段显示NULL。FULLJOIN(全连接):展示左右两张表所有数据,匹配不上的字段补NULL,MySQL不支持全连接,可通过UNION合并左右连接实现。工作中左连接使用最多,适合查询主表全部数据、关联附表信息的场景。12、LEFTJOIN后加WHERE条件和ON条件有什么区别?答案:ON后条件:是表的关联条件,只用来匹配两张表数据,不会过滤左表数据。右表匹配失败,左表数据依然保留,右表字段为NULL。WHERE后条件:是关联完成后的结果过滤,会筛选最终数据,不满足条件的左表数据会被直接剔除。核心总结:左连接筛选附表数据写ON,筛选主表数据写WHERE。13、UNION和UNIONALL的区别?答案:去重区别:UNION会自动去除合并后的重复数据;UNIONALL直接拼接所有结果,不去重。性能区别:UNION需要排序去重,性能差;UNIONALL无需排序,性能远高于UNION。使用场景:确定数据无重复,优先用UNIONALL;需要自动去重时使用UNION。前提:两个查询语句的字段数量、字段类型必须一致。五、子查询与常用函数14、什么是子查询?子查询的分类?答案:子查询就是嵌套在另一条SQL语句中的查询语句,优先执行子查询,再执行外层查询。分为三类:标量子查询:子查询返回单行单列一个值;行子查询:返回单行多列;列子查询:返回多行单列,常搭配IN、EXISTS使用。15、IN和EXISTS的区别?如何选择使用?答案:执行逻辑:IN是先执行子查询,把结果缓存,外层查询匹配子查询结果;EXISTS是遍历外层查询,逐行判断子查询是否存在数据。性能场景:子查询数据量小、外层表数据量大,用IN;子查询数据量大、外层表数据量小,用EXISTS。新版本MySQL会自动优化两者,性能差距很小,但大数据量场景依然遵循以上规则。16、简述CASEWHEN函数的作用及用法答案:CASEWHEN是条件判断函数,相当于SQL中的if-else逻辑,用于查询时动态修改字段值、分类统计数据。基础语法:CASEWHEN条件1THEN结果1WHEN条件2THEN结果2ELSE默认结果END常用场景:状态翻译、数据分类、多条件统计求和。六、索引与性能基础(面试重点)17、什么是索引?索引的优缺点?答案:索引是数据库为数据表建立的排序结构,相当于书籍的目录,用于快速定位数据,提升查询效率。优点:极大提升查询、排序、分组、关联查询的速度。缺点:占用磁盘存储空间;降低增删改数据的效率,数据变更时需要同步更新索引结构。18、MySQL常用索引类型有哪些?答案:主键索引:唯一且非空,一张表只能有一个主键索引,查询优先级最高。唯一索引:字段值唯一,允许为NULL,可用于手机号、邮箱等唯一字段。普通索引:最基础的索引,允许重复、允许NULL,仅用于提升查询速度。联合索引:多个字段组合建立的索引,遵循最左匹配原则。19、什么是联合索引最左匹配原则?答案:联合索引(a,b,c)的生效规则:查询条件必须包含最左侧的a字段,索引才会生效。生效场景:wherea=?、wherea=?andb=?、wherea=?andb=?andc=?失效场景:whereb=?、wherec=?、whereb=?andc=?工作中建立联合索引时,优先把查询频率高、筛选力度大、非空的字段放在最左侧。20、哪些情况会导致索引失效?答案:日常面试和开发中最常见的索引失效场景:索引字段使用函数、运算、类型转换;使用!=、<>、NOTIN、NOTLIKE反向查询;模糊查询以%开头(%xxx),尾部模糊(xxx%)索引有效;违反联合索引最左匹配原则;MySQL判断全表扫描比索引查询更快时,会自动放弃索引。七、事务基础(基础必背)21、什么是数据库事务?事务的四大特性(ACID)?答案:事务是一组SQL语句的执行单元,要么全部执行成功,要么全部执行失败回滚,保证数据操作的一致性。四大特性ACID:原子性:事务不可分割,整体成功或整体失败。一致性:事务执行前后,数据库数据状态保持合法一致,无数据错乱。隔离性:多个事务之间相互隔离,互不干扰。持久性:事务提交成功后,数据永久保存,断电重启不丢失。22、MySQL默认事务隔离级别是什么?答案:MySQL默认隔离级别为:可重复读(RR)。该级别可以解决脏读、不可重复读问题,存在幻读问题,通过MVCC机制优化后,基本满足生产环境使用。八、实操SQL面试真题(带答案)通用测试表:用户表user(id,username,age,sex,create_time)、订单表order(id,user_id,order_money,create_time)23、查询所有20岁以上的男性用户,按创建时间倒序排序答案:PlainText

SELECTid,username,age,sex,create_time

FROMuser

WHEREage>20ANDsex='男'

ORDERBYcreate_timeDESC;24、统计每个用户的订单总金额,展示用户名、订单总金额,无订单用户金额显示0答案:PlainText

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

FROMuseru

LEFTJOIN`order`oONu.id=o.user_id

GROUPBYu.id,u.username;25、查询订单总金额大于1000元的用户答案:Pl

温馨提示

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

评论

0/150

提交评论