版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章习题答案1.简述limit和distinct的用法limit用法:用于实现分页查询,语法格式为limit[start,]length。其中,start表示从结果集第几条记录开始(默认值为0,即从第1条记录开始,可省略),length表示连续返回的记录条数。核心作用是从查询结果集中截取指定范围的记录,常用于分页展示数据。例如selectscorefromchoosewherescore>50limit1,3,表示从大于50分的分数结果集中,从第2条记录开始截取3条记录。distinct用法:用于实现结果集去重,语法格式为selectdistinct字段列表from数据源。核心特点是作用于整个字段列表,而非单个字段;且不忽略结果集中的null,会将多个null视为相同值进行去重。例如selectdistinctstudent_nofromchoose,可从选课表中检索出已选修课程的学生学号,且每个学号仅显示一次。2.什么是内连接、外连接?MySQL支持哪些外连接?内连接:又称等值连接,核心是通过连接字段比较左表和右表的记录,仅保留连接字段值匹配(比较结果为true)的记录,匹配失败的记录会被丢弃。左表内连接右表与右表内连接左表结果等效。外连接:核心是保留其中一个表的全部记录,另一个表仅保留匹配的记录,未匹配的记录对应字段填充为null。外连接以“基准表”为核心,确保基准表所有数据不丢失。MySQL支持的外连接:仅支持左外连接(简称左连接)和右外连接(简称右连接),不直接支持全外连接(可通过其他方式模拟)。左连接以左表为基准,保留左表全部记录;右连接以右表为基准,保留右表全部记录,且左连接和右连接可相互转换。3.null参与算术运算、比较运算及逻辑运算时,结果是什么?算术运算:结果永远为null。例如10/010%01+null的结果均为null。比较运算:除使用is[not]null运算符外,结果永远为null。例如null=0null>3null<>null结果均为null;仅nullisnull结果为true(显示1),nullisnotnull结果为false(显示0)。逻辑运算:默认结果为null;但存在短路现象时例外。例如trueandnullfalseornullnotnull结果为null;而falseandnull因and短路(前半部分为false已确定结果),结果为false,trueornull因or短路(前半部分为true已确定结果),结果为true。4.null参与排序时,MySQL对null如何处理?MySQL排序时始终将null当作“最小值”处理。具体表现为:使用升序(asc,默认排序方式)时,null值对应的记录会排在结果集最前面;使用降序(desc)时,null值对应的记录会排在结果集最后面。例如select*fromchooseorderbyscoredesc,score为null的记录会排在所有有分数记录的最后。5.您怎样理解select语句与字符集之间的关系?select语句的正常执行和结果正确性依赖于正确的字符集设置,核心关系如下:若select语句中包含中文字符(如where子句中的中文条件),或查询结果集中包含中文字符,必须设置正确的字符集(如utf8mb4),否则可能出现无法检索到目标数据,或查询结果以乱码形式显示的问题。若select语句涉及英文字符的比较或匹配(如字符串比较、模糊查询),需设置正确的字符序(-collation),否则可能因大小写敏感/不敏感问题导致查询结果错误。例如字符序以ci结尾(大小写不敏感)时,'abc'='ABC'结果为true;以cs或bin结尾(大小写敏感)时,结果为false。6.MySQL常用的聚合函数有哪些?这些聚合函数对null操作的结果是什么?常用聚合函数:包括count()(统计记录行数)、sum()(数值字段累加求和)、avg()(数值字段求平均值)、max()(统计数值字段最大值)、min()(统计数值字段最小值)。对null的操作结果:所有常用聚合函数在统计数据时均忽略null值,具体表现为:count():count(字段)忽略null值,仅统计非null字段的记录数;count(*)不忽略null值,统计所有记录行数(包括字段全为null的记录)。sum()、avg()、max()、min():直接忽略字段值为null的记录,仅基于非null值进行计算。例如某字段值为[40,50,null,90],sum()结果为180,avg()结果为60,max()为90,min()为40。7.您怎样理解having子句与where子句之间的区别?having子句与where子句均用于过滤数据,但核心作用场景、过滤时机和支持条件不同,具体区别如下:作用场景不同:where子句用于过滤原始数据(表或视图中的记录),可独立用于select、update、delete语句;having子句仅用于过滤分组后的统计结果,必须与groupby子句(及聚合函数)搭配使用。过滤时机不同:执行顺序上,where子句先于groupby子句执行,先过滤出符合条件的记录,再对这些记录分组;having子句在groupby分组和聚合函数计算完成后执行,过滤分组后的统计结果。支持条件不同:where子句不能使用聚合函数作为过滤条件,仅能基于原始字段(如wherescore>60);having子句可使用聚合函数作为过滤条件(如havingavg(score)>70),也可基于分组字段过滤。8.您怎样理解concat()与group_concat()函数之间的区别?两者均用于字符串连接,但连接场景、作用范围和使用方式差异显著:concat()函数:作用是连接多个独立的字符串(或字段值),返回单个连接后的字符串。核心特点是不依赖分组,对每条记录的指定字段/值进行连接,每条记录对应一个结果。语法为concat(字符串1,字符串2,...),例如concat('13','14')结果为'1314',concat(student_no,'-',student_name)可连接学号和姓名。group_concat()函数:作用是对groupby分组后的同一组记录的指定字段值进行连接,返回每个分组的连接结果字符串。核心特点依赖分组,每组对应一个结果。语法为group_concat(字段[orderby字段][separator'分隔符']),例如selectclass_no,group_concat(student_nameseparator',')fromstudentgroupbyclass_no,可获取每个班级的学生姓名拼接字符串。9.什么是相关子查询与非相关子查询?非相关子查询:不依赖主查询(外层查询),能够独立运行的子查询。执行逻辑是子查询先独立执行一次,将结果返回给主查询,主查询再基于该结果执行。例如“检索成绩比张三平均分高的记录”中,获取张三平均分的子查询selectavg(score)fromstudent,choosewherestudent.student_no=choose.student_noandstudent_name='张三',可单独运行,属于非相关子查询。相关子查询:依赖主查询,无法独立运行的子查询。执行逻辑是主查询每检索一条记录,子查询都需要结合主查询的当前记录值重新执行一次,主查询与子查询相互依赖。例如“检索张三各科成绩中比自己平均分高的课程”中,子查询selectavg(score)fromchoosewherestudent.student_no=choose.student_no引用了主查询的student.student_no字段,需随主查询记录逐行执行,属于相关子查询。10.给定一个教师的工号(如'001'),统计该教师已经申报了哪些课程。核心思路:课程表(course)中通常包含“任课教师工号”字段(teacher_no),通过该字段与给定教师工号匹配,即可检索出该教师申报的课程。假设课程表字段为course_no(课号)、course_name(课程名)、teacher_no(教师工号)等,SQL语句如下:sql
selectcourse_no,course_name,capacity--可根据需求选择要显示的课程字段
fromcourse
whereteacher_no='001';--匹配给定教师工号说明:若需关联教师表获取教师姓名,可添加内连接,语句为:sql
selectt.teacher_name,c.course_no,c.course_name
fromcoursec
jointeachertonc.teacher_no=t.teacher_no
wherec.teacher_no='001';11.MySQL如何使用like模式运算符实现模糊查询?有什么注意事项?实现方式:like运算符用于判断字符串是否与指定模式匹配,语法为strlike'模式'(匹配)或strnotlike'模式'(不匹配)。模式中可使用通配符:%:匹配零个或多个任意字符,例如student_namelike'张%'匹配所有张姓学生。_(下划线):匹配任意一个字符,例如student_namelike'张_'匹配姓名为两个字的张姓学生。注意事项:若模式中使用前导通配符(如like'%三%'like'_三'),将导致无法使用字段的索引,触发全表扫描,降低查询效率。匹配结果受字符序影响:字符序以ci结尾(大小写不敏感)时,'MySQL'like'mysql%'结果为true;以cs或bin结尾(大小写敏感)时,结果为false。若需匹配通配符本身(如%或_),需使用escape关键字定义转义符,例如like'a\_b'escape'\'匹配“a_b”字符串。12.MySQL如何使用正则表达式实现模糊查询?MySQL通过regexp(或rlike)运算符实现正则表达式模糊查询,核心是判断字符串是否符合正则表达式定义的规则,语法为:str[not]regexp[binary]'正则表达式'关键说明:正则表达式由普通字符和元字符构成,元字符实现复杂匹配逻辑,常用元字符包括:^(匹配字符串开头)、$(匹配字符串结尾)、.(匹配任意单个字符)、*(匹配0个或多个前置字符)、+(匹配1个或多个前置字符)、[](匹配括号内任意单个字符)等。例如course_nameregexp'^j.*程序设计$'匹配以“j”开头、以“程序设计”结尾的课程名。binary选项或字符序为bin/cs时,匹配英文字母大小写敏感;否则不敏感。功能比like更强大,可实现复杂匹配(如手机号、邮箱格式验证),例如student_contactregexp'^1[58][0-9]{9}$'匹配以15或18开头的11位手机号。13.MySQL如何进行全文检索?全文检索有什么注意事项?实现方式:MySQL通过全文索引配合match...against语法实现全文检索,核心是基于全文索引快速匹配关键词,避免全表扫描,语法为:select字段列表from表名wherematch(全文索引字段1,字段2...)against(搜索关键字[检索模式])支持三种检索模式:自然语言检索(默认,innaturallanguagemode):基础检索模式,按关键字与字段的关联度匹配结果。布尔检索(inbooleanmode):支持+(必须包含)、-(禁止包含)等操作符,实现精准匹配,例如against('+Java-基础'inbooleanmode)匹配包含“Java”且不包含“基础”的记录。查询扩展检索(withqueryexpansionmode):先执行自然语言检索,再将高关联度记录中的词添加到关键字二次检索,适用于短关键字且结果较少的场景。注意事项:需先为检索字段创建全文索引(如createfulltextindexidx_course_nameoncourse(course_name)),否则无法使用全文检索。MySQL5.7.6及以上版本才内置ngram分词器,支持中文全文检索;低版本需额外配置。搜索关键字以空格分隔,MySQL会自动分词;关键字过短(如1-2个字符)可能无法匹配,受ft_min_word_len参数限制。match后的字段顺序需与全文索引的字段顺序一致。14.您觉得全文检索与like模糊查询、正则表达式模糊查询最大的区别是什么?最大区别在于查询效率和适用场景,核心差异源于是否支持索引:全文检索:基于全文索引实现,即使是模糊匹配(如匹配关键字中间部分),也能快速定位数据,避免全表扫描,效率极高;适用于大量文本数据(如文章、课程描述)的关键词检索,尤其支持中文分词,适合复杂的模糊查询场景。like模糊查询:无前置通配符(如like'张%')时可使用前缀索引,效率尚可;但使用前导通配符(如like'%三%')时,无法使用索引,触发全表扫描,效率极低;适用于简单的前缀/后缀匹配场景(如匹配固定前缀的姓名、编号)。正则表达式模糊查询:无论正则表达式结构如何,均无法使用索引,始终触发全表扫描,效率最低;但功能最灵活,适用于特殊格式验证(如手机号、邮箱)或极复杂的匹配规则场景,不适用于大量数据检索。15.最新版本的MySQL中,InnoDB存储引擎的表支持中文全文检索吗?支持。MySQL从5.7.6版本开始,InnoDB存储引擎内置了ngram中文分词器,正式支持中文全文检索功能;最新版本(如8.0+)进一步优化了该功能的稳定性和效率。注意:需确保满足两个条件:①MySQL版本为5.7.6及以上;②为需要检索的中文字段创建全文索引(使用fulltext关键字),即可通过match...against语法实现中文全文检索。16.MySQL不支持全外连接,您能不能通过其他技术手段实现全外连接的功能?可以。全外连接的核心需求是返回两个表的全部记录,匹配的记录合并显示,未匹配的记录对应字段填充为null。MySQL虽不直接支持fulljoin(全外连接),但可通过“左连接unionall右连接(排除重复匹配记录)”实现,步骤如下:对左表执行左连接右表,获取左表全部记录及匹配的右表记录。对右表执行左连接左表(等效于左表右连接右表),并通过where子句过滤掉已在步骤1中匹配的记录(避免重复)。使用unionall合并两步的结果,得到全外连接的效果。示例(以student表和classes表为例,连接字段为class_no):sql
--步骤1:左表(student)左连接右表(classes)
selects.student_no,s.student_name,c.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 陕西省西安市雁塔区2026年初三下第一次检测试题考试物理试题含解析
- 急诊科常见急症护理
- 2026年大学大一(康复医学)康复医学基础理论测试题及答案
- 2026年大学大一(机械工程)流体力学阶段测试试题及答案
- 情志因素与护理调节
- 护理查房流程与技巧
- 护理学基础:病人对环境的需求与评估
- 护理课件资源平台及使用指南
- 2026六年级数学下册 百分数估算策略
- 2026二年级数学上册 观察物体知识点
- 工程项目管理基础知识培训教材及讲义
- JJF(皖) 24-2020 药物溶出试验仪校准规范
- 石棉制品工岗位现场作业技术规程
- 挖机河道清淤技术施工方案
- 2026年春学期人教版初中英语八年级下册教学进度表
- 女性盆底解剖及生理课件
- (2026年)实施指南《FZT 41001-2013桑蚕绢纺原料》
- 冲压模具维护保养培训
- 财务分析盈利能力分析教案
- 管理体系咨询中期汇报
- 《人工智能通识教程》课件全套 李正军 第1-8章 绪论、机器学习 -具身智能与机器人系统
评论
0/150
提交评论