SQL查询2

左心房为你撑大大i 提交于 2020-01-25 09:46:33

类型转换

-- dual用于测试

select * from dual;

 

-- 1.字符串连接

select concat('aa','12') from dual;

select 'aa'||'12' from dual;

 

-- 2.首字母大写

select initcap('abc') from dual;

--- 把大写转化小写

select lower('ABc') from dual;

select upper('abc') from dual;

 

-- 把所有员工的姓名小写输出

select lower(e.ename),e.empno

from emp e

 

-- 3.填充字符lpad/rpad

select lpad('sxt',5,'*') from dual;

select rpad('sxt',5,'*') from dual;

 

-- 4.去掉空白字符

select '  kallen' from dual;

select ltrim('  kallen',' ') from dual;

select rtrim('  kallen  ',' ') from dual;

-- trim 删除左右两边的字符

select trim('a' from 'abc') from dual;

 

-- 5.求子串 substr(str,loc,len)-->loc从1开始

select substr('abcd',2,2) from dual;

 

-- 6.查找字符串

/*

如果找到返回>=1的索引;如果没找到返回0

*/

select instr('abcd','b') from dual;

 

-- 7.求长度

select length('abcd') from dual;

格式化电话号码:

1)select substr('18612341234',1,3)||'-'||substr('18612341234',4,4)||'-'||substr('18612341234',8,4)from dual;

2)-- 需求:18612341234格式化成186-1234-1234

select replace(to_char(18612341234,'999,9999,9999'),',','-') from dual;

decode(条件,值1,“返回值1”, 值2,“返回值2”,,,“默认值”)

1)-- 需求:查询员工所在的部门名称

select

e.ename,

e.deptno,

decode(e.deptno,10,'部门1',20,'部门2',30,'部门3','未知')

from emp e;

2)case when

--根据工资分布输出
select
e.ename "姓名",e.sal"工资",
case
when e.sal <1000 then '底底层'
when e.sal <2000 then '底层'
when e.sal <3000 then '办公室'
when e.sal <5000 then '白领'
when e.sal <10000 then '高层'
else'未知'
end "描述"
from emp e
order by "工资"

注意:decode 多用于等值匹配;case when可以用于等值,多用于条件分支。

 

分组(group by)

在处理聚合函数时,需要对数据进行数据分组可以用:

select field1,...

from tableName

group by field1[,field2,…]

注意:对数据进行分组后,select语句的字段值只能是分组字段或者聚合函数。

例子:

--部门10的人数
select count(1)
from emp e
where e.deptno = 10;

--各个部门的人数
select e.deptno,count(1)
from emp e
group by e.deptno;

--求各个部门的月收入平均值
select e.deptno,avg(e.sal+nvl(e.comm,0)) "月收入平均值"
from emp e
group by e.deptno;

 

多表连接:

--多表关联
select *
from emp,dept;

--等值相连
select *
from emp e,dept d
where e.deptno = d.deptno;

--不等值相连
select *
from emp e,salgrade s
where e.sal >= s.losal and e.sal <= s.hisal

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!