一、sql中show的几种用法
show tables; // 显示数据库中的列表
show databases; // 显示mysql中的列表
show columns from class; // 返回当前表的列
show create database school; // 显示创建数据库的语句
show create table class; // 显示创建数据表的语句
show grants; // 显示授予用户的安全权限
show errors 或 show warnings // 用来显示服务器错误或警告信息;
1.升序asc和降序desc
select 字段名,字段名 from 表名字order by sal asc; //asc升序
select ename,sal from emp order by sal asc; //asc升序
select ename,sal from emp order by sal desc;//desc降序
select ename,sal from emp order by sal asc, ename asc; //如果工资一样的话,就按照名字来排序;
2.between 求出小到大的值 比如 1000 到2000 ;
3.求出工资1250到3000,用降序来排序,如果工资一样就按26个字母降序来排序;
select ename,sal from emp where sal between 1250 and 3000 order by sal desc, ename desc;
关键字顺序不能变:
select
.....
from
....
order by
.....
四、单行处理函数(几个输入就几个输出,这是单行处理函数的特点)。
(1)lower()转换为小写
语法:select lower(转换的字段) as(改名) zhangsan from emp;
(2).upper()转换为大写
语法:select upper(转换的字段) as(改名) zhangsan from emp;
(3)substr 取子串(substr(被截取的字符串,起始下标,截取的长度))。
语法:select substr(ename,1,2) as lisi from emp;
(4).concat函数进行字符串的拼接
语法:select concat(字符名,字符名) from emp;
(5).length长度
语法: select leng(字符名) as zhangdu from emp;
(6).trim()去空格
(7)round()四舍五入
(8)rand()生成随机数
语法: select round(rand() * 100,0) from emp;//求一百以内的随机数
(9) ifnull(数据,被当做哪个值) 可以将 null 转换成一个具体值 ,如果“数据”为null的时候,把这个数据结构当做哪个值。
补助为null的时候,将补助当做为零
求年薪多少, 年薪 = 工资 + 补助 * 12;
语法:select ename,(sal + ifnull(comm,0)) * 12 as yearsal from emp;
(10)case...when...then....when.....then.....else.....end //当什么时候怎么做当什么时候怎么做 else其他情况怎么办 end
当员工的工作岗位是MANAGER的时候,工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%,其它正常。
语法:select
ename,job,
sal as oldsal, (case job when 'MANAGER' then sal*1.1 when 'SALESMAN' then sal*1.5 else sal end) as newsal
from
emp;
五、.分组函数(多行处理函数)
(1)多行处理函数的特点:输入多行,最终输出一行。
(2)注意:分组函数在使用的时候必须先进行分组,然后才能用。
(3) 如果你没有对数据进行分组,整张表默认为一组。
(4)5个: count()计数 , sum()求和,avg()平均值,max()最大值,min()最小值;
(5)分组函数自动忽略null,不需要提前对null进行处理
六、分组查询(重点)(group by)
分组查询语法: select....from....group by....
1.将之前的关键字全部组合在一起,来看一下它们的执行顺序:select...from....where....group....order by....
以上关键字的顺序不能颠倒,需要记忆。执行顺序是:1.from 2.where 3.group 4.select 5.order by;
2.重点结论:
在一条select语句当中,如果有group by语句的话,
select后面只能跟:参加分组的字段,以及分组函数。 其他的一律不能跟。
按照部门编号分组,求每一组的最大值
语法:select deptno,max(sal) from emp group by deptno;
3.找出每个部门,不同工作岗位 的最高薪资
语法:select deptno,job,max(sal) from emp group by deptno,job; //两个字段联合成1个字段看,两个字段联合分组
4.having可以对分完组之后的数据进一步过滤,having不能单独使用,having不能代替where , having必须和group by联合使用。
找出每个部门平均薪资大于2500的
语法: select deptno,avg(sal) from emp group by deptno having avg(sal) >2500;
5.单标查询总结
select .... from .... where..... group by .... having .... order by ......
以上执行额顺序是(不能颠倒)1. from 2. where 3.group 4.having 5select 6. order by
1.从某张表中查询数据,2.先经过where条件筛选出有价值的数据。3.对这些有价值的数据进行分组。4.分组之后可以使用having继续筛选。5.select查询出来。6.最后排序输出!
案例:找出每个岗位的平均薪资,要求显示平均薪资大于1500的,处MANAGER岗位之外,要求按照平均薪资降序排。
语法: select job,avg(sal) as avgsal from emp where job <> 'MANAGER' group by job having avg(sal) > 1500 order by avgsal desc;