【学习:Mysql数据库二】

六、数据表的crud操作

6.1 insert语句(添加)

INSERT INTO tablename [ (column[, column...]) ] VALUES ( value[, value...] );

6.2 update语句(修改)

// 没带where,对整个表的所有记录进行修改
UPDATE tablename SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE ...] ;

案例

// 1、将所有员工薪水修改为5000元
update `employee` set salary = 5000;

// 2、将姓名为'张三'的员工薪水修改为3000元
update `employee` set salary = 3000 where name = ‘张三’;

// 3、将'张三'的薪水在原有基础上增加1000元
update `employee` set salary = salary + 1000 where name = ‘张三’;

6.3 delete语句(删除)

[条件删除]      DELETE FROM tablename [WHERE ...]      // 注意要带 where 条件
[该表全删]       TRUNCATE table tablename 

deletetruncate 对比 [推荐用delete]

1、truncate是整体删除(速度较快), delete是逐条删除(速度较慢)
2、truncate不写服务器logdelete写服务器log,也就是truncate效率比delete高的原因
3、truncateDDL语句,需要drop权限,因此会隐式提交,不能够rollbackdeleteDML语句,可以使用rollback回滚
4、delete 语句执行完毕后,会返回删除的记录的行数,而truncate 返回0
5、truncate不激活trigger(触发器),但是会重置Identity(标识列、自增字段),相当于自增列会被置为初始值,又重新从1开始记录,而不是接着原来的ID数。而delete删除以后,Identity依旧是接着被删除的最近的那一条记录ID1后进行记录
6、删除表用 drop table

6.4、select语句(查询)

SELECT [ DISTINCT 过滤字段 | * | 字段名 ] FROM tablename;

案例

// 查询过滤重复数据的name字段
select distinct name from tablename ;

6.4.1 where子句中,使用的运算符

这里写图片描述

6.4.2 order by子句排序

SELECT column1, column2, ... FROM tablename order by column asc|desc, ...    // 升序|降序

案例

// 1、对数学成绩排序后输出 => 升序
select name,math from `students` order by math asc;

// 2、对总分排序后输出,然后再按从 高 => 低 的顺序输出
select (math + chinese + english) AS total,name from `students` order by total desc;

// 3、对不姓李的学生成绩排序输出
select (math + chinese + english) AS total,name from `students` where 
name not like ‘李%’ order by total;

6.4.3 count函数

SELECT count(*)|count(字段名) FROM tablename [WHERE ...]

案例

// 1、统计总分大于250的学生人数
select count(*) from `students`  where (math + chinese + english) > 250;

// 2、如果有null值,我们应该使用下面的写法
select count(*) from `students`  where 
(ifnull(math,0) + ifnull(chinese,0) + ifnull(english,0)) > 250;

函数
ifnull(expr1, expr2): 如果expr1表达式值为非null, 则返回 expr1的值,否则返回expr2的值
等价

6.4.4 sum函数

SELECT sum(字段名){, sum(字段名),...} FROM tablename [WHERE ...]       //求总和

案例

// 1、统计一个班语文、数学、英语成绩总和
select sum(math) + sum(chinese) + sum(english) AS total from `students`;

// 2、如果不确定是否有null值,则应该这样统计分数总成绩
select (ifnull(math,0) + ifnull(chinese,0) + ifnull(english,0)) AS total from `students`;

// 3、如果你确定成绩没有null, 则可以
select sum(math + chinese + english) AS total from `students`;

6.4.5 avg函数

SELECT avg(字段名){, avg(字段名), ... } FROM tablename [WHERE ... ]    //求平均数

案例

// 1、求一个班级数学平均分
select avg(ifnull(math, 0)) AS avgMath from `students`; //第一种
select sum(math)/count(*) from `students`;

// 2、求出班级总平均成绩
select avg(ifnull(math,0) + ifnull(chinese,0) + ifnull(english,0)) AS 
avgTotal from `students`;  // 第一种

select (sum(math) + sum(chinese) + sum(english))/count(*)  AS 
avgTotal from `students`;  // 第二种

// 3、如果希望对结果进行保留到小数点第几位,可以使用round 函数 [保留2位]
select round(avg(ifnull(math,0) + ifnull(chinese,0) + ifnull(english,0)), 2 ) AS 
avgTotal from `students`;

函数
round($result, n) : 对$result 结果进行n 位保留

6.4.6 max/min函数

SELECT max(字段名) FROM tablename [WHERE ...]      // 求最大/最小

6.4.7 group by 子句

SELECT column1,column2,... FROM tablename [WHERE ...] group by column     // 分组

案例

// 1、每个部门的平均工资和最高工资
selsct deptno, avg(salary), max(salary) from `company` group by deptno;

// 2、每个部门的每种岗位的平均工资和最低工资
select deptno, job, avg(salary), min(salary) from `company` group by deptno, job;

6.4.8 having 子句

SELECT column1,column2,... FROM tablename [WHERE ...] group by column having ... // 过滤数据

案例

// 1、平均工资低于2000的部门号和它的平均工资
// [1、先显示所有部门的平均工资]
// [2、挑选出平均工资低于2000的部门,对group by 结果进行筛选要使用having]

select  deptno, avg(salary) as avgSal from `company` group by deptno 
having avgSal < 2000;

猜你喜欢

转载自blog.csdn.net/hello_sgw/article/details/81070983