网站后台上传缩略图,网站开发需要用到哪些技术,北京海淀区网站开发,新注册公司核名步骤文章目录 3.Update3.1将孙悟空同学的数学成绩变更为 80 分3.2将曹孟德同学的数学成绩变更为 60 分#xff0c;语文成绩变更为 70 分3.3将总成绩倒数前三的 3 位同学的数学成绩加上 30 分3.4将所有同学的语文成绩更新为原来的 2 倍 4.Delete4.1删除数据4.1.1删除孙悟空同学的考… 文章目录 3.Update3.1将孙悟空同学的数学成绩变更为 80 分3.2将曹孟德同学的数学成绩变更为 60 分语文成绩变更为 70 分3.3将总成绩倒数前三的 3 位同学的数学成绩加上 30 分3.4将所有同学的语文成绩更新为原来的 2 倍 4.Delete4.1删除数据4.1.1删除孙悟空同学的考试成绩4.1.2删除整张表数据 4.2 截断表 5.插入查询结果6.聚合函数6.1统计班级共有多少同学6.2 统计班级收集的 qq 号有多少6.3统计本次考试的数学成绩分数个数6.4统计数学成绩总分6.5统计平均总分6.6 返回英语最高分6.7返回 70 分以上的数学最低分 7.group by子句的使用8.实战OJ 3.Update
语法
UPDATE table_name SET column expr [, column expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]对查询到的结果进行列值更新
示例
3.1将孙悟空同学的数学成绩变更为 80 分
– 更新值为具体值 – 查看原数据
SELECT name, math FROM exam_result WHERE name 孙悟空;– 数据更新
UPDATE exam_result SET math 80 WHERE name 孙悟空;
SELECT name, math FROM exam_result WHERE name 孙悟空;3.2将曹孟德同学的数学成绩变更为 60 分语文成绩变更为 70 分
– 查看原数据
SELECT name, math, chinese FROM exam_result WHERE name 曹孟德;– 数据更新
update exam_result set math60, chinese 70 where name曹孟德;
select name,math,chinese from exam_result where name曹孟德;3.3将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
– 查看原数据
SELECT name, math, chinese math english 总分 FROM exam_result
ORDER BY 总分 LIMIT 3;– 数据更新不支持 math 30 这种语法
UPDATE exam_result SET math math 30
ORDER BY chinese math english LIMIT 3;SELECT name, math, chinese math english 总分 FROM exam_result
ORDER BY 总分 LIMIT 3;3.4将所有同学的语文成绩更新为原来的 2 倍
– 查看原数据
SELECT * FROM exam_result;– 数据更新
UPDATE exam_result SET chinese chinese * 2;
SELECT * FROM exam_result;4.Delete
4.1删除数据
语法
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]示例
4.1.1删除孙悟空同学的考试成绩
– 查看原数据
SELECT * FROM exam_result WHERE name 孙悟空;– 删除数据
DELETE FROM exam_result WHERE name 孙悟空;
SELECT * FROM exam_result WHERE name 孙悟空;4.1.2删除整张表数据
注意删除整表操作要慎用
语法
delete from 表名;4.2 截断表
在MySQL中“截断表”Truncate Table是一个快速删除表中所有行数据的操作但它不会删除表本身也不会重置表的自增ID这取决于表是否使用了AUTO_INCREMENT属性以及MySQL的版本和存储引擎。与DELETE FROM table_name;相比TRUNCATE TABLE语句通常执行得更快因为它不记录每一行数据的删除操作到事务日志中而是直接重新创建表对于支持这种优化的存储引擎而言。
语法
TRUNCATE [TABLE] table_name注意这个操作慎用
只能对整表操作不能像 DELETE 一样针对部分数据操作实际上 MySQL 不对数据操作所以比 DELETE 更快但是TRUNCATE在删除数据的时候并不经过真正的事物所以无法回滚会重置 AUTO_INCREMENT 项
– 准备测试表
CREATE TABLE for_truncate (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)
);– 插入测试数据
INSERT INTO for_truncate (name) VALUES (A), (B), (C);– 查看测试数据
SELECT * FROM for_truncate;– 截断整表数据注意影响行数是 0所以实际上没有对数据真正操作
TRUNCATE for_truncate; – 查看删除结果
SELECT * FROM for_truncate;– 再插入一条数据自增 id 在重新增长
INSERT INTO for_truncate (name) VALUES (D);– 查看数据
SELECT * FROM for_truncate;– 查看表结构会有 AUTO_INCREMENT2 项
SHOW CREATE TABLE for_truncate\G5.插入查询结果
语法
INSERT INTO table_name [(column [, column ...])] SELECT...示例删除表中的的重复复记录重复的数据只能有一份
– 创建原数据表
CREATE TABLE duplicate_table (id int, name varchar(20));– 插入测试数据
INSERT INTO duplicate_table VALUES
(100, aaa),
(100, aaa),
(200, bbb),
(200, bbb),
(200, bbb),
(300, ccc);– 创建一张空表 no_duplicate_table结构和 duplicate_table 一样
CREATE TABLE no_duplicate_table LIKE duplicate_table;– 将 duplicate_table 的去重数据插入到 no_duplicate_table
INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table;– 通过重命名表实现原子的去重操作
RENAME TABLE duplicate_table TO old_duplicate_table,
no_duplicate_table TO duplicate_table;– 查看最终结果
SELECT * FROM duplicate_table;6.聚合函数
函数说明COUNT([DISTINCT] expr)返回查询到的数据的 数量SUM([DISTINCT] expr)返回查询到的数据的 总和不是数字没有意义AVG([DISTINCT] expr)返回查询到的数据的 平均值不是数字没有意义MAX([DISTINCT] expr)返回查询到的数据的 最大值不是数字没有意义MIN([DISTINCT] expr)返回查询到的数据的 最小值不是数字没有意义
示例
6.1统计班级共有多少同学
– 使用 * 做统计不受 NULL 影响
SELECT COUNT(*) FROM students;– 使用表达式做统计
SELECT COUNT(1) FROM students;6.2 统计班级收集的 qq 号有多少
SELECT COUNT(qq) FROM students;6.3统计本次考试的数学成绩分数个数
select count(math) from exam_result;– COUNT(DISTINCT math) 统计的是去重成绩数量
select count(distinct math) from exam_result;6.4统计数学成绩总分
SELECT SUM(math) FROM exam_result;– 不及格 60 的总分没有结果返回 NULL
SELECT SUM(math) FROM exam_result WHERE math 60;6.5统计平均总分
SELECT AVG(chinese math english) 平均总分 FROM exam_result;6.6 返回英语最高分
SELECT MAX(english) FROM exam_result;6.7返回 70 分以上的数学最低分
SELECT MIN(math) FROM exam_result WHERE math 70;7.group by子句的使用
在select中使用group by 子句可以对指定列进行分组查询
select column1, column2, .. from table group by column;示例 准备工作创建一个雇员信息表来自oracle 9i的经典测试表 EMP员工表 DEPT部门表 SALGRADE工资等级表
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);查看员工及部门 如何显示每个部门的平均工资和最高工资
select deptno,avg(sal),max(sal) from emp group by deptno;显示每个部门的每种岗位的平均工资和最低工资
select avg(sal),min(sal),job, deptno from emp group by deptno, job;显示平均工资低于2000的部门和它的平均工资
统计各个部门的平均工资
select avg(sal) from emp group by deptno;having和group by配合使用对group by结果进行过滤
select avg(sal) as myavg from emp group by deptno having myavg2000;8.实战OJ
批量插入数据
查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t 595. 大的国家 177. 第N高的薪水