oracle的sql:
1.列拼接
select concat(concat(concat(concat(concat('编号是:',empno),'的雇员, 姓名是:'),ename),',工作是:'),job) from emp;
结果:
简单方法:
select '编号是:' || empno || '的雇员, 姓名是:' || ename || ',工作是:' || job from emp;
结果:
2.计算年薪(并去重)
使用nvl(v1,v2)处理空值,v1为空返回V2,不为空返回v1
select ename,sal,comm,sal*12+nvl(comm,0) from emp;
结果:
也可以使用decode
select ename,sal,comm,sal*12+decode(comm,null,0,comm) from emp;
decode(字段或字段的运算,值1,值2,值3)
这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
3.查询入职日期在1984/4/2到1985/1/1的员工信息
select * from emp where hiredate between to_date('1981/4/2','yyyy/mm/dd') and to_date('1985/1/1','yyyy/mm/dd')
结果:
4.将每个雇员的名字的首字母大写。
SELECT INITCAP(ename) FROM emp;
5.求字符串的长度
SELECT ename,LENGTH(ename) FROM emp;
结果:
6.使用字母“_”替换掉姓名中的所有字母“A”
SELECT REPLACE(ename,'A','_') FROM emp;
6.字符串截取substr(员工前三位)——第一各参数为要截取名字的列,第二个参数为开始点,开始列可以指定0或者1都一样。
SELECT ename,SUBSTR(ename,1,3) FROM emp;
SELECT ename,SUBSTR(ename,0,3) FROM emp;
SELECT ename,SUBSTR(ename,-2,1) FROM emp;
7.去除两遍边空格
SELECT ename,trim(ename) FROM emp;
8.保留小数的位数(舍弃内容函数)
select trunc(953.6286,2) from dual;--953.62
9.四舍五入
select round(953.6286,2) from dual; --953.63
10.两个日期的天差数(求出每个雇员到尽头为止的雇佣天数)
SELECT ename,hiredate,SYSDATE-hiredate FROM emp;
select trunc(sysdate-a.hiredate) from emp a;
11.本月的最后一天日期
SELECT LAST_DAY(SYSDATE) FROM dual;
12.两个日期间的月份差(month_between)
SELECT ename,hiredate,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)) FROM emp;
结果:
13.求出4个月之后的日期
SELECT ADD_MONTHS(SYSDATE,4) FROM dual;
14.日期变字符串
select to_char(sysdate,'yyyy-mm-dd') from dual;
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
select to_char(sysdate,'yyyy') from dual;
select to_char(sysdate,'mm') from dual;
15.字符串转日期
SELECT TO_DATE('2017-09-07','yyyy-mm-dd') FROM dual;
SELECT TO_DATE('2017-09-07 11:33:22','yyyy-mm-dd hh:mi:ss') FROM dual;
16.内连接和外链接的区别
内连接与表前后关系没有关系,内连接必须两边同时满足条件才能查询出来
存在的问题:例如部门表和员工表 联合查询,没有员工的部门将会丢失。
外链接:解决内连接的问题
17.子查询:
子查询可以放在select后面、where后面、from后面、in里面、
18.exist
Select * from dept where exists (select * from emp where emp.deptno = dept.deptno)
执行过程:
1、先执行外查询得到结果集。
2、取出结果集的第一行数据
3、将数据带入子查询执行
4、如果子查询有返回结果则外查询的该行数据有效,
如果子查询没有返回结果则外查询的该行放弃显示
5.取下一条继续执行第三部
结论:外边每一行的数据去子查询里找是否存在,里外一定要有关联关系。
19.查询员工前四条
Select rownum,emp.* from emp where rownum<5
20.提取出6到10条记录
select * from (Select rownum rm, t.* from (select * from emp order by sal desc) t) where rm>5 and rm<11
21.授权用户
grant 权限 to 用户
进入system用户给it用户权限
grant connect to it
grant dba to it
22.事务隔离级别
oracle支持后三种隔离级别,默认是read commited