Mysql语法入门与进阶

时间:2021-09-13
本文章向大家介绍Mysql语法入门与进阶,主要包括Mysql语法入门与进阶使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1. Mysql语法分类

  1. DDL:数据定义语言(Data Define Language):create(创建),alter(修改),drop(删除),TRUNCATE(截断),RENAME(重命名);

  2. DML:select(查询),delete(删除),update(更新),insert(新增);

  3. DCL:grant(添加权限),revoke(回收权限);





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 原字段名 新字段名 新的字段类型 [新的字段选项];





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

原文地址:https://www.cnblogs.com/itlihao/p/15262558.html