- 爱易网页
-
数据库教程
- oracle查询话语
日期:2014-05-16 浏览次数:20544 次
oracle查询语句
一、Oracle学习查询语句的笔记
在Oracle 中是对大小写 敏感的 也就是区分大小写
|| 连接or 或者
and 和、 并且
where 条件
between ..最小值 and 最大值(这个关键字包含等于)
in 字段 in(值1,值2,值3…值n)
or 关键字 例子—-select * from emp where (deptno=10 and job =’MANAGER’) or (deptno=20 and job=’CLERK’);
distinct去掉重复的
like |模糊查询(注意使用通配符的问题 ) 可以在任何地方应用
|主要的通配符有
|···|“%”:可以匹配任意长度的内容
|···|“_”:可以匹配一个长度的内同
例如
select * from emp where ename like ‘%M%’;
<> 不等号
#######基本查询语句结束#######接下来是排序#######
Ordre by 排序:asc升序(默认的) desc:降序 *放在sql语句的最后
#######排序结束#######接下来是函数#######
一、字符函数
upper() 小写字母变大写 ·select upper(‘smith’) from dual; 必须 加上from
·select * from emp where ename =upper(‘smith’);
lower() 大写字母变小写 ·select lower(‘HELLO WORLD’) from dual;
initcap() 开头字母大写 ·select initcap(‘HELLO WORLD’) from dual;
·select initcap(ename) from emp;
*字符串除了可以使用||来连接。 还可以使用concat();函数来进行连接
·select concat(‘hellow’,'world’) from dual;
可以进行字符串截取,求字符串长度。进行指定内容替换
·字符串截取:substr(); substr 的截取点是从0或者是1效果都是一样的(Oracle)
Oracle 中 可以输入负值 来倒着截取。
·select ename ,substr(ename,-3,3) from emp;
·字符串长度:length();
·内容替换: replace();
_________________范例_______________
select substr(‘hello’,1,3) 截取字符串,
length(‘hello’) 字符串长度,
replace(‘hello’,'l’,'x’) 字符串替换
from dual;
________________________________________
二、数值函数
·四舍五入 :round(); 可以指定四舍五入位数select round(789.546,-2) from dual;
负值对整数进行操作。 正值是小数
·截断小数位 :trunc();
·取余(取模):mod
三、日期函数
·日期-数字=日期
·日期+数字=日期
·日期-日期=数字(天数)
·months_between();求出指定日期范围的月数
·add_months();在制定日期加上制定的月数,求出之后的日期
·next_day();下一个的今天是哪一个日期
·last_day();求出给定日期的月最后一天的日期
当前日期 sysdate关键字 范例: select sysdate from dual;
四、转换函数
·to_char(): 转换成字符串
·通配符:·年:yyyy
·月:mm
·日:dd
·to_number(): 转换成数字
·to_date(): 转换成日期
五、通用函数
·nvl(字段,0) 如果字段里面的值是空 就按照0显示
__________________________范例__________________________
select empno,ename,(nvl(sal,0)+nvl(comm,0))*12 from emp;
________________________________________________________
·decode 类似if(){}else{}
__________________________范例_________________________________
1·select decode(1,1,’内容是1′,2,’内容是2′,3,’内容是3′) from dual;
2·select empno 编号, ename 姓名 , HIREDATE 日期,decode
(
job,’CLERK’,'业务员’,'SALESMAN’,'销售经理’,
‘MANAGER’,'经理’,'ANALYST’,'分析员’,
‘PRESIDENT’,'总裁’
) 职业
from emp;
_______________________________________________________________
#######函数结束#######接下来是多表查询#######
1·基础语句
*在使用多表查询的时候会出现笛卡尔积,如果表的数据越多,那么笛卡尔积也就会越大。
比如一张表有1W条记录,就有1W的五次方条记录。(出现的原因是有关联字段)
*在多表查询的时候加入where语句,就能消除笛卡尔积。
一般会为表取别名 别名范例: select * from emp e ,dept d where e.deptno=d.deptno;
***范例(难题)**
问题:求出雇员姓名,工资,部门名称,工资等级,上级领导名字,领导的工资,领导的工资等级。
__________________________________________________________________________________________
select e.ename 雇员姓名,e.sal 工资,d.dname 部门名称,
decode(s.grade,’1′,’第五等工资’,’2′,’第四等工资’,’3′,’第三等工资’,’4′,’第二等工资’ ,’5′,’第五等工资’) 工资等级,
m.ename 上级领导名字,m.sal 领导的工资,
decode(ms.grade,’1′,’第五等工资’,’2′,’第四等工资’,’3′,’第三等工资’,’4′,’第二等工资’ ,’5′,’第五等工资’)领导的工资等级
from emp e, dept d ,salgrade s ,emp m,salgrade ms
where e.deptno =d.deptno and
e.sal between s.losal and s.hisal