Mysql数据库学习笔记(二)——常用函数和数据操作

目录

常用函数

1.数学函数

2.字符串函数

3.时间日期函数 

4.条件判断函数

5. 集合函数

查询数据

基础查询

条件查询

连接查询

外连接查询

子查询

合并查询

插入、更新、删除数据

插入数据

更新数据

删除数据


在Windows环境下MySQL默认不区分大小写,所以理论上只要名称正确怎么写都可以,但为了语句的可读性,建议遵循以下规范:

  1. 关键字和函数名称全部大写
  2. 数据库名称、表名称、字段名称全部小写
  3. SQL语句必须以分号结尾

常用函数

1.数学函数

函数

作用

SQRT (x)

平方根函数

ABS(x)

绝对值函数

CEIL(X)

返回不小于x的最小整数,返回值类型为bigint

CEILING(X)

返回不小于x的最小整数,返回值类型为bigint

FLOOR(X)

返回不大于x的最大整数,返回值类型为bigint

RAND(X)

根据X返回一个随机数

SIGN(X)

返回x的符号,x值为负、零、正时对应结果为-1、0、1

目前接触,常用的就几个。还有其他一些数学运算函数,可以在使用时在进行查询

2.字符串函数

                 

函数

说明

CHAR_LENGTH(str)

返回字符串长度,即字符个数。

LENGTH(str)

返回字符串的字节长度,跟编码方式有关;Utf8下,一个汉字3字节

CONCAT(S1,S2…)

合并多个字符串,返回类型为字符串 ;若有NULL值则返回NULL

CONCAT_WS(X,S1,S2…)

合并多个字符串,x为多个字符串间的分隔符;若分隔符为NULL,则结果为NULL;且函数会忽略分隔符后的NULL值

INSERT(s1,x,len,s2)

返回字符串s1从x位置开始被s2替换len长度。

LEFT(s,n)

返回字符串s开始的最左边的n个字符

RIGHT(s,n)

返回字符串s开始的最右边的n个字符

SUBSTRING(s,n,len)

返回一个长度为len,从n开始;n<0时,从起始位置开始

SUBSTRING_INDEX(s,x,len)

返回根据x截取符,从s字符串截取的位置字符。如:SUBSTRING_INDEX ('www.mysql.com.cn', '.', -2)截取第二个 '.' (倒数)之后的所有字符。(正数从头,负数从尾)

 

  

   
 

 

 

 

 

 

 

 

 

注:目前自己在项目中使用最多的是字符串长度和字符串截取函数

3.时间日期函数 

函数

说明

CURDATE()

获取当前日期,格式YYYY-MM-DD

CURTIME()

获取当前时间,格式HH:MM:SS

NOW()

获取当前日期和时间

MONTH(date)

获取date的月份

MONTHNAME(date)

获取日期中月份的英文名称

DAYNAME(d)

获取日期中工作日的英文名称(星期一到星期五)

YEAR(date)

获取日期中的年份。

DAYOFYEAR(date)

计算日期是一年中的第几天。

DATE_ADD(date,INTERVAL expr type)

date是一个DATETIME或DATE值,expr用来制定从开始日期添加或减去的时间间隔值,type便是类型;如:DATE_ADD(“2019-04-12”,INTERVAL 30 DAY)表示date日期后的30天

DATE_SUB(date,INTERVAL expr type)

同上

DATEDIFF(date1,date2)

返回两个日期间相差的天数

DATE_FORMAT(date,format)

返回date的自定义格式日期

常用的格式化形式

标识符

说明

%X

4位数字形式表示年份

%x

2位数字形式表示年份

%M

月份英文名称

%m

月份数字形式

%D

带英文后缀的日期(1st)

%d

数字形式日期

%H

以两位数24小时形式显示小时

%h

以两位数12小时形式形式小时

 

4.条件判断函数

函数

说明

IF(wxpr,v1,v2)

Expr值为TRUE时返回v1,否则返回v2

CASE expr WHEN v1 THEN r1[WHEN v2 THEN r2][ELSE m] END

如果expr变量值为Vn则执行Rn,否则执行else

如:CASE sex   WHEN 1 THEN ‘女’  WHEN 2 THEN ‘男’

 ELSE ‘未说明性别’  END  说明:函数返回值类型时任何返回值的相容集合类型;个人认为此函数较为重要,项目中用到次数较多,能自由改变输出状态

CONNECTION_ID()

返回当前连接的次数,每个连接ID唯一

注:mysql中函数较多,自己在项目中目前常用的就这些,如一些加密、获取和改变字符集和其他函数用者不多,需要使用时可进行搜索查找。

5. 集合函数

函数

说明

COUNT()

统计表中数据的总记录数,COUNT(*)和COUNT(字段值)区别:前者统计包含NULL值行,后者忽略空值的行

SUM()

返回指定列值的总和,忽略NULL值;可统计字段类型intcharvarchar类型的字段可以直接进行转类型相加,前提是数据中存储的是数字,且统计的值不能超出当前类型的最大值。

AVG()

返回指定列数据的平均值。

MAX()

返回指定列中的最大值;可找寻最大列值或日期,字符比较时a最小,z最大;

MIN()

返回指定列中的最小值。

 

查询数据

在项目中最常用的还是查询操作,获取数据来与程序进行交互;而且MySQL的优化大多都是针对查询进行的,所以如何优雅和高效的查询很重要。不要想到自己是初学者,觉得只要能正确书写SQL语句就行了,这种思想是有误的,要想成长就不能只做“花瓶”,最重要的就是团队成员会喷你(亲身经历,运气较好,喷完之后就教授了一番)。

SELECT * FROM 表名    最基础的查询语句

基础查询

  1. 除非需要表中所有字段,否则不要使用”*”。

条件查询

WHERE 关键字

1.SELECT  name,password FROM t_user WHERE 查询条件      可使用上一篇说明的运算符。

注:当你的查询条件字段是字符串类型时一定要加单引号或者双引号,整形时加与不加一样。

IN 关键字

  1. SELECT name,password FROM t_user WHERE id IN(条件值1,条件值2)

BETWEEN AND 关键字

  1. SELECT name,password FROM t_user WHERE id BETWEEN 1 AND

LIKE 关键字

  1. SELECT name,password FROM t_user WHERE LIKE ‘B%’;

注:%表示多字符匹配,_表示单字符匹配;使用此关键字时,注意LIKE不能识别空格。如:LIKE “%e”,若数据e后面多出一个空格,则无法查找到记录。可用TRIM()函数去除空格。MySQL中还有能使用正则表达式的功能,匹配度比like关键字灵活多变,但是在项目中目前还没用到过,自我感觉like就能满足基本需求,当like不能实现需求时可以朝这个方向靠。

IS NULL关键字

  1. SELECT user,password FROM t_user WHERE idcard IS NULL

注:IS NULL表示为null,IS NOT NULL表示为非空

ANDOR关键字

  1. SELECT name,password FROM t_user WHERE idcard IS NULL AND( photo IS NOT NULL OR enable=1)

注:AND优先级大于OR,对于多条件语句要打好括号,即使是优先级高的也要,方便你我他。

DISTINCT关键字

  1. SELECT  DISTINCT name,password FROM t_user

注:查询结果不重复,此关键字应用于所有列而不是它后面的第一个指定列,如name,password如果结果集中这连个字段都不一样才会被查出来。

ORDER BY关键字

  1. SELECT  DISTINCT name,password FROM t_user ORDER BY name

注:ORDER BY关键字作为排序使用默认为ASC升序,DESC为降序,参照行为第一行。当进行多列排序时,排序的第一列必须有相同值,才会对第二列进行排序。ASC,DESC只作用关键字后面的第一个字段。

GROUP BY关键字

  1. SELECT  GROUP_CONCAT(user_name) AS Names,COUNT(user_name) as nuber, user_password FROM sys_user GROUP BY user_info WITH ROLLUP HAVING COUNT(user_name)>3

注:关键字表示进行分组查询,HAVING作为分组后条件关键字使用,WHERE关键字用在分组之前;可以使用GRPUP_CONCAT函数查询返回分组中所有的值。WITH ROLLUP关键字计算查询出所有记录的综合,即同统计记录数量。在多字段分组查询时:按照分组字段的先后顺序依次进行分组。当使用ORDER BY对结果进行排序时,不能再使用WITH ROLLUP,两者互斥

LIMIT关键字

  1. SELECT name,password FROM t_user LIMIT 4,3

注:第一个参数表示从查询结果的哪一行开始(第一条为0,默认,且为可选参数),第二个参数表示返回的记录条数。ORDER BY和LIMIT两个关键字一起使用时,LIMIT必须位于ORDER BY之后。

连接查询

内连接查询 INNER JOIN

在内连接查询中,只有满足条件的结果才会出现在返回的结果集中。当多张表中出现重复字段值时,要使用”表名.列名”,不然报错

SELECT sys_user.id,user_name from sys_user INNER JOIN sys_user_role ON sys_user.id=sys_user_role.user_id

特殊的自联表查询(一张表连接查询)

SELECT t1.id,t1.user_name from sys_user as t1, sys_user as t2 WHERE t1.id=t2.id AND t2.id>5

外连接查询

LEFT JOIN:返回包括左表的所有记录和右表中连接字段相等的记录。

若左表的某行在右表中没有匹配的行,则右表中所有选择列均为空值

RIGHT JOIN: 返回包括右表的所有记录和左表中连接字段相等的记录。

若右表的某行在右表中没有匹配的行,则左表中所有选择列均为空值

子查询

子查询是在一个查询语句中嵌套另一个查询语句内部的查询;常用操作符ANY、SOME、ALL、IN、EXISTS。

ANYSOME:表示主查询的字段只要存在子查询中的任何一个比较条件就行。

SELECT name FROM t_user WHERE id>ANY(SOME) (SELECT id FROM t_role);

ALL:大于所有子查询的结果集

SELECT name FROM t_user WHERE id>ALL (SELECT id FROM t_role);

IN:主查询子查询的结果集中

EXISTS:是否存在,表示子查询是否有结果集返回,有为TRUE,反之为FALSE。只取决于是否返回行,与返回内容无关。返回FALSE时,外层语句也不会执行。相当于WHERE false。

注:能使用表连接实现就用表连接实现,子查询会在内存中建立一张虚拟的子表,比较耗费时间。

合并查询

UNION UNION ALL将多个SELECT语句结果集进行合并,合并时两个表的列数和数据类型必须相同,前者执行时会删除重复的记录,所有的返回行都是唯一的;后者不会删除。

注:UNION ALL语句执行时使用资源少,尽可能使用它,提高效率。

插入、更新、删除数据

插入数据

INSERT INTO 表名(列名1,列名2…)VALUES(值1,值2…)

注:

  1. 插入数据时虽然可以不指定列名进行插入,但是values后面的值则不仅要求完整且顺序和表定义列的顺序相同,若后面表的结果又改变,则必须改动SQL语句;所以无特殊情况都要写上列名。
  2. 尽可能的一条插入语句插入多条数据,效率更高。如:INSERT INTO 表名(列名1,列名2…)VALUES(值1,值2…),(值3,值4…)…

 

将另一张表的查询结果插入表中。

INSERT INTO 表名 (列名1,列名2…)SELECT (列名1,列名2) FROM 表名 WHERE条件

注:事实上,MySQL不关心SELECT返回的列名,它根据列的位置进行插入,SELECT的第一列对应待插入表的第一列,按此规定插入。、

更新数据

UPDATE 表名 SET 列名1=值1,列名2=值2… WHERE 条件

基础操作,若WHERE后面为FALSE,则更新所有数据。

删除数据

DELETE FROM 表名 WHERE 条件

基础操作,若WHERE后面为FALSE,则删除所有数据。

TRUNCATE 表名   删除表中所有记录。(其实是直接删除表并重新创建一个表,执行比DELETE快)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值