让网站做的有吸引力,php彩票网站开发,wordpress数据库缓存,建设工程信息在什么网站发布1#xff0c;update
对查询到的结果进行列值更新#xff0c;可以和older by#xff0c;where#xff0c;limit合并使用#xff0c;为了方便讲解#xff0c;将会以题目练习的方式进行说明#xff1a;
1#xff0c;将孙悟空同学的数学成绩变更为 80 分
本道题和where联…1update
对查询到的结果进行列值更新可以和older bywherelimit合并使用为了方便讲解将会以题目练习的方式进行说明
1将孙悟空同学的数学成绩变更为 80 分
本道题和where联用 2将曹孟德同学的数学成绩变更为 60 分语文成绩变更为 70 分
一次更新多列 3将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
这道题将联用order by和limit 在图中可以看到updete不支持math 30这种写法。
4将所有同学的语文成绩提升为原来的两倍
不用where语句就可以但是强烈不建议这么做改全表数据代价太大了。 2delete
语法
delete from 表名order by limitwhere语句联用
案例
1删除孙悟空同学的考试成绩 2删除整张表数据
删除表的方法一定要慎重使用表删了就没了删之前最好做好备份 可以看到表中的数据被删了但是表还在。
3截断表
语法
truncate 表名
注意这个操作慎用 1. 只能对整表操作不能像 DELETE 一样针对部分数据操作
2. 实际上 MySQL 不对数据操作所以比 DELETE 更快但是TRUNCATE在删除数据的时候并不经过真正的事 物所以无法回滚
3. 会重置 AUTO_INCREMENT 项 3插入查询结果
语法
INSERT INTO table_name [(column [, column ...])] SELECT 。。。 4聚合函数 MySQL中可以有函数可以一组一组的来对结果做聚合统计
具体函数如下 案例
1统计班级共有多少同学 也可以使用列名做统计 2统计本次考试的数学成绩分数个数
该方法中可以引入去重 3统计数学成绩总分
这里使用sum函数 可以用sum/count的方式来获取平均分 4统计平均总分
除了上面提供的统计平均分的方法mysql也提供了函数avg来完成平均分的计算 5返回英语最高分
这里可以用到max函数来辅助完成 6返回 70 分以上的数学最低分
这可以min和where联用 5group by子句的使用/分组聚合统计
实际上用到该列的不同行的数据来分组分组的条件由用户定组内数据一定是相同的可被聚合压缩。
分组不就是按照条件拆成了多个组进行各自组内的统计
换句话说就是分组就是分表不就是把一张表按条件在逻辑上拆成了多个子表然后分别对各自子表进行聚合统计
在select中使用group by 子句可以对指定列进行分组查询
语法
select column1, column2, .. from table group by column;
直接用案例来看更好看
1首先我们先用一个表来练习具体代码如下
-------------------------------------------------------------------------------------------------------------------------------
DROP database IF EXISTS scott;
CREATE database IF NOT EXISTS scott DEFAULT CHARACTER SET utf8 COLLATE utf8_general_c i; USE scott; DROP TABLE IF EXISTS dept; CREATE TABLE dept ( deptno int(2) unsigned zerofill NOT NULL COMMENT 部门编号, dname varchar(14) DEFAULT NULL COMMENT 部门名称, loc varchar(13) DEFAULT NULL COMMENT 部门所在地点 ); DROP TABLE IF EXISTS emp; CREATE TABLE emp ( empno int(6) unsigned zerofill NOT NULL COMMENT 雇员编号, ename varchar(10) DEFAULT NULL COMMENT 雇员姓名, job varchar(9) DEFAULT NULL COMMENT 雇员职位, mgr int(4) unsigned zerofill DEFAULT NULL COMMENT 雇员领导编号, hiredate datetime DEFAULT NULL COMMENT 雇佣时间, sal decimal(7,2) DEFAULT NULL COMMENT 工资月薪, comm decimal(7,2) DEFAULT NULL COMMENT 奖金, deptno int(2) unsigned zerofill DEFAULT NULL COMMENT 部门编号 ); DROP TABLE IF EXISTS salgrade; CREATE TABLE salgrade ( grade int(11) DEFAULT NULL COMMENT 等级, losal int(11) DEFAULT NULL COMMENT 此等级最低工资, hisal int(11) DEFAULT NULL COMMENT 此等级最高工资 ); insert into dept (deptno, dname, loc) values (10, ACCOUNTING, NEW YORK); insert into dept (deptno, dname, loc) values (20, RESEARCH, DALLAS); insert into dept (deptno, dname, loc) values (30, SALES, CHICAGO); insert into dept (deptno, dname, loc) values (40, OPERATIONS, BOSTON); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7369, SMITH, CLERK, 7902, 1980-12-17, 800, null, 20); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7499, ALLEN, SALESMAN, 7698, 1981-02-20, 1600, 300, 30); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7521, WARD, SALESMAN, 7698, 1981-02-22, 1250, 500, 30); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7566, JONES, MANAGER, 7839, 1981-04-02, 2975, null, 20); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7654, MARTIN, SALESMAN, 7698, 1981-09-28, 1250, 1400, 30); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7698, BLAKE, MANAGER, 7839, 1981-05-01, 2850, null, 30); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7782, CLARK, MANAGER, 7839, 1981-06-09, 2450, null, 10); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7788, SCOTT, ANALYST, 7566, 1987-04-19, 3000, null, 20); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7839, KING, PRESIDENT, null, 1981-11-17, 5000, null, 10); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7844, TURNER, SALESMAN, 7698,1981-09-08, 1500, 0, 30); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7876, ADAMS, CLERK, 7788, 1987-05-23, 1100, null, 20); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7900, JAMES, CLERK, 7698, 1981-12-03, 950, null, 30); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7902, FORD, ANALYST, 7566, 1981-12-03, 3000, null, 20); insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (7934, MILLER, CLERK, 7782, 1982-01-23, 1300, null, 10); insert into salgrade (grade, losal, hisal) values (1, 700, 1200); insert into salgrade (grade, losal, hisal) values (2, 1201, 1400); insert into salgrade (grade, losal, hisal) values (3, 1401, 2000); insert into salgrade (grade, losal, hisal) values (4, 2001, 3000); insert into salgrade (grade, losal, hisal) values (5, 3001, 9999);
---------------------------------------------------------------------------------------------------------------------------------
2创建好表我们可以开始练习如何显示每个部门的平均工资和最高工资 可以看到group by对表进行了聚合并算出来个平均和最小工资在使用group by后指定列名的
可以在select前直接出现聚合函数也可在此直接出现如果不是分组条件等等列就不能出现
group by主要用于统计查个人最高应该用where limitorder by来查。
3having
having关键字可以对聚合后的数据进行判断直接看例子
显示平均工资低于2000的部门和它的平均工资
统计各个部门的平均工资
select avg(sal) from emp group by deptno having和group by配合使用对group by结果进行过滤 --having经常和group by搭配使用作用是对分组进行筛选作用有些像where
4having和where的区别
两个函数的功能基本都是一样的那么他们的区别主要是体现在语句的执行顺序在select中也可以用having但是不推荐
where语句是在from执行之后就执行而having是在所有操作结束之后再执行 可以根据数字来看到having执行顺序
不要单纯认为只有磁盘上的表结构导入到MySQL真是存在表才是表我们要人知道通过各自中间筛选它最终结果都是逻辑上的表无论怎么赛选所以
MySQL一切皆表