Like
- like:用于字符串匹配,利用通配符可以在不完全确定比较值的情形下创建一个比较特定数据的搜索模式,并置于关键字 LIKE 之后。可以在搜索模式的任意位置使用通配符,并且可以使用多个通配符
- 语法格式:表达式1 [not] like 表达式2
- MySQL支持的通配符有以下两种:
- %:在过滤条件中,百分号可以匹配任何任意字符,且该字符可以出现任意次(0次、一次或者多次),但是不能匹配空值
- _:在过滤条件中,下划线只能匹配单个的任意字符(即一个下划线匹配一个任意字符)
- 实例:
select * from Teacher where name like '%a%'; #查询名字里面含有字母a的学生信息
select * from Teacher where name like 'T%'; #查询名字以T开头的学生信息
select * from Teacher where name like 'T__'; #查询名字以T开头且T后面只有两个字母的学生信息
Distinct
- 作用:在MySQL中使用 select 语句查询数据的时候返回的是所有匹配的行,使用distinct关键字可指示MySQL消除重复的记录值
- 语法格式:distinct 字段名
- 实例:select distinct age from Teacher;
As
表别名只在执行查询时使用,并不在返回结果中显示,而列定义别名之后,将返回给客户端显示,显示的结果字段为字段列的别名
在为表取别名时,要保证不能与数据库中的其他表的名称冲突
为表设置别名
- 作用:在查询时,当表名很长或者执行一些特殊查询的时候,为了方便操作或者需要多次使用相同的表时,可以为表指定别名来代替表原来的名称
- 为表取别名的语法:表名 [AS] 别名
- 语法解释如下:
- 表名:数据库中存储数据的表的名称
- 别名:指定的表的新名称
- AS:关键字为可选参数,可有省略
- 实例:select tea.name from Teacher as tea;
为字段设置别名
- 作用:在使用 SELECT 语句显示查询结果时,MySQL 会显示每个 SELECT 后面指定输出的列,在有些情况下,显示的列名称会很长或者名称不够直观,MySQL 可以指定列的别名
- 为列取别名语法:列名 [AS] 列别名
- 语法解释如下:
- 列名:为表中字段的名称
- 列别名:为表中字段新的名称
- AS:关键字为可选参数,可以省略
- 实例:select name as TeacherName from Teacher;
explain
- explain:是查看优化器如何执行查询的主要方法 (用来查看优化器生成的的执行计划)
- 语法:
- explain select ……
- explain extended select …… (将执行计划"反编译"成select语句,运行show warnings可得到被mysql优化器优化后的查询语句)
- explain partitions select …… (用于分区表的explain生成qep的信息)
- 实例:explain select * from Teacher1 where id = 1;
- 作用:
- 可以帮助我们深入了解mysql的基于开销的优化器
- 可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行sql语句时哪种策略预计会被优化器采用
- 注意点:
- 优化器生成的执行计划(qep)并不确定,它可能会根据很多因素发生改变
- mysql不会将一个qep和某个给定查询绑定,qep将由sql语句每次执行时的实际情况确定,即便使用存储过程也是如此。尽管在存储过程中sql语句都是预先解析过的,但qep仍然会在每次调用存储过程的时候才被确定
- explain不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况
- explain不考虑各种cache
- explain不能显示mysql在执行查询时所作的优化工作
- 部分统计信息是估算的,并非精确值
- expalin只能解释select操作,其他操作要重写为select后查看执行计划
- explain结果字段的含义介绍
id | select识别符 |
select_type | select类型,可以为以下任何一种: simple:简单select(不使用union或子查询) primary:最外面的select |
table | 输出的行所引用的表 |
type | 联接类型。下面给出各种联接类型,按照从最佳类型到最坏类型进行排序: system:表仅有一行(=系统表)。这是const联接类型的一个特例。 |
possible_keys | 指出mysql能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用 |
key | 显示mysql在查询中实际使用的索引,若没有使用索引,显示为null |
key_len | 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的) |
ref | 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 |
rows | 显示mysql认为它执行查询时必须检查的行数。多行之间的数据相乘可以估算要处理的行数 |
filtered | 显示了通过条件过滤出的行数的百分比估计值 |
extra | 该列包含mysql解决查询的详细信息,取的值可以为以下任一种: distinct:mysql发现第1个匹配行后,停止为当前的行组合搜索更多的行。 |