不知不觉又来到了周中,周一和周二的知识点都记牢了么?课堂上写的语法下课后都过了一遍了吗?
那么来看看周三的知识点整理吧~🙌
今天主要围绕 子查询 和 常用函数 进行学习:
DQL数据查询语言 (接上昨天未讲完的知识点
1. 不等值连接: t1.key1 比较 t2.key2 (vs. 等值连接:t1.key1=t2.key2)
- select * from table 1eft join table 2 on table1.字段 between table2.字段1 and table2.字段2; <-- 仅作为举例,join方式及比较方式按实际要求编写喔
2. 子查询 = 嵌套查询 (最多嵌套32句) ****重点****
- select 字段 from table1 where 字段1 比较 (子查询结果); -- 标量子查询,子查询的结果是单行单列
- select 字段 from table1 where (字段1,字段2)=(子查询结果); -- 行子查询,子查询的结果当行多列
- select 字段 from table1 where 字段 [not] in (子查询结果); -- [not] in 列子查询
- select 字段 from table1 where 字段 比较符 any/all (子查询结果); --- any/all 列子查询,可以转换为min/max的标量查询
- select 字段 from table 1 left join (子查询结果)as 表别名table2 on table1.字段=table2.字段 [where] 条件; --- from表子查询,必须要设置子查询的表别名,且引用聚合运算的字段也要设置别名,原因是SQL语言执行顺序
- select 字段,(子查询)as 新字段别名 from table1 [group by] 字段; --- select子查询
*where语句中需要使用聚合函数时,必须要用到子查询
子查询分类: (按返回结果分类,非严格分类)

子查询出现的位置:

子查询操作符

常用函数
1. 字符串函数
select concat('CDA','数据', '分析'); -- 合并字符串,最多合并255个字符串,只要有一个Null值即返回Null值
select instr('CDA', 'A'); -- 查找字符串位置,找不到返回0
select left('CDA数据分析', 3); -- 从左边提取字符串
select right('CDA数据分析', 4); -- 从右边提取字符串
select mid('CDA数据分析', 4, 2); -- 中间提取字符,如第三个参数不写即截取所有的字符
select substring('CDA数据分析',1,3); -- 也是提取字符串,功效同mid
select ltrim(' CDA数据分析'); -- 删除字符串左边的空格
select rtrim('CDA数据分析 '); -- 删除字符串右边的空格
select trim(' CDA数据分析 '); -- 删除字符串的左右的空格,中间有不删,常用。
select replace('CDA数据分析', 'CDA', 'cda'); -- 替换
select upper('cda'); -- 改大写,和replace都只能替换英文字符串
select lower('CDA'); -- 改小写
2. 数学函数
select abs(-32); -- 返回绝对值
select floor(1.23); -- 向下取整
select floor(-1.23); -- 答案是-2,向下取整
select ceiling(1.23); -- 向上取整
select ceiling(-1.23); -- 答案是-1,向上取整
select round(1.58,1); -- 如果第二个参数省略不写,就是四舍五入为整数
3. 时间型函数
select date('20200101'); -- 返回日期表达式的日期部分或讲文本转日期格式
select date('2020/6/17 15:37:00');
select week('2020-01-01'); -- 返回指定日期是一年中的第几周,mode有0即0-52或1即1-53,默认模式是0
select year('20-01-01'); -- 返回四位数字的年份
select month('2020-01-01'); -- 返回月份数
select day('2020-01-01'); -- 返回指定日期的日
select hour('2020-01-01 12:00:00'); -- 返回指定日期的小时数
select DATE_ADD('2020-01-01',interval 1 day); -- 加1天/月/年
select DATE_Sub('2020-01-01',interval 1 day); -- 减1天/月/年
select DATE_FORMAT('2020-01-01','%Y-%M-%D'); -- 把日期格式化
select curdate(); -- 获取当日日期
select curdate() + 0;
select curtime(); -- 获取当日时间
select curtime() + 0;
select now(); -- 获取当日日期及时间
select now() + 0;
select datediff('2020-06-17','2020-06-10'); -- 返回参数1结束日及参数2起始日之间的天数
select unix_timestamp(); -- 把时间转换为时间戳
select from_unixtime(); -- 把时间戳转为标准年月日的时间
4. 分组合并函数
GROUP_CONCAT([distinct] str [order by str asc/desc] [separator]) #把分组字符串合并为长字符串
5. 逻辑函数
IFNULL(字段,替代数值) -- 判断Null值并替换
IF(expr1,expr2,expr3) -- expr1满足,那么返回expr2,不满足返回expr3,和excel的if函数使用逻辑一致
CASE WHEN expr1 THEN expr2 [WHEN expr3 THEN expr4...ELSE expr] END -- 和if使用方式差不多但不用嵌套
6. 开窗函数 (明天再开窗🙃
SQL语言执行顺序(update)
- FROM -> ON -> JOIN -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> UNION -> ORDER BY -> LIMIT
以上,冲鸭~~😏








暂无数据