1.查询语句时,字符串大小写敏感
如:查询名叫KING的员工信息
select * from emp where ename = 'KING';
select * from emp where ename = 'king';
查询的结果会不一样
2.日期格式敏感(重点)
查询入职日期为17-11月-81的员工
select * from emp where hiredate='17-11月-81'; --- 这里采用了隐式转换 把字符串转换成日期格式
select * from emp where hiredate='1981-11-17';
查询的结果会不一样
Oracle 9i之前,日期格式: DD-MON-YY 导致1998 --> 98,2098 --> 98出现千年重问题
Oracle 9i之后,日期格式: DD-MON-RR 底层采用复杂的算法实现
3.查看当前时间: select sysdate from dual;
4.查询系统参数: select * from v$nls_parameters;
5.修改Oracle日期格式
alter session set NLS_DATE_FORMAT='yyyy-mm-dd';
因为当前用户为scott,所以要指定session,这样只对当前用户的日期格式进行转变,如果要改变整个Oracle默认 的格式,则需要sys管理员登入来修改
6.如果集合中含义null值,不能使用not in操作符;但可以使用in
7.escape转义字符
例:查询名字中含有下划线的员工
select * from emp where ename like '%\_%' escape '\'
select * from emp where ename like '%a_%' escape 'a'
8.Oracle中默认是自动开启事务的,无需像Mysql那样手动开启事务,可以在进行增删改查后手动进行rollback
9.SQL优化:使用and or条件查询时,2个条件查询的解析顺序: 从右至左
方案一:使用and时,把更有可能不符合的条件放在and之右
方案二:使用or时,把更有可能符合的条件放在or之右
10.a命令意思为:append 例: a desc 中间必须包含>=2个空格 用意在与在之前的sql语句末尾追加' desc'。
11.order by 后面 + 列名, 表达式, 别名, 序号
select ename,sal,comm,sal*12+nvl(comm,0) from emp order by sal*12+nvl(comm,0);
select ename,sal,comm,sal*12+nvl(comm,0) 年收入 from emp order by 年收入
select ename,sal,comm,sal*12+nvl(comm,0) 年收入 from emp order by 4
12.order by跟多列:作用于后面所有的列
select * from emp order by deptno,sal;
select * from emp order by deptno,sal desc -->desc作用与离他最近的一列,也就是sal,对deptno无作用
select * from emp order by deptno desc,sal desc
13.按奖金降序查询所有员工信息
select * from emp order by comm desc
select * from emp order by comm desc nulls last --- 把奖金为null的行排在后面