order by关键字:
作用:用于对查询结果进行排序
用法:
1.利用asc 、desc对排序列进行升序或降序。
2.order by后可以添加多个列(逗号分隔),当一个列的值相同时,在按第二列进行排序,依次类推。
例:
1.求:部门是20的薪水
select * from emp where deptno = 20 order by sal;
2.求:部门是20的升序排列
select * from emp where deptno = 20 order by sal asc;
3.求:部门是20的薪水降序排列
select * from emp where deptno = 20 order by sal desc;
4.如果排序的列值相同时如何处理?(按照字典顺序)
select * from emp where deptno = 20 order by sal desc,ename;
为什么需要计算字段?
我们经常需要直接从数据库中检索出转换、计算或格式化过的数据;而不是检索出数据,然后再客户机应用程序中重新格式化。
计算字段并不实际存在于数据库表
Sql允许select子句中出现+,-,*,/,以及列名和常数的表达式
拼接字段(||,+)
首选||(mysql中||表示or,一般用concat())
例:
1.获取员工年薪
select (ename||'的年薪为:'||sal*12) info from emp;
集合
集合操作:
1.union 并集
例:
select * from emp where deptno = 20
union
select *from emp where sal > 2000;
2.union all 全集
例:
select * from emp where deptno = 20
union all
select *from emp where sal > 2000;
3.intersect 交集
例:
select * from emp where deptno = 20
intersect
select *from emp where sal > 2000;
4.minus 差集
例:
select * from emp where deptno = 20
minus
select *from emp where sal > 2000;
注意:
1.保证两个sql查询的列数是个数一致的。
2.保证两个sql查询的列的数据类型是一致的。
3.保证两个sql查询的列是相同的,否则查询的结果是无意义的。
函数
单行函数:对单个数值进行操作,并返回一个值。
分类:
1.字符函数
1.concat(a,b) 拼接a,b两个字符串数据
例:
select concat(concat(ename,'的职位是'),job)from emp;
2.initcap(x) 将每个单词x首字母大写
例:
select initcap('ename' )from dual;
3.lower() / upper() 将字符串小写/将字符串大写
例:
select lower ('LAowang') from dual;
select lower(ename) from emp;
select upper('das')from dual;
4.length() 获取字符串的长度
例:
select ename,length(ename) from emp;
5.lpad(a,b,c) /rpad() 将a字符串左边填充至b长度,用c字符填充
例:
select lpad(ename,10) from emp;
select rpad(ename,10,'*') from emp;
6.ltrim(a,b) / rtrim() 去除a字符串左边的b字符,如果b不传参,默认去除空格
例:
select ltrim(' abccba ') from dual;
select rtrim(' absd ') from dual;
7.replace(a,b,c) 将a中的b字符串替换为c
例:
select replace('he love you','i') test from dual;
8.substr(a,b,c) 将a的字符串,从b位置开始截取,截c个长度
例:
select substr('130888888881234',3,8)test from dual;
9.trim( a from b) 将b左右两边的a字符去除掉
例:
select trim('a' from 'a ba aa') from dual;
2.数字函数
1.abs() 求取绝对值
例:
select abs(-5) from dual;
2.ceil() 向上取整
例:
select ceil(3.1) from dual
3.floor() 向下取整
例:
select floor(3.9) from dual;
4.round() 四舍五入
例:
select round(4.5),round(4.4) from dual;
5.power(x,y) x的y次幂
例:
select power(2,10) from dual;
3.日期函数
1.sysdate 返回系统当前日期,注意没有括号
例:
select sysdate from dual;
2.add_months(d1,d2) 在d1日期上,增加d2个月份
例:
select add_months(sysdate,6) from dual;
3.months_between(d1,d2) 返回d1和d2之间的相隔月份
例:
select months_between(sysdate,hiredate)/12 from emp;
4.last_day(d) 返回d日期所在月份最后一天的日期
例:
select last_day(hiredate) from emp;
5.next_day(d,X) 返回下一个星期X的日期
例:
select hiredate,next_day(hiredate,'星期一') from emp;
4.转换函数
1.to_char() 将数字、或日期转化为字符串
例:
select to_char(sal,'$9,999.99') from emp;
2.to_date() 将字符串转化为日期
例:
select to_date('1999-12-12 12:12:12','YYYY-MM-DD HH24:MI:SS') from dual;
3.to_number() 将字符串转化为数字
例:
select to_number('888') from dual;
5.其他函数
1.nvl(x,y) 如果x为null,则显示为y,x和y的类型保持一致
例:
select ename,nvl(comm,0) from emp;
2.sys_guid() 生成一个的32位随机字符串
例:
select sys_guid() from dual;
3.decode() 条件取值,类同java的switch
例:
select ename,sal, decode(sal,800,'屌丝', 2000,'小资',3000,'白领','一般人') from emp;
4.case when then else end 条件取值,类同java的if-else if-else
例:
select ename,sal, case when sal<1000 then '屌丝'
when sal<2000 then '白领'
when sal<3000 then '小资'
when sal<4000 then '高富帅'
else '一般人' end from emp;
组函数
组函数又被称作聚合函数,用于对多行数据进行操作,并返回一个单一的结果
1.avg()求平均值,只能对数字类型进行处理,不处理空字段
例:求20部门的平均薪水为多少
select avg(sal) from emp where deptno = 20;
2.sum()求和,只能对数字类型进行处理
例:总共薪水
select sum(sal) from emp where deptno = 20;
3.count()计数,对任何类型生效,不处理空字段
例:求20部门有多少人
select count(sal) from emp where deptno = 20;
select count(1) from emp where deptno = 20;
4.max() 求最大值,对任何类型生效
例:求最高薪水
select max(sal) from emp where deptno = 20;
5.min() 求最小值,对任何类型生效
例:最低薪水
select min(sal) from emp where deptno = 20;
创建分组
group by关键字
作用:对查询结果进行分组处理
用法:
1.分组之后,不能将除分组字段之外的字段放在select后面
2.group by 后面可以跟多个字段,则这多个字段值都相同时,才分为一组
3.分组之后,可以使用组函数对每个组进行数据处理
例:用于对查询的数据进行分组并处理
select deptno from emp group by deptno;
having 关键字
作用:用于对分组数据进行过滤
用法:
类似于where的用法
例:
select deptno from emp group by deptno having avg(sal)>2000;
Sql顺序分为两类
1.sql的书写顺序
例:
select from where group by having order by [asc/desc]
2.sql的执行顺序
例:
from where group by having select order by [asc/desc]