赞
踩
函数的分类:
1,单行函数:将每条数据进行独立的计算,然后每条数据得到一条结果。
2,多行函数:多条数据同时计算,最终得到一条结果数据。也成为聚集函数、分组函数, 主要用于完成一些统计功能。
针对于班上所有的同学:
分组情况1-按照性别分组:男生一组,女生一组,之后可以统计男生和女生的数量;
分组情况2-按照年龄段分组:80后一组,90后一组;
分组情况3-按照籍贯分组:广东一组,湖南一组,江西一组;
语法:
SELECT *|colName1,colName2,..|统计函数
FROM tName
[WHERE 条件]
GROUP BY colName1,[colName2],[...]
[ORDER BY colName1,colName2];
------------------------------------------------------
使用GROUP BY子句将表分成小组组函数忽略空值,可以使用ifnull
结果集隐式按升序排列,如果需要改变排序方式可以使用order by 子句
1,出现在SELECT列表中的字段,如果出现的位置不是在组函数中,那么必须出现在GROUP BY子句中。
2,在GROUP BY 子句中出现的字段,可以不出现在SELECT列表中
3,如果没有GROUP BY子句SELECT列表中的任何列或表达式不能使用统计函数。(不合理操作,Oracle会直接报错)(没有分组GROUP BY,查询没有意义)
-----------------------------------------------------------------------------
分组函数单独使用:
SELECT COUNT(empno) FROM emp;
错误的使用,出现了其他字段:
SELECT empno,COUNT(empno) FROM emp; //FALSE
----------------------------------------------------------------------------
如果现在要进行分组的话,则SELECT子句之后,只能出现分组的字段和统计函数,其他的字段不能出现:
正确做法:
SELECT job,COUNT(empno),AVG(sal)
FROM emp
GROUP BY job;
错误的做法:
SELECT deptno,job,COUNT(empno),AVG(sal)
FROM emp
GROUP BY job;
-----------------------------------------------------------------------------
组函数的错误用法:
1,不能在 WHERE 子句中限制组。
2,限制组必须使用 HAVING 子句。
3,不能在 WHERE 子句中使用组函数。
需求:按照职位分组,求出每个职位的最高和最低工资
6.使用HAVING子句对分组的结果进行限制
SELECT *|colName1,colName2,... | 统计函数
FROM tName
WHERE 条件1
GROUP BY colName1,colName2,..
[HAVING 分组后的过滤条件(可以使用统计函数)]
[ORDER BY 排序字段 ASC | DESC [,排序字段 ASC | DESC]];
*注意点:WHERE和HAVING的区别
WHERE:是在执行GROUP BY操作之前进行的过滤,表示从全部数据之中筛选出部分的数据,在WHERE之中不能使用统计函数;
HAVING:是在GROUP BY分组之后的再次过滤,可以在HAVING子句中使用统计函数;
外键值应该来源于从表的主键值
一般我们定义外键的时候,习惯命名:引用表名_引用列名
在开发中,我们有时候为了提高性能,会故意删除外键约束,此时我们可以通过java代码来控制数据的合理性
隐式内连接连接(看不到JOIN):
SELECT [DISTINCT] * | 字段 [别名] [,字段 [别名] ,…]
FROM 表名称 [别名], [表名称 [别名] ,…]
[WHERE 条件(S)]
[ORDER BY 排序字段 [ASC|DESC] [,排序字段 [ASC|DESC] ,…]];
-------------------------------------------------------------------------
使用表连接从多个表中查询数据
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2;
在 WHERE 子句中写入连接条件当多个表中有重名列时,必须在列的名字前加上表名作为前缀/或使用表的别名
等值连接是连接操作中最常见的一种,通常是在存在主外键约束条件的多表上建立的,连接条件中的两个字段通过等号建立等值关系。
使用表的别名简化了查询提高了查询的性能
SELECT e.empno,e.ename,d.deptno,d.dname FROM emp e,dept d WHERE e.deptno = d.deptno;
显示内连接查询(查询效果和隐式内连接相同):
SELECT table1.column, table2.column
FROM table1 INNER JOIN table2 ON(table1.column_name = table2.column_name)
自然连接的条件是基于表中所有同名列的等值连接为了设置任意的连接条件或者指定连接的列,需要使用ON子句连接条件与其它的查询条件分开书写使用ON 子句使查询语句更容易理解
练习,使用显式内连接查询:
需求:查询员工编号,员工名称,员工所属部门名称.
SELECT e.empno,e.ename,d.dname FROM emp e JOIN dept d ON e.deptno = d.deptno
SELECT e.empno,e.ename,d.dname FROM emp e JOIN dept d USING(deptno)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。