1. MySQL中的聚合函数

(1) MySQL5.7是否支持SQL99标准?

支持

2. MySQL中的数据分组

(1) MySQL中有哪些常用的聚合函数(组函数)?

1AVG(arg)函数

对分组数据做平均值运算。

arg:参数类型只能是数字类型。

2SUM(arg)函数

对分组数据求和。

arg:参数类型只能是数字类型。

3MIN(arg)函数

求分组中最小数据。

arg:参数类型可以是字符、数字、日期。

4MAX(arg)函数

求分组中最大数据。

arg:参数类型可以是字符、数字、日期。

5COUNT 函数

返回一个表中的行数。

COUNT 函数有三种格式:

• COUNT(*) • COUNT(expr) • COUNT(DISTINCT expr)

(2) 每个聚合函数的作用是什么?

组函数操作行集,给出每组的结果。组函数不象单行函数,组函数对行的集合进行操作,

对每组给出一个结果。这些集合可能是整个表或者是表分成的组

(3) 在MySQL中通过什么子句来创建数据分组?

Group by

(4) 如何约束数据分组?

Having

(5) 计算每个部门的平均薪水

select avg(e.salary) from employees e group by e.department_id

(6) 显示那些最高薪水大于 5000 的部门的部门号和最高薪水。

select e.department_id,max(e.salary) from employees e group by e.department_id HAVING

MAX(e.salary) > 5000

3. MySQL中的子查询

(1) MySQL的子查询可以放到SQL语句中的什么位置?

放在from后面当做表来使用,或放在where 后或having之后。

(2) 使用子查询的原则是什么?

• 子查询放在圆括号中。

• 将子查询放在比较条件的右边。

• 在单行子查询中用单行运算符,在多行子查询中用多行运算符

(3) 在MySQL中如何处理多行子查询?




mysql 根据分钟聚合数据 mysql聚合查询_mysql 根据分钟聚合数据


4. MySQL中的正则表达式

(1) MySQL中正则表达式的特点是什么?

• MySQL 中允许使用正则表达式定义字符串的搜索条件,性能要高于 like。

• MySQL 中的正则表达式可以对整数类型或者字符类型检索。

• 使用 REGEXP 关键字表示正则匹配。

• 默认忽略大小写,如果要区分大小写,使用 BINARY 关键字

(2) MySQL中使用正则表达式的语法结构是什么?

^在正则表达式中表示开始:SELECT 列名 FROM 表名 WHERE 列名 REGEXP '^x';

“$”符号:SELECT 列名 FROM 表名 WHERE 列名 REGEXP 'x$'

以下均与“$”表达式相同

(3) MySQL中支持哪些正则表达式的模板?其对应的含义是什么?


mysql 根据分钟聚合数据 mysql聚合查询_mysql 根据分钟聚合数据_02


(4) 查询雇员表中名字是以k开头的雇员名字与薪水。

select last_name,salary from employees where last_name REGEXP binary '^K'

(5) 查询雇员表中名字是以n结尾的雇员名字与薪水。

select last_name,salary from employees where last_name REGEXP binary 'n$'

5. MySQL中创建普通索引

(1) MySQL中的索引类型有哪些?

.普通索引

• 唯一索引

• 主键索引

• 组合索引

• 全文索引

(2) 在MySQL中创建普通索引的方式有些?

1直接创建索引

CREATE INDEX index_name ON table(column(length))

2修改表添加索引

ALTER TABLE table_name ADD INDEX index_name (column(length))

3创建表时指定索引列

CREATE TABLE `table` (

COLUMN TYPE , PRIMARY KEY (`id`), INDEX index_name (column(length))

)

(3) 如何查询一个表中的索引?

SHOW INDEX FROM table_name

(4) 如何删除一个索引?

普通索引:DROP INDEX index_name ON table

1. MySQL中创建唯一索引

(1) 什么是唯一索引?

唯一索引与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。它有以

下几种创建方式

(2) 在MySQL中如何创建唯一索引?

1创建唯一索引

CREATE UNIQUE INDEX indexName ON table(column(length))

2修改表添加唯一索引

ALTER TABLE table_name ADD UNIQUE indexName (column(length))

3创建表时指定唯一索引

CREATE TABLE `table` (

COLUMN TYPE , PRIMARY KEY (`id`), UNIQUE index_name (column(length))

)

2. MySQL中创建主键索引

(1) 什么是主键索引?

主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建

表的时候同时创建主键索引。

(2) 在MySQL中如何创建主键索引?

1修改表添加主键索引

ALTER TABLE 表名 ADD PRIMARY KEY(列名)

2创建表时指定主键索引

CREATE TABLE `table` (

COLUMN TYPE , PRIMARY KEY(column)

)

3. MySQL中创建组合索引

(1) 什么是组合索引?

组合索引是指使用多个字段创建的索引,只有在查询条件中使用了创建索引时的第一个

字段,索引才会被使用(最左前缀原则)

(2) 什么是最左前缀原则?

就是最左优先。

如:我们使用表中的 name,address,salary 创建组合索引,那么想要组合索引生效,

我们只能使用如下组合:

name/address/salary

name/address

name/

如果使用 addrees/salary 或者是 salary 则索引不会生效

(3) MySQL中如何创建组合索引?

修改添加组合索引

ALTER TABLE table_name ADD INDEX index_name (column(length),column(length))

创建表时创建组合索引

CREATE TABLE `table` (

COLUMN TYPE , INDEX index_name (column(length),column(length))

)

4. MySQL中创建全文索引

(1) 什么是全文索引?

全文索引(FULLTEXT INDEX)主要用来查找文本中的关键字,而不是直接与索引中的值

相比较。FULLTEXT 索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的 where

语句的参数匹配。FULLTEXT 索引配合 match against 操作使用,而不是一般的 where 语句

加 like。

(2) 如何创建全文索引?

修改添加全文索引

ALTER TABLE table_name ADD FULLTEXT index_content(content)

创建表时创建全文索引

CREATE TABLE `table` (

COLUMN TYPE , FULLTEXT index_name (column)

)

(3) 如何删除全文索引?

DROP INDEX index_name ON table

ALTER TABLE table_name DROP INDEX index_name

5. MySQL中使用全文索引

(1) 在MySQL中如何使用全文索引?

全 文 索 引 的 使 用 与 其 他 索 引 不 同 。 在 查 询 语 句 中 需 要 使 用 match(column)

against(‘content’) 来检索数据。

(2) 什么是全文解析器?

全文索引中基本单位是”词”。分词,全文索引是以词为基础的,MySQL 默认的分词是

所有非字母和数字的特殊符号都是分词符。在检索数据时我们给定的检索条件也是词。

MySQL 中默认的全文解析器不支持中文分词。如果数据含有中文需要更换全文解析器

NGRAM。

(3) 在创建全文索引时如何指定解析器?

在创建全文索引时可以指定 ngram 解析器

ALTER TABLE table_name ADD FULLTEXT index_content(content) WITH PARSER

NGRAM

6. MySQL中的用户管理

(1) MySQL中有几种用户类型?

MySQL 是一个多用户的数据库系统,按权限,用户可以分为两种:root 用户,超级管

理员,和由 root 用户创建的普通用户。

(2) 在MySQL中如何创建用户?

CREATE USER username IDENTIFIED BY 'password'

(3) 在MySQL中如何查看用户信息?

SELECT USER,NOST FROM USER(该表位于 mysql 库中)

(4) 在MySQL中如何为用户分配权限?

GRANT 权限 ON 数据库.表 TO 用户名@登录主机 IDENTIFIED BY "密码" GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password' 登陆主机:

% 匹配所有主机

localhost localhost 不会被解析成 IP 地址,直接通过 UNIXsocket 连接

127.0.0.1 会通过 TCP/IP 协议连接,并且只能在本机访问;

::1 ::1 就是兼容支持 ipv6 的,表示同 ipv4 的 127.0.0.1

(5) MySQL中有哪些权限?

ALTER: 修改表和索引。

CREATE: 创建数据库和表。

DELETE: 删除表中已有的记录。

DROP: 删除数据库和表。

INDEX: 创建或删除索引。

INSERT: 向表中插入新行。

SELECT: 检索表中的记录。

UPDATE: 修改现存表记录。

FILE: 读或写服务器上的文件。

PROCESS: 查看服务器中执行的线程信息或杀死线程。

RELOAD: 重载授权表或清空日志、主机缓存或表缓存。

SHUTDOWN: 关闭服务器。

ALL: 所有权限,ALL PRIVILEGES 同义词。

USAGE: 特殊的 "无权限" 权限

(6) 在MySQL中如何刷新权限?

FLUSH PRIVILEGES

(7) 在MySQL中如何删除用户?

DROP USER username@localhost

7. MySQL中的分页查询

(1) MySQL中的分页原则是什么?

• 在 MySQL 数据库中使用 LIMIT 子句进行分页查询。

• MySQL 分页中开始位置为 0。

• 分页子句在查询语句的最后侧。

(2) MySQL中分页语法是什么?

LIMIT 子句

SELECT 投影列 FROM 表名 WHERE 条件 ORDER BY LIMIT 开始位置,查询数量

LIMIT OFFSET 子句

SELECT 投影列 FROM 表名 WHERE 条件 ORDER BY LIMIT 查询数量 OFFSET

开始位置。

8. MySQL执行查询过程介绍

(1) MySQL执行计划的作用是什么?

在 MySQL 中可以通过 explain 关键字模拟优化器执行 SQL 语句,从而知道 MySQL 是

如何处理 SQL 语句的

(2) MySQL执行查询处理过程是什么?

• 客户端向 MySQL 服务器发送一条查询请求

• 服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果。否则进

入下一阶段

• 服务器进行 SQL 解析、预处理、再由优化器生成对应的执行计划

• MySQL 根据执行计划,调用存储引擎的 API 来执行查询

• 将结果返回给客户端,同时缓存查询结果

9. MySQL的执行计划

(1) 执行计划中包含哪些列?

ID、select_type、table

(2) 在执行计划中每个列的作用是什么?

EXPLAIN 列的解释

ID

查询执行顺序:

id 值相同时表示从上向下执行

id 值相同被视为一组

如果是子查询,id 值会递增,id 值越高,优先级越高 √

simple √:表示查询中不包含子查询或者 union

:当查询中包含任何复杂的子部分,最外层的查询被标记成 primary

derived √:在 from 的列表中包含的子查询被标记成 derived

subquery:在 select 或 where 列表中包含了子查询,则子查询被标记成 subquery

union:两个 select 查询时前一个标记为 PRIMARY,后一个标记为 UNION.union 出现在 from 从句子查询中,外层 select 标记为 PIRMARY,union 中第一个查询为 DERIVED,第二个子查询标记为 UNION

unionresult:从 union 表获取结果的 select 被标记成 union result 。

显示这一行的数据是关于哪张表的。

type

这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为 system、const、eq_reg、ref、range、index 和 ALL。

system:表中只有一行数据。属于 const 的特例。如果物理表中就一行数据为 ALL。

const :查询结果最多有一个匹配行。因为只有一行,所以可以被视为常量。const 查询速度非常快,因为只读一次。一般情况下把主键或唯一索引作为唯一条件的查询都是 const。

eq_ref:查询时查询外键表全部数据。且只能查询主键列或关联列。且外键表中外键列中数据不能有重复数据,且这些数据都必须在主键表中有对应数据(主键表中数据可以有没有用到的)

ref:相比 eq_ref,不对外键列有强制要求,里面的数据可以重复,只要出现重复的数据取值就是 ref。也可能是索引查询

:把这个列当作条件只检索其中一个范围。常见 where 从句中出现 between、<、in 等。主要应用在具有索引的列中。

:这个连接类型对前面的表中的每一个记录联合进行完全扫描(比 ALL 更好,因为索引一般小于表数据)

ALL:这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免。

10. MySQL的存储引擎介绍

(1) 如何查看MySQL的存储引擎?

SHOW ENGINES

(2) MySQL5.7中提供了哪些存储引擎?

MySQL5.5 版本开始 Innodb 已经成为 Mysql 的默认引擎(之前是 MyISAM),说明其优

势是有目共睹的,如果你不知道用什么,那就用 InnoDB,至少不会差

(3) 如何修改数据库级别的存储引擎?

修改 MySQL 的 my.ini 配置文件

C:ProgramDataMySQLMySQL Server 5.7

default-storage-engine=数据库引擎名称

重启 MySQL

(4) 如何修改标级别的存储引擎?

ALTER TBALE tableName engine=InnoDB

查询表的存储引擎

show create table table_name;