0. 若你控制台输入 mysql -v
若你已经安装了mysql,还是显示:'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件。
说明有可能是你没有配置mysql的环境,应该去环境变量里面配置。
1. Mysql语法分类
-
DDL:对表结构的:create(创建),alter(修改),drop(删除),TRUNCATE(截断),RENAME(重命名)....;
-
DML:delete(删除),update(更新),insert(新增)...;
-
DQL:select(查询);
2. 数据表操作
2.1 修改表名
alter table 旧表名 rename to 新表名;
2.2 增加一列
alter table 表名 add 新列名 字段类型 [字段选项];
2.3 删除一列
alter table 表名 drop 字段名;
2.4 修改列类型
alter table 表名 modify 字段名 新的字段类型 [新的字段选项];
2.5 修改列名称
alter table 表名 change 原字段名 新字段名 新的字段类型 [新的字段选项];
2.6 查看创建表的语句
show create table 表名
3. 数据操作
SQL完整语法:select * from user where group by having order by limit
3.1 ifnull
注意:只要有null参与的运算,结果一定为null
select name,(sal+comm)*12 as yearsql from emp;
# 解决办法:ifnull()空处理函数
select name,(sal+ifnull(comm,0))*12 as yearsql from emp;
3.2 count(id)与count(*)与count(1)
- count(*):对行的数据进行计算,包含NULL
- count(1):和上述一样
- count(column):对特定列进行计算,不包含NULL
3.3 where后面不能用聚合函数
4. 关于group by,having
分组函数:按照某个字段或某些字段进行分组。
having:对分组之后的数据进行再次过滤。
如:找出每个工作岗位的最高薪资
1. select XXXXXX from emp group by job; # 先分组
2. select max(sql) from emp group by job; # 查询出来的只要最高工资,不知道最高工资属于谁
3. select ename,max(sal),job from emp group by job; # 虽然查出来了人,但是数据有问题,ename是从该job分组里面取的一个人的enma,不一定恰好就是最高工资那个人的名字
4. 结论:当一条sql语句有group by的时候。select 后面只能跟分组字段,或聚合函数(max,avg..) 否则查询出来的结果毫无意义0
如:找出每个部门的最高薪资,要求只显示薪资大于3000的数据【能用where代替having的情况】
# 效率低
select max(sal),detptno from emp group by deptno having max(sal) > 3000;
# 效率高
select max(sql),deptno from emp where sal > 3000 group by deptno;
如:找出每个部门的平均薪资,要求只显示薪资大于3000的数据【不能用where代替having的情况】
select deptno,avg(sql) from emp group by deptno having avg(sal) > 3000
5. 关于between and
它是左闭右闭的。
select * from emp where sal between 100 and 900;
等同于
select * from emp where sal >=100 and sal <= 900;
使用between查询时间的时候需要注意:
https://www.cnblogs.com/lj312/p/7238211.html
另外一种时间范围查询的方法如下:分别设定开始时间和结束时间:
<if test="endTime!=null and !"".equals(endTime.trim())">
AND m.endTime < #{endTime}
</if>
<if test="startTime!=null and !"".equals(startTime.trim())">
AND m.startTime > #{startTime}
</if>