SQL开发
DML
新增表中的数据:insert into
删除表中的数据:delete
修改表中的数据:update
查询表中的数据:select
新增表中的数据
确认要把数据插入到那个表中。
确认表中的数据结构,那些列不能为NULL,那些列可以为NULL,对于不能为NULL的列是否有默认值。
确认对应插入列的插入值的清单。
1 | // imc_class表中的class_name插入数据 |
1 | // imc_class表中的class_name字段设置为索引 |
查询表中的数据
1 | // 查询表中所有的数据 |
常用的聚合函数
| 聚合函数 | 说明 |
|---|---|
| COUNT(*)/COUNT(col) | 计算符合条件的数据行数 |
| SUM(col_name) | 计算表中符合条件的数值列的合计值 |
| AVG(col_name) | 计算表中符合条件的数值列的平均值 |
| MAX(col_name) | 计算表中符合条件的数值列的最大值 |
| MIN(col_name) | 计算表中符合条件的数值列的最小值 |
视图
视图是一个逻辑的存储的结果,也是一个虚拟的表,视图不存储任何数据。
1
2 // 创建视图的语法
CREATE VIEW vm_course
1 | CREATE VIEW vm_course AS SELECT |
表删除语句
确定要删除的数据存储在那张表中。 FROM子句
确定删除数据的过滤条件。 WHERE子句
确认是否只删除有限条数据。 ORDER BY …LIMIT子句
1 | // 根据条件删除数据 |
更新表的数据
确定要更新的数据存储在那张表中。
确定要列新的列及值。
确定更新数据的条件。
1 | // 更新user表中的状态为1 |
MySQL系统函数
- 常用的时间函数
| 函数名 | 说明 |
|---|---|
| CURDATE()/CURTIME() | 返回当前日期/返回当前的时间 |
| NOW() | 返回当前的日期和时间 |
| DATE_FORMAT(date, fmt) | 返回当前的日期和时间 |
| SEC_TO_TIME() | 把秒数转换成(小时:分:秒) |
| TIME_TO_SEC() | 把(小时:分:秒)转换成秒数 |
| TIME_TO_SEC() | 把(小时:分:秒)转换成秒数 |
| DATEDIFF(date1,date2) | 返回date1和date2两个日期的相差的天数 |
| DATE_ADD(date,INTERVAL expr unit) | 给定的日期增加或减少指定的时间单元(unit:DAY天/HOUR小时/MINUTES/SECOND秒) |
| EXTRACT(unit FPOM date) | 返回日期date的指定部分 |
| UNIX_TIMESTAMP() | 返回unix时间戳 |
| FROM_UNIXTIME() | 把Unix时间戳转换日期时间 |
1 | // 表中上线时间距当前时间的天数 |
- 常用的字符串函数
| 函数名 | 说明 |
|---|---|
| CONCAT(str1,str2) | 把字符串str1,str2连接成一个字符串 |
| CONCAT_WS(‘’,str1,str2) | 把字符串str1,str2用分割连接成一个字符串 |
| CHAR_LENGTH(str) | 返回字符串str的字符个数 |
| LENGTH(str) | 返回字符串str的字节个数 |
| FORMAT(X,D[,locale]) | 将数字N格式化为格式,如’#,###,####.##’,并舍入到D位小数 |
- 常用的字符串截取函数
| 函数名 | 说明 |
|---|---|
| LEFT(str,len)/RIGHT(str,len) | 从字符串的左/右边起返回len长度的子字符串 |
| SUBSTRING(str,pos,len) | 从字符串str的pos位置起返回长度为len的子串 |
| SUBSTRING_INDEX(str,delim,count) | 返回字符串str按delim分割的前count个字符串 |
| LOCATE(substr,str) | 在字符串str中返回子串substr第一次出现的位置 |
| TRIM([remstr FROM] str) | 从字符串str两端删除不需要的字符remstr |
- 其它常用函数
| 函数名 | 说明 |
|---|---|
| ROUND(X,D) | 对数值X进行四舍五入保留D位小数 |
| RAND() | 返回一个0到1之间的随机数 |
| CASE WHEN | 用于实现其它语言中的case..when功能,提供数据流控制 |
| MD5(str) | 返回str的MD5值 |
1 | SELECT user_nick,CASE |
SQL高级特性
公用表表达式CTE
MySQL8.0之后的版本才可以食用
CTE生成一个命名临时表,并且只在查询期间有效
CTE临时表在一个查询中可以多次引用及自引用
1 | // 简单的公用表达式 |
窗口函数
一组记录所执行的函数,符合条件的每一条记录会执行函数。
| 函数名 | 说明 |
|---|---|
| 聚合函数 | 聚合函数都可以做为窗口函数使用 |
| ROW_NUMBER() | 返回窗口分区数据的行号 |
| RANK() | 类似于row_number,只是对于相同数据会产生重复的行号,之后的数据行号会产生间隔 |
| DENSE_RANK() | 类似于rank区别在于当组内某行数据重复时,虽然行号会重复,但后续的行号不会产生间隔 |