日期:2014-05-16  浏览次数:20678 次

转载的Oracle笔记
1、http://127.0.0.1:5560/isqlplus/ 访问自己的或者别人的oracle。
2、isqlplus不用装客户端也行。
3、sqlplus sys/bjsxt as sysdba
4、desc emp/dept/salgrade;//显示表结构
5、select sysdate from dual;//显示日期
6、select a*12 "nihao Y" from dual;//别名中有空格用双引号
7、select emname||'aa' from emp;//连接字符
8、select 'wo'||'a''a' from emp;两个单引号代表一个一个点印单引号,返回结果为woa'a
9、select distict a from dual;
10、select name from dual where name is null//空值查找。
11、select name from dual where name like '%a%'//包含a的所有name,like ‘%\%%’包含%的name。 /为转义字符
12、自己定义转义字符
select name from dual where name like '%$%%' escape'$'//name里包含%的纪录,并定义了$为转义字符。
13、select name from dual order by id desc/asc ;--按降序/升序排列
14、select name from dual order by id desc,age asc;--先按id降序排列再按age升序排列。
15、select lower(name) from dual;--name 都小写
16、select substr(name,2,3)from dual;--把name从第二个字母开始截取3个字符。
17、select chr(65)from dual;--转换成A
18、slect ascii(‘A’)from dual;--转换成ascii码65;
19、select to_char(sal,$99,999,9999)from emp
--结果$800.0000 ,$1,600.0000。如果把$换成L则输出¥800.0000 ,¥1,600.0000。如果把99,999,9999换成00,000,0000则输出为$00800.0000,$01,600.0000
20、select to_char(sysdate,'yyyy-mm-dd hh:mi:ss')from dual ;--格式化时间,hh为12进制小时,hh24为24进制小时。
21、select hierdate wehre hierdate> to_date('1981-2-30 12:34:51','yyyy-m-dd hh24:mi:ss');--格式化特定字符串为日期
22、select sal from emp where sal >to_number('$1,250.00','$9,999,00');
23、select to_char (12.356,'999,99') from dual;--12.35
  select round(12.356,'999,99') from dual;--12.36
24、组函数:sum avg count max min
25、select count(name)from emp;--统计name不为null的纪录数。

----------------------------------
1、select deptno,max(sal) from emp group by deptno where deptno=10;--不对,设计分组的条件必须用having而不能用where。
2、一条综合查询
select avg(sal)
  from emp
where sal > 1200 --重点
group by deptno
having avg(sal) > 2000
order by avg(sal) desc
3、select ename
  from emp
where sal in (select max(sal) from emp group by deptno) ;--条件返回多条值 ,肯定会出错,因为sal满足的是in后()内的多条值中的一条即可。
4、sql1992不支持全外连接,sql1999支持
select ename,dname from emp e full join dept d on (e.deptno=d.deptno);--把全部记录输出,相当于同时用了左右连接。
5、笛卡尔积出现的例子
  select ename,dname from emp,dept;--没有where条件,输出笛卡尔积
6、不用组函数求最高工资
select sal
  from emp
where sal not in
       (select distinct (e1.sal) from emp e1, emp e2 where e1.sal < e2.sal)
7、可以把一个很长的sql当作一个view

  求部门平均工资等级最低的部门名称
select dname
  from dept
where deptno =
       (select deptno
          from (select avg(grade) avgrade, deptno
                  from (select e.sal, s.grade, e.deptno
                          from emp e, salgrade s
                         where e.sal between s.losal and s.hisal)
                 group by deptno)
         where avgrade =
               (select min(avgrade) avgrade
                  from (select avg(grade) avgrade, deptno
                          from (select e.sal, s.grade, e.deptno
    &n