MySql必知必会1-10章总结

mysql命令行客户端登录

#默认端口3306 主机本地localhost
mysql -u root -p
#写全的话
mysql -u root -p -h localhost -P 3307

解释一下:-u 用户名为root -p 密码待输入 -h 主机名localhost -P 注意大写P ,意思是端口号3307

数据库操作

#展示所有数据库
show databases;
#使用数据库
use kls;
#展示数据库中所有的表
show tables;
#展示person表的字段
show columns from person;
#show columns from 可以用describe代替
describe person;
image.png

mysql不区分大小写,但是为了易于阅读,开发人员经常把关键字大写,列和表名小写。(反正我是遵守不了,看大写的英文难受)

检索不同的行

如果查询学生表的年龄,每个年龄只出现一次

select distinct age from student;

限制返回结果数

limit 5 表示从第1行开始,返回5条记录

select name from student limit 5;

limit 5, 5表示从第5行开始,返回5条数据

select name from student limit 5,5;

另一种写法:limit 2 offset 3 代表从行3(也就是第四行)开始取2行

select name from student limit 2 offset 3;

排序order by

注意:order by 不仅可以按照检索的列排序,用非检索的列排序也是合法的。
注意:在多个列进行降序排序,需要在每个列指定DESC关键字,因为不指定的都默认ASC升序排列。
注意:order by 和 limit连用的时候,limit放在order by的后面。

between操作符

用来检索在两个数值之间的记录,例如查询在18-20岁之间的学生

select * from student t where t.age between 18 and 20;

通配符 % 和 _

mysql使用LIKE操作符跟%通配符进行模糊搜索。

#查询姓李的学生
select name from student where name like '李%';

①注意:根据mysql的配置方式,搜索是要区分大小写的,例如模糊搜索中'jet%'是不会匹配JetPack的。
②注意'%jet%'表示匹配任何位置包括jet文本的值,而不论他之前或之后出现什么值。
③%表示搜索模式指定位置有0到多个任意字符。
④注意通配符_下划线,只能匹配1个字符,不能多也不能少。
⑤%不会匹配NULL行,即使是like '%'也不会匹配NULL行。
⑥通配符一般处理时间比其他搜索要长,其他操作能达到尽量不要使用,使用通配符时候除非有绝对必要,否则不要把通配符用在开始处,因为放在开始处,搜索会最慢。

使用mysql正则表达式

mysql使用 regexp 表示后面跟的内容为正则表达式

基本字符匹配

#正则匹配姓名为小刚的行
select * from student where name regexp '小刚';

. 点号是正则表达式中的一个重要字符,表示匹配任意一个字符。

#正则匹配0前面有任意一个字符的行,例如10、20等
select * from student where age regexp '.0';

正则表达式不区分大小写,为了区分大小写可以使用binary关键字

#下面例子则匹配jet 1000 或者 jet a000等
... where name regexp binary 'jet .000';

进行OR匹配

正则表达式利用|来表示or操作

#匹配名字中包括小明或小李的
... where name regexp '小明|小李';

匹配几个字符之一

使用[]包裹的字符,表示匹配其中之一

#正则匹配包括1或2或3的学号
... where id regexp '[123]';

解释:[123][1|2|3]的缩写,其实[]就是正则中另一种形式的or语句,为什么加[]是因为如下:

image.png

字符集合也可以被否定,即匹配除指定字符之外的任何东西,即[^123]匹配除123这三个字符之外的任何东西。

正则匹配范围

#例如
[0-9]
[a-z]
[1-3]
[a-e]
#将会匹配到1 Ton anvil 或 .5 ton anvil等 
... where name regexp '[1-5] Ton';

正则匹配特殊字符\\转义

如果需要转义\本身,需要使用\\\
为什么正则表达式用两个\\呢?因为在mysql当中,mysql自己解释一个,正则表达式库解释一个。

正则匹配字符类

image.png

正则匹配多个实例

image.png

image.png

正则定位符

image.png

例如我们想搜索一个以.点号或者数字开头的结果,怎么办?
[0-9\.]是不行的,因为他会在文本的任意位置开始查找,解决办法就是使用定位符^从文本开始位置查找。

... where name regexp '^[0-9\\.]';

创建计算字段

简单来说,数据库中存储的结果不是我们最终想要的,例如省市区分别存储在3列中,我们需要连在一列显示。

拼接字段Concat()函数

#将first_name、 ( 、last_name、和)这四个字符串拼接起来,例如: 李 (小明)
select Concat(first_name, ' (' , last_name, ')') as name from student;

Trim()LTrim()RTrim()函数

分别为去掉左右两边的空格、去掉左边空格、去掉右边空格

如何测试计算?

image.png
#例如查询当前时间
select  now();
image.png

你可能感兴趣的:(MySql必知必会1-10章总结)