模糊查询:比较运算符
运算符 | 语法 | 描述 |
---|---|---|
IS NULL | a is null | 如果操作符为null,结果为真 |
IS NOT NULL | a is not null | 如果操作符部位null,结果为真 |
BETWEEN | a between b and c | 若a在b和c之间,则结果为真 |
LIKE | a like b | SQL匹配,如果a匹配b则结果为真 |
IN | a in(a1,a2,a3.,…) |
分页和排序
ORDER BY
常用语法ORDER BY xxx ASC,排序可以由前端去排序,xxx就是依据字段xxx
ASC 升序
DESC 降序
分页
常用语法 LIMIT 0,5
LIMIT 起始值,页面大小
-- 第一页 limit 0,5 (1-1)*5
-- 第二页 limit 5,5 (2-1)*5
-- 第三页 limit 10,5 (3-1)*5
-- 第N页 (N-1)*pageSize,pageSize
-- pageSize:页面大小
-- (n-1)*pageSize:起始值
-- 数据总数/页面大小 =总页数
子查询
where(这个值是计算出来的)
本质:在where语句中嵌套一个子查询语句
where (select *from xxx)
或者 WHERE xxx == xxx AND xxx=(select …)
MySQL函数
官方文档https://dev.mysql.com/doc/refman/8.0/en/sql-function-reference.html
常用函数
-- 数学运算
SELECT ABS(-8) -- 绝对值
SELECT CEILING(8.2) -- 向上取整
SELECT FLOOR(8.2) -- 向下取整
SELECT RAND() -- 返回一个0~1的随机数
SELECT SIGN(3) -- 判断一个数的符号,返回-1,0,1的一个
SELECT CHAR_LENGTH('123456') -- 字符串长度
SELECT CONCAT('123','456') -- 拼接字符串长度
SELECT INSERT('123456',1,4,'xxx') -- 替换字符串,从x位置开始的y个字符,替换为后面的字符
SELECT LOWER('A')
SELECT UPPER('a')
SELECT REPLACE('123','23','456')-- 替换字符串
SELECT SUBSTR('123456',3,2)-- 截取字符串,从xx开始yy个。
SELECT REVERSE('123456') -- 字符串反转
-- 时间和日期函数
SELECT CURRENT_DATE() -- 获取当前日期
SELECT CURDATE()
SELECT CURRENT_TIME -- 获取当前时间
SELECT NOW() -- 当前日期加时间
SELECT LOCALTIME()
SELECT SYSDATE()
SELECT YEAR(NOW()) AS 年
SELECT USER() -- 当前用户
聚合函数
SELECT COUNT(student) FROM student; -- Count(字段),会忽略所有null的值
SELECT COUNT(*) FROM student; -- 不会忽略null值
SELECT COUNT(1) FROM result; -- 不会忽略null值,
SELECT SUM(sdutentresult) AS 总分 FROM result;
SELECT AVG(sdutentresult) AS 总分 FROM result;
SELECT MAX(sdutentresult) AS 总分 FROM result;
SELECT MIN(sdutentresult) AS 总分 FROM result;
count(*)和count(1)的区别:
count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略值为NULL
count(1)包括了忽略所有列,用1代表代码运行,在统计结果的时候,会忽略值为空(这里的空不是空字符串或者0,而是表示null),即某个字段为null的时候不统计
执行效率上:
列名为主键,count(列名)比count(1)快
列名不为主键,count(1)比count(列名)快
如果表多个列且没有主键,则count(1)的执行效率优于count(*)
如果有主键,则select count(主键)的执行效率是最优的
如果只有一个字段,则select count(*)最优
count(*)会走遍所有的列再统计行数,count(1)按行统计,就只走一次。
HAVING
是过滤的语句比如所,having xxx=0;即使要求xxx=0的显示出来。
数据库级别的md5
什么是md5,主要增强算法复杂度和不可逆性
md5不可逆,具体的值的md5是一样的,
MD5破解网站的原理,背后有一个字典,记录常用的md5密码
UPDATE xxxx SET pwd = MD5(pwd);
应该插入的时候加密
也同时要把用户输入的密码进行加密后校验