- 聚合函数介绍, select 聚集聚合查询 (整合一整列字段)
语法形式:select 函数名(作用字段) from 表名;
解释:查询 函数处理指定字段(列)之后的结果:
有的时候我们需要整合一列的信息来看,这个时候就可以使用聚合函数,聚合函数就是用于整合一列的数据的
- count(*) 和 count(指定字段(列))的区别:* 会连着NULL 一起做统计,指定具体字段不会统计NULL
具体例子, 后序有专练
- select 分组查询
- 语法形式: select 指定分组字段, 聚合函数(处理字段) from 表名 group by 前面的指定分组字段. (强调,前面的指定分组字段和后面的指定分组字段一定要一一对应,不能少)
- 看不同语法不要着急,先搞清楚分组是个啥,分组需要用在哪里....
- 分组现象那可是相当常见,男生女生各排成一列,分别统计不同职业的人数和。(不同的职业也可以用来分组)
- 强调,前面的指定分组字段和后面的指定分组字段一定要一一对应,不能少. 这句话很重要. 如果不对应会报错.
- 举几个栗子
分解一下第一个查询每个工作岗位的人数,一步一步的来:
分组其实就是按照字段值不同将重复的哪些字段值分为一组 (相当于是按照字段值分组)
然后接着加上
就很简单了 分组一般结合聚合函数一同操作使用,先进行分组,然后针对分组使用聚合函数进行一个聚合统计数据.
针对where 和 having 做出解释区分:where 是对于记录行做筛选,筛选的是行,having 是对于分组进行筛选,筛选的是分组. (如何筛,条件限定限制)
eg :
上述操作筛除记录,也就是行:
然后是按照 分组 进行 having 筛选分组结果
小结:聚合查询常常和分组一同使用,对于分组后的哪些组进行聚合处理数据,然后在过程中还需要筛选出复合我们要求的记录的话, where是针对 记录(行)筛选 (先筛), having 是针对分组后的结果进行筛选,后筛
(还有就是分组字段前后保持相同) 注意
- select 排序查询
- 语法形式: select 字段 表名 ,,, order by 排序字段1 排序规则1, 排序字段2 排序规则2
- 首先,排序字段可以给与多个,再给与多个排序字段的情况下,是依次按照排序字段进行比较排序,如果前面的排序字段相同再使用后序的排序字段进行排序
- 默认排序规则是ASC 升序排序, DESC 降序排序
来几个栗子:
- select 限制查询 limit
语法形式:select 查询字段 from emp limit m, n; //查询emp 记录 省略前m 行记录查询后n 条
select 查询字段 from emp limit n; //查询emp 前n 条记录
eg:
- select 查询且设置别名 + 去除重复记录
- 语法形式:
- 上面两个都蛮简单的,就简单使用一下就是了:
eg :
注意一下distinct 需要加载修饰字段的前面就是了
- select 分页查询(小杰因为对于页还没有直观的理解,所以自己没敢尝试写,怕误导大家,有很会的大家可以给出解释,蟹蟹)
六.查询这些基本语法是学的差不多点了,可是需要练习呀,接下来请你按照我给的sql文件进行导入数据库,然后请你根据题目进行练习,练完之后最下面有答案. (数据库就是需要操作,小杰初学者小感受)
- 第一步,导入数据库: 方式,两种:
- 第一种 指定导入:
source xxx/test.sql
导入sql文件,sql文件实际上是一个脚本文件,里面有多行SQL语句,通过source命令可以批量执行。 (命令导入)
sql 文件代码:
comm SMALLINT ) ; CREATE TABLE IF NOT EXISTS salgrade ( grade INT, losal INT, hisal INT ); -- 插入测试数据 —— dept INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK'); INSERT INTO dept VALUES (20,'RESEARCH','DALLAS'); INSERT INTO dept VALUES (30,'SALES','CHICAGO'); INSERT INTO dept VALUES (40,'OPERATIONS','BOSTON'); -- 插入测试数据 —— emp INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20); INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,'1981-2-20',1600,300,30); INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,'1981-2-22',1250,500,30); INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,'1981-4-2',2975,NULL,20); INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,'1981-9-28',1250,1400,30); INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,'1981-5-1',2850,NULL,30); INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,'1981-6-9',2450,NULL,10); INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20); INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10); INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,'1981-9-8',1500,0,30); INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20); INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,'1981-12-3',950,NULL,30); INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,'1981-12-3',3000,NULL,20); INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,'1982-1-23',1300,NULL,10); -- 插入测试数据 —— salgrade INSERT INTO salgrade VALUES (1,700,1200); INSERT INTO salgrade VALUES (2,1201,1400); INSERT INTO salgrade VALUES (3,1401,2000); INSERT INTO salgrade VALUES (4,2001,3000); INSERT INTO salgrade VALUES (5,3001,9999);
新建一个文件命名为test.sql 将上述拷贝进去,导入执行上述语句创建数据库即可
- 专项练习1: 练习基本的指定字段 去重,别名查询
- 查询指定字段 ename,job,sal的数据
- 查询所有字段
- 查询所有员工的职位,并起别名
- 查询员工的的职位有哪些(不要重复)
- 查询员工年薪 即 sal* 12
- 专项练习2: 条件查询练习
查询工资等于3000的员工查询工资小于1000的员工
查询工资小于等于1000的员工
查询没有奖金的员工
查询有奖金的员工
查询工资在1200到1800之间的员工(包含1200和1800岁)
查询职位为推销员,且工资小于1500的员工
查询工资为800 或 3000 或 5000的员工
查询姓名为四个字的员工
查询姓名最后一位是S的员工
- 专项训练3 聚合函数使用
- 统计该企业员工数量
- 统计该企业员工的平均工资
- 查询该企业员工的最高工资
- 查询该企业员工的最低工资
- 计算所有销售的工资之和
- 专项训练4 : 聚合函数结合分组查询使用
- 统计出每个工作岗位的人数
- 统计出每种职位的最低和最高工资
- 显示不同职位薪资少于1500的人数
- 显示非销售人员(salesman)工作名称以及从事同一工作的员工的月工资的总和,并且要满足从事同一工作的员工的月工资合计大于等于5000。
- 专项训练5 : 排序查询
根据姓名对员工进行排序(升序)
查询入职时间大于1981年6月6日的员工信息,并按照入职时间升序排列
根据工作职位,进行升序排列,职位相同的情况下,再根据入职时间降序排列
查询工资不在1000到2000之间的员工的姓名和工资,工资按降序排列
按工作职位进行分组,查看每个工作职位的人数,工作职位按升序排列
七. 总结本文
上述专训答案获取地址 :链接: https://pan.baidu.com/s/1DCvAHmYcWEXOIJBE4YhLyg?pwd=928z
提取码:928z
--来自百度网盘超级会员V1的分享
本章首先是回顾了之前所学重点,然后接着是介绍了Mysql语句执行流程,SQL层仅仅只是做sql语句的优化处理,真正实现将数据存储到表中和从表中提取数据,其实实要存储到对应的物理内存,也是需要从物理内存上去取出数据的,这些数据存取的工作其实是表处理器 (存储引擎) 帮助我们完成的
主要的存储引擎 myisam 查询速度快,对于小型数据库比较合适,还有查询多的,但是它不支持行级锁, 不支持事务,也不支持外键 在 5. 7 还是5点几版本之前他是默认的存储引擎 之后 是 innodb
然后是字符集的介绍, 包含字符的范围 + 编码规则,现在默认mysql 使用的是utf8 最好我们写成utf8mb4;
然后是各种表的字段修饰,主键,每个表都要有一个主键,主键是唯一且不为空的,不会出现重复.
然后介绍了各种数据类型,主要就是串 (char, varchar text) 数值 (int, tinyint, float decimal(m, n) ) 日期数据类型 (time dte datetime)
核心就是select 的多种查询方式, 指定字段查询(列查询),条件查询(指定行查询),聚合查询,分组查询group by,去重查询distinct , 排序查询 order by
最后,小杰以初学者的感受斗胆给大家提出意见,数据库的学习绝非是只动头脑思考可行的,小杰认为初学一定要多写, 将学习时间拉长,理论知识慢慢积累,但是一定要学练并举,学习后马上训练 (如果您觉着小杰写的还有用,麻烦支持下小杰蟹蟹您)