猜你喜欢
精讲MySQL复杂查询

精讲MySQL复杂查询

书籍作者:张方兴 ISBN:9787302653509
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:8375
创建日期:2024-06-26 发布日期:2024-06-26
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

本书根据各个公司的SQL复杂查询面试题进行编写,可以更好辅助读者进行针对性的学习。尤其每个SQL复杂查询面试题都通过步骤的形式进行解读,而非直接摆出一个答案。对比答案而言,解题思路更为重要。希望学习本书之后,读者可以拥有一份自己针对复杂查询的解题思路。

本书共13章,分别对应SQL语句的查询基础、多表联查、元数据的查询与管理、字符串的查询与处理、数字的查询与处理、日期的查询与处理、JSON和XML的查询与处理、结果集的查询与处理、视图与临时表、存储过程与预编译语句、触发器与自定义函数、事务与锁、数据库备份、复杂查询面试题等相关内容。

作者精心设计多种案例与复杂查询题目,非随意摆出的“难题”,而是基于工作时积攒的业务场景。本书适合初学者入门,适合准备开始面试的学生进行面试准备,适合开发多年却仍然对复杂查询心有余悸的程序员,并可作为高等院校和培训机构相关专业的教学参考书。


作者简介

张方兴,多年一线开发程序员,著有《微服务分布式架构基础与实战:基于Spring Boot+Spring Cloud》《高性能Java架构:核心原理与案例实战》《鸿蒙入门:HarmonyOS应用开发》。

前言




MySQL不仅可以满足企业级应用的需求,还可以用于个人项目和学术研究。学习复杂查询是非常重要的,因为复杂查询可以帮助你更好地理解和使用MySQL。以下是学习 MySQL复杂查询的一些重要原因。


(1) 高效查询: 学习MySQL复杂查询可以帮助你更好地理解如何使用索引、子查询和联合查询等技术,从而实现更高效的查询。这可以提高查询性能,减少查询时间和资源消耗。


(2) 数据库管理: 学习MySQL复杂查询可以帮助你更好地理解如何使用存储过程、触发器和视图等技术,从而实现更高效的数据库管理。这可以提高数据库的可靠性、安全性和可维护性。


(3) 应用开发: 学习MySQL复杂查询可以帮助你更好地理解如何使用MySQL进行应用开发。这可以帮助你更好地设计数据库结构,编写高效的查询语句,从而实现更高效的应用开发。


学习 MySQL 复杂查询是非常重要的,无论你是 MySQL 的新手还是专业人士,学习 MySQL 复杂查询都可以帮助你更好地实现更高效的数据库管理和应用开发。


笔者在编写本书之前已经构思了数年,将多年操作数据库的经验与工作中实际发生的复杂增、删、改、查需求尽可能“塞进”一本书里。


如果是Java程序员、PHP程序员等高级语言类程序员阅读完本书之后,在实际工作中几乎不会再遇到可以难倒你的增、删、改、查问题。



本书主要内容


第1章和第2章铺垫SQL语句查询的基础,包含基础查询及多表联查等内容,前两章内容无论是工作与学习都是必备技术。


第3章简单讲解MySQL元数据与数据库一些技术数据的管理,使读者对数据库底层有更深的理解。


第4~8章深度讲解MySQL 8.0的函数与数据类型,与其他书籍不同的是此处不仅对每种数据类型和函数进行深度讲解,还针对不同的数据类型进行复杂查询练习。进行复杂查询练习时也是针对解题思路,用一步一步的方式进行讲解,重要的不是最终答案,而是解题过程中所需要思考的内容。


第9~11章讲解数据库的视图、临时表、存储过程、预编译语句、触发器、自定义函数等MySQL高级技巧。每种技巧都搭配了在实际工作中可能出现的应用场景,绝非只列举技术,而是通过工作时所出现需求的方式对其进行讲解。


第12章和第13章讲解MySQL的事务、锁、备份等维护数据库的内容,并且增加了面试时常见的MySQL复杂查询面试题。


附录A记录了MySQL全部语句格式的释义,方便读者对MySQL有更深刻的认识,并且列出了书籍中使用的数据库表格式及内容。



阅读建议


本书是一本基础入门加实战的书籍,既有基础知识,又有复杂查询的示例。建议读者在学习基础知识时多尝试在计算机上运行,可以增强对基础知识的记忆与理解。进行复杂查询学习时建议不要直接看答案和步骤,先尝试自己进行解题,然后通过书中的解题思路进行对照。






任何复杂查询的答案都是毫无意义的,重要的是一步步解题的过程和思路。如何通过众多基础知识的组合得到答案,这些思路才是学习复杂查询的重点。


在元数据、视图、临时表、存储过程、预编译语句、触发器、自定义函数、事务、锁等技术内容上,可以尝试除了笔者提出业务上执行过的场景之外,读者自行想一些可能出现的技术类场景,并进行实现。针对自己提出的问题,自己进行解答,这才是更好的学习方法。



资源下载提示


素材(源码)等资源: 扫描目录上方的二维码下载。


视频等资源: 扫描封底的文泉云盘防盗码,再扫描书中相应章节的二维码,可以在线学习。



由于编者水平有限,书中难免存在不妥之处,请读者见谅,并提宝贵意见。



张方兴2023年12月






目录

本书源码

教学课件(PPT)

第1章SQL语句基础与精讲select关键字

1.1SQL查询语句基础

1.1.1SQL简介

1.1.2SQL的语句类型

1.1.3关系数据库的组成

1.1.4查询语句的基本规则

1.1.5dual虚拟表

1.1.6数字计算符号的特殊情况

1.2精讲select关键字

1.2.1select常规语法

1.2.2distinct关键字

1.2.3straight_join关键字

1.2.4sql_result关键字

1.2.5sql_cache关键字

1.2.6group by与having关键字

1.2.7order by关键字

1.2.8with rollup关键字

1.2.9window关键字

1.2.10limit与offset关键字

1.2.11limit分页相关公式

1.2.12for关键字

1.3MySQL 8.0的内置函数与帮助

1.3.1了解MySQL自带的实例库

1.3.2通过MySQL 8.0内置文档了解MySQL 8.0函数

1.4条件查询

1.4.1MySQL中的比较运算符

1.4.2like关键字

1.4.3strcmp()函数

1.4.4MySQL中的正则表达式语法

第2章子查询与连接查询

2.1子查询

2.1.1子查询的作用

2.1.2子查询作为列值

2.1.3外层嵌套子查询

2.1.4使用子查询进行比较

2.1.5子查询的相关关键字

2.1.6行内子查询与构造表达式

2.1.7子查询作为派生表

2.2连接查询

2.2.1连接查询语句

2.2.2笛卡儿积

2.2.3交叉连接

2.2.4左连接

2.2.5右连接

2.2.6拼接

2.2.7全连接

2.2.8内连接

2.2.9并集去交集

2.2.10自连接

第3章MySQL元数据相关查询

3.1show关键字

3.1.1show关键字查看某实例库中含有的表

3.1.2show关键字查看表结构

3.1.3show关键字查看binlog日志

3.1.4show关键字查看相关创建语句信息

3.1.5show关键字查看MySQL支持哪些引擎

3.2数据库的系统变量元数据与set关键字

3.2.1set关键字用于用户自定义变量

3.2.2set关键字用于环境变量

3.2.3sql_mode变量

3.2.4根据用户自定义变量增加列的行号

3.3表的元数据

3.3.1表的元数据查询

3.3.2表信息中的row_format字段

3.3.3表信息中的data_free字段

3.3.4MySQL各表占用磁盘空间计算方式

3.3.5利用optimize关键字优化空间碎片

3.3.6查看表中的约束

3.4列的元数据

3.5用户权限的元数据

3.5.1查询当前MySQL中含有哪些用户

3.5.2用户的操作权限

3.5.3表的操作权限

3.5.4列的操作权限

第4章SQL字符串的查询与处理

4.1MySQL 8.0中的字符串

4.1.1字符、字符集与字符串

4.1.2字符集与排序

4.1.3字符串各数据类型的存储空间

4.1.4char类型与varchar类型

4.1.5varchar类型的长度误区

4.1.6binary类型与varbinary类型

4.1.7blob类型与text类型

4.1.8enmu类型

4.1.9set类型

4.2字符串相关常用函数

4.2.1concat()函数(多列拼接)

4.2.2group_concat()函数(多行拼接)

4.2.3replace()函数

4.2.4regexp_substr()函数

4.2.5substr()函数与substring()函数

4.2.6substring_index()函数

4.2.7instr()函数与locate()函数

4.2.8length()函数

4.2.9reverse()函数

4.2.10right()函数与left()函数

4.2.11rpad()函数

4.2.12space()函数

4.2.13trim()、rtrim()、ltrim()函数

4.2.14upper()函数与lower()函数

4.2.15repeat()函数

4.2.16insert()函数

4.2.17elt()函数

4.2.18concat_ws()函数

4.3MySQL 8.0处理字符串相关的复杂查询

4.3.1查询总经理名称并增加单引号

4.3.2将数字数据和字符数据分开

4.3.3计算字符串中特定字符出现的次数

4.3.4提取分隔符数据中的第N个数据

第5章SQL数字的查询与处理

5.1MySQL 8.0的数字

5.1.1MySQL 8.0中的数字类型

5.1.2tinyint类型、bool类型、boolean类型

5.1.3无符号整数类型

5.1.4数字类型的精度

5.2数字常用函数与运算符

5.2.1div()函数

5.2.2abs()函数

5.2.3ceiling()函数

5.2.4floor()函数

5.2.5pow()函数和power()函数

5.2.6rand()函数

5.2.7truncate()函数

5.3聚合函数

5.3.1count(distinct)函数

5.3.2查询每个部门的平均薪资

5.3.3查询每个部门的薪资最高与最低的人(携带提成)

5.3.4查询每个部门的薪资总额

5.3.5查询每个部门有多少人

5.3.6查询每个部门有多少人没有提成

5.3.7查询某个部门薪资占全公司的百分比

5.4窗口函数

5.4.1窗口函数的语法

5.4.2初步使用窗口函数

5.4.3partition by关键字

5.4.4order by关键字

5.4.5rank()函数

5.4.6dense_rank()函数

5.4.7percent_rank()函数

5.4.8ntile()函数

5.5聚合函数窗口化

5.6MySQL 8.0处理数字相关的复杂查询

5.6.1计算众数

5.6.2计算中值

第6章SQL日期的查询与处理

6.1MySQL 8.0的日期

6.1.1MySQL 8.0中的日期类型

6.1.2date类型

6.1.3datetime类型

6.1.4time类型

6.1.5year类型

6.2获取当前日期和时间函数

6.3日期的运算

6.4日期的比较

6.5日期的区间

6.6MySQL 8.0中的时区

6.7日期相关常用函数

6.7.1adddate()与date_sub()

6.7.2addtime()

6.7.3date()和time()

6.7.4timestamp()

6.7.5datediff()

6.7.6timediff()

6.7.7timestampdiff()

6.7.8day()等提取函数

6.7.9dayname()

6.7.10dayofweek()和dayofyear()

6.7.11extract()

6.7.12from_unixtime()

6.7.13str_to_date()与date_format()

6.7.14get_format()

6.7.15sec_to_time()

6.8MySQL 8.0处理日期相关的复杂查询

6.8.1张三今年多少岁

6.8.2判断今年是不是闰年

第7章SQL对JSON与XML的查询与处理

7.1MySQL 8.0的JSON

7.1.1JSON类型的使用场景

7.1.2初识MySQL 8.0中的JSON类型

7.2JSON相关常用函数

7.2.1json_object()

7.2.2json_array()

7.2.3json_valid()

7.2.4json_contains()

7.2.5json_contains_path()

7.2.6json_extract()

7.2.7json_unquote()

7.2.8json_search()

7.2.9“-”符号和“-”符号

7.2.10json_keys()

7.2.11json_value()

7.3MySQL 8.0的XML

7.4XML相关常用函数

7.4.1extractvalue()

7.4.2updatexml()

第8章SQL对结果集的查询与处理

8.1MySQL 8.0的结果集

8.1.1什么是处理结果集

8.1.2处理结果集的方式

8.2条件判断函数

8.2.1if()函数

8.2.2case关键字

8.3表的展示方式

8.3.1横表与纵表

8.3.2将纵表读取为横表进行展示

8.3.3将横表读取为纵表进行展示——union all写法

8.3.4将横表读取为纵表进行展示——max()函数写法

8.4MySQL 8.0处理结果集相关的复杂查询

8.4.1将一行分割为多行

8.4.2将多行合并为一行(合并为分隔符数据)

8.4.3将多列合并为一列

8.4.4将一列分割为多列

第9章MySQL的视图与临时表

9.1MySQL 8.0的视图

9.1.1概念

9.1.2语法

9.1.3使用示例

9.1.4管理

9.2MySQL 8.0的with as关键字

9.2.1概念

9.2.2语法

9.2.3使用示例

9.3MySQL 8.0的临时表

9.3.1概念

9.3.2语法

9.3.3使用示例

9.3.4临时复制表

9.4MySQL 8.0的内存表

9.4.1概念

9.4.2MySQL 8.0内存表和临时表的区别

9.4.3语法

9.4.4使用示例

9.4.5管理

第10章MySQL的存储过程与预编译语句

10.1MySQL 8.0存储过程概念

10.1.1无参存储过程的创建与调用

10.1.2查看MySQL当前含有的存储过程

10.1.3删除存储过程

10.1.4体验存储过程中含有部分报错

10.2MySQL 8.0存储过程的参数

10.2.1in参数

10.2.2out参数

10.2.3inout参数

10.3MySQL 8.0存储过程的控制流

10.3.1declare关键字

10.3.2set关键字

10.3.3if关键字

10.3.4case关键字

10.3.5while关键字

10.3.6repeat关键字

10.3.7leave关键字

10.3.8iterate条件语句

10.4游标

10.4.1SQL中游标的概念

10.4.2存储过程中游标的概念

10.5MySQL 8.0的预编译语句

10.5.1概念

10.5.2特性

10.5.3预编译语句与存储过程的区别

10.5.4创建无参预编译语句

10.5.5创建有参预编译语句

10.5.6管理及删除预编译语句

第11章MySQL的触发器和自定义函数

11.1MySQL 8.0触发器概念

11.1.1触发器特点

11.1.2触发器语法

11.1.3触发器示例

11.1.4触发器管理

11.1.5触发器的删除

11.2MySQL 8.0自定义函数概念

11.2.1自定义函数的优点

11.2.2自定义函数的语法

11.2.3自定义函数示例

11.2.4管理及删除自定义函数

11.3signal sqlstate抛出异常概念

11.3.1在触发器中使用signal语句

11.3.2在函数中使用signal语句

11.3.3在存储过程中使用signal语句

第12章MySQL的事务与锁

12.1事务概念

12.1.1事务的关键字

12.1.2事务的四大特性

12.1.3事务的保存点savepoint

12.1.4事务在存储过程、触发器、自定义函数中的使用

12.2锁的概念

12.2.1行级锁的概念

12.2.2表级锁的概念

12.2.3事务的隔离级别

12.2.4死锁的检测与解决

第13章MySQL备份与复杂查询面试题

13.1备份工具mysqldump

13.1.1使用mysqldump以SQL格式转储数据

13.1.2重新加载SQL格式备份

13.1.3使用mysqldump以分割文本格式转储数据

13.1.4重新加载分隔文本格式备份

13.1.5mysqldump小技巧

13.2复杂查询面试题——动漫评分

13.2.1涉及的表

13.2.2解题步骤

13.3复杂查询面试题——查询连续出现3次的数字

13.3.1涉及的表

13.3.2解题步骤——虚拟连接方式

13.3.3解题步骤——变量方式

13.4复杂查询面试题——订单退款率

13.4.1涉及的表

13.4.2解题步骤

附录ASQL语句分类

A.1MySQL 8.0的SQL语句分类

A.1.1数据定义类语句

A.1.2数据操作类语句

A.1.3事务和锁定类语句

A.1.4集群复制类语句

A.1.5预编译类语句

A.1.6存储过程类语句

A.1.7数据库管理类语句

A.1.8数据库工具类语句

A.2本书测试表的相关数据及结构

A.2.1学校系列表结构

A.2.2公司系列表结构




产品特色