oracle学习笔记第一天
--oracle学习的第一天
--一、几个基础的关键字
1、select
select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条语句的最后执行
select * from emp;
相关:1)列可起别名,有三种方式:<1>直接列名后下个单词;
select job j from emp;
<2>列名后双引号添加别名
select job "j" from emp;
<3>列名后加as,再加有有双引号的别名
select job as "j" from emp;
select job as "j" from emp;
2)distinct关键字(有区别的) 去重,可有多列(多列为整体,都一样时才去重)
select distinct job from emp;
select distinct job,comm from emp;
2、from关键字 检索表,紧跟后面可直接写表名
select * from emp e;
3、where关键字 过滤行记录
用法:
1).=,!=,<>,<,>,<=,>=,any,some,all
select * from emp where sal>2000;
select * from emp where sal = any(5000,1100);
2). is null,is not null
select * from emp where comm is not null;
3).between x and y
select * from emp where sal between 2000 and 4000;
4).and 、 or 、 not
select * from emp where deptno = 10 and sal>2000;
select * from emp where deptno = 10 or sal>2000;
select * from emp where comm is not null;
5).in(list),not in(list)注:定值并非定范围
select * from emp where sal in(1100,5000);
6).exists(子查询)、not exists(子查询)
select * from emp where exists (select deptno from emp where deptno = 20 and sal >2000 );
7).like模糊查询(用单引号)
“%”:匹配零个或若干个字符
“_”:匹配一个字符
在模糊查询中,如果查询的数据中有“%”,“_”时,可以使用escape自定义转
select * from emp where ename like '%A%' ;
select * from emp where ename like '_A%';
4、order by关键字 排序
注:asc 升序(可省略),desc 降序
可加多列,有优先级,第一列先排序,后第一列值相同,按第二列排序,类推
5、集合操作:
1).union 关键字 并集(去重)
select ename from emp where sal > 2000 union select ename from emp where deptno=10
2).union all 关键字 全集(不去重)
select sal from emp where sal > 2000 union all select sal from emp where sal < 5000
3).intersect 关键字 交集
select sal from emp where sal > 2000 intersect select sal from emp where sal < 5000
4).minus 关键字 差集
select sal from emp where sal > 2000 minus select sal from emp where sal < 5000
注:1)能用and,or,解决的不要用集合操作,效率低
2)两集合选择的列建议保持一致,不一致有什么意义呢
6、group by关键字 分组
注: 1.分组之后,不能将除分组字段之外的字段放在select后面
2.group by 后面可以跟多个字段,则这多个字段值都相同时,才分为一组
3.分组之后,可以使用组函数对每个组进行数据处理
select deptno from emp group by deptno,comm;
7、having关键字 分组后过滤行记录
注:与where基本一样
select deptno from emp group by deptno having deptno =10;
二、函数
单行函数
dual 虚表,一般用于测试
1.字符函数
1)concat(s1,s2) 拼接a,b两个字符串数据
select concat('aa','ccc') from dual;
2)initcap(s) 将每个单词x首字母大写
select initcap ('li jia sheng') from emp ;
3)lower(s) / upper(s) 将字符串小写/将字符串大写
select lower ('LI JIA SHENG') from emp ;
select upper ('li jia sheng') from emp ;
4)length(s) 获取字符串的长度
select length('aaaccc') from dual;
5)lpad(s,len,c) /rpad() 将s字符串左边填充至len长度,用c字符填充
select lpad('abcde',10,'-') from dual;
select rpad('abcde',10,'-') from dual;
6)ltrim(s,c) / rtrim() 去除s字符串左边的c字符,如果c不传参,默认去除空格
select ltrim('abcde','a') from dual;
7)replace(s,s1,s2) 将a中的b字符串替换为c
select replace('a bcde','a','c') from dual;
8)substr(s,index,len) 将s的字符串,从index位置开始截取,截len个长度
select substr('abcde',2,2) from dual;
9)trim( c from s) 将b左右两边的a字符去除掉
select trim('a' from 'aaddddaa') from dual;
2.数字函数
abs() 求取绝对值
select abs(-3) from dual;
ceil() 向上取整
select ceil(5.2) from dual;
floor() 向下取整
select floor(5.2) from dual;
round() 四舍五入
select round(5.2) from dual;
power(x,y) x的y次幂
select power(5,2) from dual;
3.日期函数
sysdate 返回系统当前日期,注意没有括号
select sysdate from dual;
add_months(d1,d2) 在d1日期上,增加d2个月份
select add_months(sysdate,4) from dual;
months_between(d1,d2) 返回d1和d2之间的相隔月份
select months_between(sysdate,hiredate) from emp;
last_day(d) 返回d日期所在月份最后一天的日期
select last_day(sysdate) from dual;
next_day(d,X) 返回下一个星期X的日期
select next_day(sysdate,'星期日') from dual;
4.转换函数
to_char() 将数字、或日期转化为字符串
select to_char(sysdate,'yyyy-mm-dd hh-mi-ss') from dual ;
select to_char(1234,'9,9,9,9') from dual;
to_date() 将字符串转化为日期
select to_date('1996/06/25','yyyy-mm-dd ') from dual;
to_number() 将字符串转化为数字
select to_number('23333') from dual;
select to_number(64,'XX') from dual;
5.其他函数
nvl(x,y) 如果x为null,则显示为y,x和y的类型保持一致
select nvl(comm,0) from emp;
sys_guid() 生成一个的32位随机字符串
select sys_guid() from emp;
decode() 条件取值,类同java的switch
select decode(sal,1000,'****',5000,'######','!!!!!') from emp;
case when then else end 条件取值,类同java的if-else if-else
select case when sal<1000 then '@@@@@@@'
when sal<5000 then '^^^^^^^'
else '!!!!!' end from emp;
组函数
组函数又被称作聚合函数,用于对多行数据进行操作,并返回一个单一的结果
avg()求平均值,只能对数字类型进行处理,不处理空字段
select avg(sal) from emp;
sum()求和,只能对数字类型进行处理
select sum(sal) from emp;
max() 求最大值,对任何类型生效
select max(sal) from emp;
min() 求最小值,对任何类型生效
select min(sal) from emp;
三、sql顺序
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]