博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Oralce_select

Posted on 2015-09-11 09:25  DBA日志小记  阅读(124)  评论(0编辑  收藏  举报

--简单Select语句

--取出一张表中所有的数据
--从emp中把所有的数据取出来
select * from emp
--取出某些字段的值
--从emp这张表中把雇员编号(empno),雇员姓名(ename),雇员所在部门的编号(deptno)这些数据取出来
select empno,ename,deptno from emp
--包含算术表达式的SQL语句
--从emp这张表中把雇员姓名,以及每位雇员的年薪(简单计算为月薪*12个月)从表中取出来
select ename,sal*12 from emp
--计算2*3
select 2*3 from emp
select 2*3 from dual
desc dual
--取出当前的系统时间
select sysdate from dual

--含有别名的SQL语句
--从emp这张表中把雇员姓名,以及每位雇员的年薪(简单计算为月薪*12个月)从表中取出来,并为第二个字段取一个别名
select ename,sal*12 as annual_sal from emp
select ename ,sal*12 "annaul sal" from emp
select ename,sal*12 "年薪" from emp

--处理含有空值的字段
--从emp这张表中把雇员姓名,以及每位雇员的年收入(简单计算为月薪*12个月+津贴)从表中取出来
select ename,sal*12+comm from emp
select ename,sal ,comm from emp

--处理字符串连接 ||
--从emp这张表中把雇员号,雇员名和他上司的编号取出来。显示成如下格式No:7394 ALLEN and his manager number is 2345
select 'No:'||empno||' '||ename||' and his manager number is '||mgr from emp
--在Select语句中使用单引号
--从emp这张表中把雇员号,雇员名和他上司的编号取出来。显示成如下格式No:7394 ALLEN's manager is 2456
select 'No:'||empno||' '||ename||'''s manager is '||mgr from emp

--消除重复的值
--从emp这张表中把部门号取出来
select distinct deptno from emp
--从emp这张表中把部门号和部门下面的工种取出来
select distinct deptno ,job from emp

 

 

 

 


--使用Where 对数据设定限制条件

--等值判断 =
--显示部门号为10的所有员工的信息
select * from emp where deptno=10
--显示雇员名为KING的所有员工的信息
select * from emp where ename='KING'

--非等值判断 > < >= <= <>
--取出薪水值大于2000的所有雇员的名字和薪水
select ename,sal from emp where sal >2000
--取出雇员名字大于CBA的雇员名字和薪水
select ename,sal from emp where ename >'CBA'
--取出所有部门号不是10的雇员的名字和薪水
select ename,sal from emp where deptno<>10
--取出薪水位于800和1500之间的雇员名字和薪水
select ename,sal from emp where sal>=800 and sal<=1500
select ename,sal from emp where sal between 800 and 1500


--关键字IN 筛选某些值中的一个
--把薪水值是800、1250、1500、2000的雇员名字和薪水从表中取出来
select ename,sal from emp where sal in (800,1250,1500,2000)
--把雇员名是SMITH, ALLEN, KING的雇员名字和薪水从表中取出来
select ename,sal from emp where ename in ('SMITH','ALLEN','KING')

--处理日期
--查询所有在81年2月20号以后入职的员工,把雇员名字和雇佣时间从表中取出来
select ename,hiredate from emp where hiredate>'20-2月-81'

--组合查询 AND、OR、NOT
--查询部门号为10并且薪水>1000的员工,把雇员名字、薪水和部门号从表中取出来
select ename,sal,deptno from emp where deptno=10 and sal>1000
--查询部门号为10或者工作岗位是CLERK的员工,把雇员名字、工种和部门号从表中取出来
select ename,job,deptno from emp where deptno=10 or job='CLERK'
--查询薪水值没有位于800、1500、2000之中的员工,把雇员名字、薪水从表中取出来
select ename,sal from emp where sal not in (800,1500,2000)

--模糊查询 Like % _
--查询名字中含有’ALL’的人员
select ename from emp where ename like '%ALL%'
--查询名字中第二个字母含有‘A’的雇员
select ename from emp where ename like '_A%'

--查询名字中含有‘%’
select ename from emp where ename like '%\%%' escape '\'

 

 

 

 


--使用Order by 对数据进行排序

--查询雇员名和薪水并按照姓名的升序排列
select ename,sal from emp order by ename asc
--查询雇员编号,雇员名和薪水按照雇员编号的升序来排列
select empno,ename,sal from emp order by empno asc
select empno,ename,sal from emp
--查询雇员名和薪水和部门号按照雇员部门号降序来排列
select ename,sal ,deptno from emp order by deptno desc
select ename,sal ,deptno from emp order by deptno
--查询雇员名和薪水和部门号首先按照部门号的升序进行显示,如果部门号相同的情况下,就按照名字的倒序进行排列
select ename,sal,deptno from emp order by deptno ,ename desc

 

 

 

 

--常用的SQL函数

--lower 将字符串全部转换为小写
--查询雇员名中包含A或a的雇员名和薪水
select ename ,sal from emp where lower(ename) like '%a%'

--upper 字符串全部转换为大写
--查询雇员名中包含A或a的雇员名和薪水
select ename,sal from emp where upper(ename) like '%A%'

--substr 字符串中的子串
--求Hello中的前三个字符所组成的字符子串 
--字符的下标从1开始
select substr('Hello',4,2) from dual
--显示雇员表中雇员名的从第2个到最后一个字符
select substr(ename,2) from emp

--chr 与某个ASCII码数值所对应的字符
--求ASCII码数值为65的字符
select chr(65) from dual
--ascii 求一个字符的ASCII码数值
--求A的ASCII码的数值
select ascii('A') from dual

--round 对参数值进行四舍五入
--求23.652四舍五入后的结果
select round(23.652,0) from dual
--求23.652四舍五入到小数点后第2位的结果
select round(23.652,2)from dual
--求23.652四舍五入到十位后的结果
select round(23.652,-1)from dual

--to_char 将数字或日期转换为特定的字符串
--将雇员的薪水表示成美元货币格式
select to_char(sal,'$999,999') from emp
select to_char(sal,'$000,000') from emp
--将雇员的薪水表示成当地货币格式,保留四位小数
select to_char(sal,'L999,999.0000')from emp
--将当前系统日期转换成2005-06-30 19:44:01
--yyyy-MM-dd hh:mm:ss
--YYYY-MM-DD HH24:MI:SS
--26-6月-09
select to_char(sysdate ,'YYYY-MM-DD HH24:MI:SS') from dual
select to_char(sysdate ,'DD-MON-YY') from dual


--to_date 将特定格式的字符串转换为日期格式
--查询1981年3月2日中午以后入职的雇员信息,把雇员名和雇佣时间取出来   2-3月-1981 12:00:00
select ename ,hiredate from emp where hiredate > to_date('2-3月-1981 12:00:00','DD-MON-YYYY HH24:MI:SS')
--to_number 将特定格式的字符串转换成数字格式
--薪水值大于$1,250.00的雇员名和薪水取出来
select ename ,sal from emp where sal>to_number('$1,250.00','$999,999.00')

--nvl 处理空值
--从emp这张表中把雇员姓名,以及每位雇员的年收入(简单计算为月薪*12个月+津贴)从表中取出来
select ename,sal*12+comm from emp
select ename,sal*12+nvl(comm,0) from emp


--avg  求平均值
--max  求最大值
--min  求最小值
--sum  求总和
--求薪水的总和、平均值、最大值和最小值
select sum(sal) from emp
select ename,sum(sal)  from emp
select ename from emp
select sum(sal) from emp
select avg(sal),max(sal),min(sal),sum(sal)  from emp
select round(avg(sal),2) from emp
--count  求记录的数量
--求雇员人数
select count(*) from emp
select count(empno) from emp
--求有津贴的雇员人数
select count(comm)  from emp
--求部门数目
select count(distinct deptno ) from emp

 

 

 

 

 

--使用Group by 对数据进行分组
--计算每个部门的最高薪水
select deptno,max(sal) from emp group by deptno
select deptno from emp group by deptno
--计算每个部门的各个职位的最高薪水
select deptno,job,max(sal)from emp group by deptno,job

--使用Having 对分组进行限制
--将平均薪水大于1000的部门的平均薪水从emp这张表中选出来
select deptno,avg(sal) from emp group by deptno having avg(sal)>1000
 --将部门雇员薪水大于1200且部门平均薪水大于1500的部门号和平均薪水查询出来
select deptno,avg(sal) from emp where sal>1200 group by deptno having avg(sal) >1500

 

 

 

 

--多表连接(SQL1992/SQL1999)
--查询雇员名和他所在地部门名称
select ename,dname from emp ,dept where emp.deptno=dept.deptno
select ename ,deptno from emp
select deptno,dname from dept
select ename,emp.deptno ,dept.deptno,dname from emp,dept

select ename,dname from emp inner join dept on emp.deptno=dept.deptno
select ename,dname from dept join emp on emp.deptno=dept.deptno
select ename,dname from dept left join emp on emp.deptno=dept.deptno

--查询雇员名、薪水和薪水等级
select ename,sal,grade from emp,salgrade where sal between losal and hisal

select ename,sal,grade from emp inner join salgrade on sal between losal and hisal

--求工作职位是’PRESIDENT’的雇员姓名,部门名称和薪水等级查询出来
select emp.ename,dept.dname,salgrade.grade
from emp,dept,salgrade
where emp.job='PRESIDENT'
and emp.deptno=dept.deptno
and  emp.sal between salgrade.losal and salgrade.hisal

select emp.ename,dept.dname,salgrade.grade
from emp
inner join dept on  emp.deptno=dept.deptno
inner join salgrade on  sal between losal and hisal
where emp.job='PRESIDENT'

--求每位员工的姓名,及其上级经理的姓名查询出来
--求员工编号,员工姓名,上司的编号
select t1.ename  emp_name ,t2.ename mgr_name from emp t1,emp t2 where t1.mgr=t2.empno
select t1.ename emp_name,t2.ename mgr_name from emp t1 inner join emp t2 on t1.mgr=t2.empno

 

 

 

 

--在Where语句中使用子查询
--查询有雇员中有哪些人是经理人
select * from emp
select distinct mgr from emp where mgr is not null
select ename from emp where empno in (select distinct mgr from emp where mgr is not null)

--查询有哪些人的薪水是在整个雇员的平均薪水之上
--整个雇员的平均薪水
select avg(sal) from emp
select ename,sal from emp where sal>(select avg(sal) from emp)

--在From子句中使用子查询
--求每个部门平均薪水的等级
--每个部门平均薪水
select * from salgrade
select deptno ,avg(sal) from emp  group by deptno

select t1.deptno,grade
from
(select deptno,avg(sal) avg_sal  from emp group by deptno) t1
inner join salgrade on avg_sal   between losal and hisal

 

 

 


--使用rownum
select empno,rownum from emp
--薪水最高的前5个人
select ename,sal ,rownum from emp
select ename,sal,rownum from emp order by sal desc

select t1.*
from
(select ename,sal from emp order by sal desc) t1
where rownum<=5

--按薪水从高到低排列的第6个到第10个人的信息

select t2.ename,t2.sal
from
  (
  select t1.*,rownum r
    from
    (select ename,sal from emp order by sal desc) t1
  ) t2
where t2.r>=6and t2.r<=10

版权声明:QQ:597507041