SQL查询(2)

SQL查询(2)
一、排序查询语法select 列或* from 表名 where 条件 order by 列,列... 排序方式asc升序 或 desc 降序例select name,sage,page from saibo where 内容 order by sage asc;二、去重查询例select distinct sage from student;可以理解成去掉重复的部分三、空值查询select * from student where semail is null结果四、系统函数函数很多本章我们挑几个重点的分享4-1字符串函数CHAR_LENGTH(s) 返回字符串 s 的字符数 Length(s) 返回字符串 s 的字节数 CONCAT(s1,s2...sn) 字符串 s1,s2 等多个字符串合并为一个字符串 LEFT(s,n) 返回字符串 s 的左边的 n 个字符 RIGHT(s,n) 返回字符串 s 的右边的 n 个字符 trim(s)/ltrim(s)/rtrim(s) 去除字符串前后的空格 LOWER(s) 将字符串 s 的所有字母变成小写字母 UPPER(s) 将字符串 s 的所有字母变成大写字母 REPLACE(s,s1,s2) 将字符串 s2 替代字符串 s 中的字符串 s1 REVERSE(s) 将字符串s的顺序反过来 SUBSTR(s, start, length) / SUBSTRING(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串例select char_length(qwer加);-- 5 select length(qwerr加); -- 一个字母算一个字节中文算三个 select concat(wo,ai,ni); select left(qweerrtyu,3); select right(qweerrtyu,3); select ltrim( qweer ); select rtrim( qweer ); select lower(qweQWE); select upper(qweQWE); select replace(qwer,qwe,asd); select reverse(qwer); select substring(qwertyuui,2,3);4-2数字函数ABS(x) 返回 x 的绝对值 CEIL(x)/CEILING(x) 返回大于或等于 x 的最小整数 --向上取整 FLOOR(x) 返回小于或等于 x 的最大整数 --向下取整 MOD(x,y) 返回 x 除以 y 以后的余数 PI() 返回圆周率(3.141593 POW(x,y)/power(x,y) 返回 x 的 y 次方 RAND() 返回 0 到 1 的随机数 --以系统时间作为种子值,代入内部公式计算所得 ROUND(x [,y]) 返回离 x 最近的整数可选参数 y 表示要四舍五入的小数位数如果省略则返回整数。 TRUNCATE(x,y) 返回数值 x 保留到小数点后 y 位的值与 ROUND 最大的区别是不会进行四舍五入 SQRT(x) 返回x的平方根例select ROUND(2.134); select TRUNCATE(12.9999,3); 其他举例比较简单所以省略4-3日期函数now()/sysdate()/CURRENT_TIMESTAMP() 返回当前日期和时间 current_date()/CURDATE() 返回当前日期 CURRENT_TIME/curtime() 返回当前时间 ADDDATE(d,n)/date_add(d,n) 计算起始日期 d 加上 n 天的日期 DATEDIFF(d1,d2) 计算日期 d1-d2 之间相隔的天数 - different不同 EXTRACT(type FROM d) 从日期 d 中获取指定的值type 指定返回的值。 LAST_DAY(d) 返回给给定日期的那一月份的最后一天4-4其他函数CONVERT(s USING cs) 函数将字符串 s 的字符集变成 cs CURRENT_USER()/system_user()/user(),session_user() 返回当前用户 DATABASE() 返回当前数据库名 IF(expr,v1,v2) 条件函数- 如果表达式 expr 成立返回结果 v1否则返回结果 v2 IFNULL(v1,v2) 空值处理函数 -如果 v1 的值不为 NULL则返回 v1否则返回 v2。 NULLIF(expr1, expr2)比较两个字符串如果字符串 expr1 与 expr2 相等 返回 NULL否则返回 expr1 VERSION() 返回数据库的版本号以下是所有函数可供查阅菜鸟教程 MySQL 函数 | 菜鸟教程五、聚合函数5-1定义聚合函数把多行数据“压缩”成一行统计结果。5-2分类count(*)统计(记录)行数max 字符获取字段中的最大值min 字符获取字段中的最小值sum 字符针对字段中的值进行求和avg 字符针对字段中的值进行平均数例子select sum(grade) as 总成绩 ,count(*) 记录数,avg(grade) as 平均成绩,max(grade) 最高分,min(grade) as 最低分 from score六、分组查询group by 语句会将分组的列中相同的值,划分到一个组中。语法: select 列 或 * from 表名 where 条件 group by 列 order by 排序列例select sno,count(*) 总成绩, sage as 年龄 from score group by sno注意sno相同的分为一组group by 后面不要放聚合函数七、having子句语法: select 列 或 * from 表名 where 条件 运用于原数据的查询 group by 列 按照后面的列进行分组可以多个列 having 条件 分组后的条件筛选使用聚合函数八、限制行查询select * 或 列 from 表名 ..... limit 34起始行号, 页大小应用场景场景一点外卖外卖平台商家接单 sql -- 应用场景外卖商家后台查看今日新订单列表 -- 分页公式起始行号 页大小 * (当前页码 - 1) -- 参数代入每页展示5单加载第2页 - 5 * (2 - 1) 5 select * from takeout_merchant_order limit 5, 5; 场景二刷短视频社交娱乐推荐 sql -- 应用场景短视频APP首页推荐流向下滑动加载更多 -- 分页公式起始行号 页大小 * (当前页码 - 1) -- 参数代入每次推送10个视频看第3波 - 10 * (3 - 1) 20 select * from short_video_feed limit 20, 10; 场景三超市买菜生鲜电商搜索 sql -- 应用场景线上买菜APP搜索西红柿按销量排序翻页 -- 分页公式起始行号 页大小 * (当前页码 - 1) -- 参数代入每页展示20个商品浏览第2页 - 20 * (2 - 1) 20 select * from fresh_product_spu limit 20, 20; 场景四打车出行网约车行程记录 sql -- 应用场景打车软件的用户个人中心查看历史行程 -- 分页公式起始行号 页大小 * (当前页码 - 1) -- 参数代入每页记录15条行程查看第4页 - 15 * (4 - 1) 45 select * from user_trip_record limit 45, 15;这个公式只运用到Mysql其他数据库不一定适用大家有兴趣的话可自己尝试。九、子查询可以理解为查询的嵌套查询里边又加一个查询。-- 场景一子查询放在 SELECT 后面-- 核心限制括号里查出来的结果【只能是一个格子】单行单列多了直接报错SELECT (SELECT AVG(salary) FROM emp) AS avg_sal FROM dual;-- 场景二子查询放在 FROM 后面当临时表用-- 核心限制这里随便返回多少行多少列都行多行多列但【必须给它起个外号别名】不然系统不认识这张临时表。SELECT * FROM (SELECT name, sal FROM emp) ;-- 场景三子查询放在 WHERE 后面当筛选条件-- 3.1 用 等比较运算符时后面跟的查询结果【只能有一个值】单行单列。SELECT * FROM emp WHERE sal (SELECT AVG(sal) FROM emp);-- 3.2 用 IN / NOT IN 时后面可以跟一串值多行单列也可以是单个值单行单列。-- 踩坑预警用 NOT IN 时子查询结果里千万不能包含 NULL不然啥也查不出来SELECT * FROM emp WHERE deptno IN (SELECT deptno FROM dept);-- 场景四子查询放在 HAVING 后面配合 group by 分组使用-- 4.1 用 等比较运算符 聚合函数时必须是【单行单列】。SELECT deptno, MAX(sal) FROM emp group by deptnoHAVING MAX(sal) (SELECT AVG(sal) FROM emp);-- 4.2 用 IN / NOT IN 聚合函数时可以是【多行单列】也可u以是单行单列。SELECT deptno, AVG(sal) FROM emp group by deptnoHAVING AVG(sal) IN (SELECT sal FROM vip_emp);Mysql数据库的内容到这里就告一段落如果有什么遗漏的内容以后会补充。感谢大家的阅读