您的位置:首页 > 文旅 > 旅游 > 国际新闻今天_b站视频推广网站没有病毒_免费b站软件推广网站2023_热狗seo外包

国际新闻今天_b站视频推广网站没有病毒_免费b站软件推广网站2023_热狗seo外包

2024/12/23 4:56:10 来源:https://blog.csdn.net/pouop/article/details/142988260  浏览:    关键词:国际新闻今天_b站视频推广网站没有病毒_免费b站软件推广网站2023_热狗seo外包
国际新闻今天_b站视频推广网站没有病毒_免费b站软件推广网站2023_热狗seo外包

1,update

对查询到的结果进行列值更新,可以和older by,where,limit合并使用,为了方便讲解,将会以题目练习的方式进行说明:

1,将孙悟空同学的数学成绩变更为 80 分

本道题和where联用:

2,将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分

一次更新多列

3,将总成绩倒数前三的 3 位同学的数学成绩加上 30 分

这道题将联用order by和limit:

在图中可以看到,updete不支持math += 30这种写法。

4,将所有同学的语文成绩提升为原来的两倍

不用where语句就可以,但是强烈不建议这么做,改全表数据代价太大了。

2,delete

语法:

delete from + 表名,+(order by ,limit,where)语句联用

案例:

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联用:

5,group 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 limit,order by来查。

3,having

having关键字可以对聚合后的数据进行判断,直接看例子:

显示平均工资低于2000的部门和它的平均工资

统计各个部门的平均工资

select avg(sal) from emp group by deptno:

having和group by配合使用,对group by结果进行过滤

--having经常和group by搭配使用,作用是对分组进行筛选,作用有些像where

4,having和where的区别:

两个函数的功能基本都是一样的,那么他们的区别主要是体现在语句的执行顺序,在select中也可以用having,但是不推荐

where语句是在from执行之后就执行,而having是在所有操作结束之后再执行:

可以根据数字来看到having执行顺序:

不要单纯认为只有磁盘上的表结构导入到MySQL,真是存在表才是表,我们要人知道通过各自中间筛选,它最终结果都是逻辑上的表,无论怎么赛选,所以

MySQL一切皆表!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com