sql语句复习(一)

在oracle中默认大写,如果不加双引号的话,emp会被转换成大写,进行查询
SELECT * from “emp”
numberic(5,2)5位有效数字,2为小数部分
oracle中的不等于号
<> != ^= ~=

escape ‘escape_character’ 关键字,允许在字符串中搜索通配符,而不将其作为通配符
escape_character 是放在通配符前表示此特殊用途的字符。
select * from a WHERE name LIKE ‘%/%ab’ ESCAPE ‘/’

例如
SUBSTR(str,start,length)
字符串截取函数,从0与从1截取的效果是一样的,可以理解为全闭区间的集合,从1开始索引
substr函数中start规定起点,length规定截取长度
例如:substr(str,1,2)截取前两个字符,
substr(str,-3,3)字符串末尾的三个字符

instr:是否包含某个字符,从第一个位置开始,第几次出现的位置

对数字的处理:
四舍五入:round
截断小数位:trunc
取余:mod
ceil:求大于等于某数的最小整数
floor:求小于等于某数的最大整数

sql中日期
AM PM
Y,YY,YYY,YYYY
MM,MON,MONTH
DD
D,DY,DAY
HH,HH12,HH24
MI
SS
MI代表分钟,HH24表示24计时

将数字转字符串
to_date,to_number

处理NULL值
使用nvl函数

DECODE函数,相当if。。。else if。。。

两个表之间做链接

右连接
SELECT E.EMPNO,ENAME,ENAME123 FROM EMP E RIGHT JOIN EMP1 ON(E.EMPNO=EMP1.EMPNO)
SELECT E.EMPNO,ENAME,ENAME123 FROM EMP E,EMP1 WHERE E.EMPNO(+)=EMP1.EMPNO
同理可推出左链接

集合操作:
1. 并集 union vs. union all
union:没有重复记录
union all:包含重复记录,但效率高

  1. 交集 intersect
    返回两个结果集的交集

  2. 差集 minus
    返回连个结果集的差集

case语句

3.以首字母大写的方式显示所有员工的姓名.

SELECT SUBSTR(UPPER(ENAME),1,1)||SUBSTR(ENAME,2,LENGTH(ENAME)-1) FROM EMP;

显示所有员工的姓名,用a替换所有”A”.
4.显示正好为5个字符的员工的姓名.

19、找出早于12年前受雇的员工
select * from emp where months_between(sysdate,hiredate)/12 >12;

26、以年月日的方式显示所有员工的服务年限(大截)(一个月30天)
select hiredate,trunc((sysdate-hiredate)/365) 年,
trunc(mod((sysdate-hiredate),365)/30) 月,
trunc( mod (mod((sysdate-hiredate),365),30) ) 日
from emp;

你可能感兴趣的:(数据库,面试)