Oracle_4
查询所有记录:
select deptno,dname,loc from dept; --查询scott用户默认的dept表中的所有记录
select * from dept;
Where条件查询:
select deptno,dname,loc from dept where deptno=10; --查询deptno=10的记录
比较运算符
- =
- >
- >=
- <
- <=
- <>或!=
- between...and...
- in
- like: %多个 _一个 占位符
- is null
- is not null
select * from emp where deptno between 10 and 20; --查询emp表中的deptno在10-20之间的,包括10,20 select * from emp where job like '_A%'; --匹配第二个字符为'A'的 select * from emp where job like '_a%'; --匹配第二字符为'a'的 --字符匹配是区分大小写的 select * from emp where mgr is null; select * from emp where mgr is not null;
逻辑运算符
- and
- or
- not
select * from emp where mgr is not null and sal>1500; --查询mgr is not null的并且 sal>1500的数据 --not是取反的意思
order by:排序
- desc,降序
- asc,默认是升序
select * from emp order by hiredate desc; --根据入职时间降序排
函数:
字符函数
- lower:转换为小写
- upper:大写
- initcap:首字符大写
- concat:连接字符串
- substr(column_name,startIndex,count):对于column_name列从第startIndex开始截取count个显示
- length:字符串的长度
- trim:去掉左右的空格
- ltrim:去掉左边的空格
- rtrim:去掉右边的空格
select concat('你好',ename),lower(ename),upper(ename),initcap(ename),substr(ename,1,1),length(ename),trim(ename) from emp;
select length(ename),length(trim(ename)) from emp; --函数是可以嵌套的
数值函数
- round(num,n):将列或表达式所表示的数值四舍五入到小数点后几位
- trunc(num,n):将列或表达式的数值截取到小数点的后几位,而不进行四舍五入
- mod(m,n):m除以n以后的余数
select round(49.255,2),round(49.254,2),trunc(49.256,2),mod(3,2) from dual; --49.26 49.25 49.25 1 select round(12.00,2) from dual; --12,若为0则直接忽略0 select round(sal,2) from emp;
数据类型转换函数
- to_char(date|number,[fmt]):将日期或数值型按照模式 fmt 转换为变长字符串
- to_number(char):将一个有数字组成的字符串转换为数值
- to_date(char,[fmt]):将yi8ge表示日期的字符串按照模式 fmt 转换为日期
select to_char(sysdate,'yyyy-MM-dd HH-mm-ss day d q') from dual; --2013-10-10 10-10-19 星期四 5 4
- yyyy:年的格式
- MM:月份
- dd:日
- HH:时
- mm:分
- ss:秒
- day:星期几,根据系统时间及地区决定显示
- d:显示星期的数字表示,周是从周日开始的,为第一天,所以周四即为5
- q:季度,10月份是第四季度,一个季度三个月
select to_char(892343354) from dual; select to_char(892343354,'L999,999,999,999') from dual; --¥892,343,354 根据本地货币转换 select to_char(892343354,'L999,999,999,999.99') from dual; --¥892,343,354.00
- L:local,本地货币符号
- 9:一个有效位
- ,:千分位
- .:小数点
select * from emp where to_char(hiredate,'MM')='12'; --获取12月份入职的 员工
select to_number('123')+1 from dual; --将字符型,转为number型 124
select to_date('1991-2-15','yyyy/MM/dd') from dual; --1991/2/15
日期函数
- sysdate:获取当前时间
- months_between(date1,date2):date1与date2之间的月数
- add_months(date,n):向date加上n个月,是几月份
- next_day(date,c):求出date之后一周内星期c的日期;周日是星期1,周六是星期7 c=1-7之间的数
- last_day(date):求出date所在月的最后一天
select to_char(sysdate,'yyyy-MM-dd HH:mm:ss') from dual; --2013-10-10 11:10:31 select to_char(sysdate,'yyyy/MM/dd HH:mm:ss') from dual; --2013/10/10 11:10:45
select months_between(sysdate,to_date('2010-01-01','yyyy-MM-dd')) from dual; --45.3055073924731 46个月不到
select add_months(sysdate,2) from dual; --2013/12/10 11:29:06
select next_day(sysdate,7) from dual; --2013/10/12 11:34:18 本周周六是10/12
select last_day(sysdate) from dual; --10-31
其他函数
- nvl:当一个值为null时,显示预先定义的值
select nvl(mgr,'0') from emp;
聚合函数
- avg:求平均
- count:统计数量
- max:最大值
- min:最小值
- sum:求和
select count(*) from emp; select sum(sal) from emp; select min(sal) from emp;
分组查询
--统计每个部门的平均销售额 select avg(sal),deptno from emp group by deptno; --显示平均销售额在2000以上的部门 select avg(sal),deptno from emp group by deptno having avg(sal)>2100;
总结:
- 查询数据
- 根据条件查询数据
- 查询排序
- 常见的函数