16.一些命令
1)distinct (去掉重复行)
SQL> select distinct * from scott.emp;
2)desc / describe(显示表结构)
SQL> desc scott.emp;
SQL> describe scott.emp;
3)upper (显示所有字符都大写)
SQL> select upper(ename) from scott.emp;
4)lower (显示所有字符都小写)
SQL> select lower(ename) from scott.emp;
5)initcap (显示首字母大写,别的字母小写)
SQL> select initcap(ename) from scott.emp;
6)concat (连接字符串,等效于”||”)
SQL> select concat('My name is ','anmei') from dual;
CONCAT('MYNAMEIS
----------------
My name is anmei
7)substr (求子串)
//求从第3个字母开始的前3个字符
SQL> select substr('abcdefgh',2,3) from dual;
SUB
---
bcd
//求最后两个字符
SQL> select substr('tarenasd0603',-2) from dual;
SU
--
03
8)length (求字符长度)
//空格也算上长度内
SQL> select length('ipweoopijfsdu 4196416 161 ') from dual;
LENGTH('IPWEOOPIJFSDU4196416161')
---------------------------------
26
SQL> select length('ipweoopijfsdu4196416161') from dual;
LENGTH('IPWEOOPIJFSDU4196416161')
---------------------------------
23
9)instr (字符串内所查找字符第一次出现的位置)
SQL> select instr('abdcefabdcef','d') from dual;
INSTR('ABDCEFABDCEF','D')
-------------------------
3
10)lpad | rpad
1))lpad (在字符串左边增加所给的字符f,直到规定的长度10)
SQL> select lpad('abcde',10,'f') from dual;
LPAD('ABCD
----------
fffffabcde
2))rpad(在字符串右边增加所给的字符f,直到规定的长度10)
SQL> select rpad('abcde',10,'f') from dual;
RPAD('ABCD
----------
abcdefffff
11)trim
1))trim去掉空格
SQL> select trim(' aaaaaaaaaaaa ') from dual;
TRIM('AAAAAA
------------
aaaaaaaaaaaa
2))ltrim删除左边的字符串
SQL> select ltrim('aaabbbbbccccccc','a') from dual;
LTRIM('AAABB
------------
bbbbbccccccc
3))rtrim删除右边的字符串
SQL> select rtrim('aaaaabbbbbbbbcccccccc','c') from dual;
RTRIM('AAAAAB
-------------
aaaaabbbbbbbb
4))trim删除两边的字符串
SQL> select trim('a' from 'aabbbccccaaaaaa') from dual;
TRIM('A
-------
bbbcccc
12)replace [replace(字符串,要替换的字符串,替换的字符串)]
SQL> select replace('aabbccddee','bb','ff') from dual;
REPLACE('A
----------
aaffccddee
13)round 数值函数(四舍五入成整数)
SQL> select round(-12.356) from dual;
ROUND(-12.356)
--------------
-12
14)trunc 数值函数(截取,不管后面的数字)(相当于保留小数点后几位有效数字)
SQL> select trunc(-12.356,1) from dual;
TRUNC(-12.356,1)
----------------
-12.3
SQL> select trunc(-12.356,2) from dual;
TRUNC(-12.356,2)
----------------
-12.35
15)mod (求模,如果被除数为0,则返回除数)
SQL> select mod(5,0) from dual;
MOD(5,0)
----------
5
SQL> select mod(5,1) from dual;
MOD(5,1)
----------
0
SQL> select mod(5,3) from dual;
MOD(5,3)
----------
2
17.order by 按某几个字段排序(默认为升序ASC)
SQL> select * from emp order by ename ASC,job DESC,sal;
SQL> select * from emp order by 3; (3表示表中的第三个字段)
18.where 选择操作
where条件一定是根据某个字段来进行过滤操作.
SQL> select * from emp where sal>2000;
1)between and(在..之间)
SQL> select * from emp where sal between 1500 and 3000;
2)in(list) (在某个集合中)
SQL> select * from emp where sal in(2000,3000);
3)is null; and; or; any; link;
19.日期显示
内置函数:
months_between(sysdate,addmonth(sysdate,5)) //两个月有多少天。
add_months(sysdate,-5) 在系统时间基础上延迟5月
add_months(sysdate,-5*12) 在系统时间基础上延迟5年
last_day(sysdate) 一个月最后一天
next_day(sysdate,’Friday’) 下个星期星期几。
round (sysdate,’day’) 不是四除五入了,是过了中午留下,不过的略掉
trunc(sysdate,’month’) 不到一月都省略
20.格式转换
1)to_char
1))显示日期
SQL> select to_char(sysdate, 'yyyy mm dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2009 05 05 13:13:21
2))转换数字
SQL> select to_char(99,'0000') from dual;
TO_CH
-----
0099
2)to_date表达日期
SQL> select to_date('2009 05 05','yyyy mm dd') from dual;
TO_DATE('2
----------
05-5月 -09
3)to_number 字符转数字
SQL> select to_number('10') from dual;
TO_NUMBER('10')
---------------
10
21.组函数
1))group by 分组子句,对分组后的子句进行过滤;还可以用having条件对分组后的条件进行过滤,但having子句中不能用列别名;where是对记录进行过滤
SQL> select sal gsal from emp group by sal;
group by 子句后面跟有条件只能是组函数查询的结果中的字段,所以我们会人为在结果要加入一些group by要用的字段。group by 后面紧接着的那个字段必须是查找结果中第一个显示的字段列(别名)。(有待验证,目前认为是这样)
SQL> select max(empno) mempno,avg(sal) from emp group by empno;
group by 子句中where和having的使用
SQL> select empno,avg(sal) asal from emp group by empno having avg(sal)>1500;
EMPNO ASAL
---------- ----------
7499 1600
7566 2975
7698 2850
7782 2450
7788 3000
7839 5000
7902 3000
SQL> select empno,avg(sal) asal from emp where sal>1500 group by empno;
EMPNO ASAL
---------- ----------
7499 1600
7566 2975
7698 2850
7782 2450
7788 3000
7839 5000
7902 3000
2))avg(distinct | all )求平均值
SQL> select avg(sal) asal from emp ;
3))count(distinct | all )统计
SQL> select count(sal) asal from emp;
4))max(distinct | all ) 求最大值
SQL> select max(empno),count(*) from emp;
MAX(EMPNO) COUNT(*)
---------- ----------
7934 14
5))min(distinct | all )求最小值
6))sum(distinct | all ) 求和
22.check约束
SQL> create table mytable(
2 mno number(7) check(mno>1000),
3 mname varchar2(20),
4 msal number(10) check(msal<1000000));
表已创建。
此表中要求mno的值必须要大于1000 ,msal的值要小于1000000才为有效值。
23.视图
1)建立视图
SQL> create view myview
2 as select empno,ename,job,deptno from emp;
此时往表emp(base table 基表)中插入数据时:表中没能变化,示图中的数据发生改变
从示图中插数据时相对应的表会发生改变:
往示图中插数据时,会直接插进基表中,查看示图中的数据时,相当于就是执行创建时的select语句。
简单示图:能进行DML操作。
复杂示图:来源于多张表,不能执行DML操作。
24.索引
哪些字段应该建索引:
经常要用where的子句的地方,所以要用索引.用不用索引,关键要看所查询的数据与所有数据的百分比,表越大,查询的记录越少,索引的效率最高.
1) 创建索引
SQL> create index myindex on mytable(empno);
索引已创建。
//使用索引
SQL> select * /*+index(myindex)*/ from mytable;
25.数据存诸在不同的表空间中 (表分区)
1)建立表空间
SQL> create tablespace space1
2 datafile 'E:/oracle/oradata/Oracle9i/space1.dbf'
3 size 5M;
表空间已创建。
SQL> create tablespace space2
2 datafile 'E:/oracle/oradata/Oracle9i/space2.dbf'
3 size 5M;
表空间已创建。
SQL> create tablespace space3
2 datafile 'E:/oracle/oradata/Oracle9i/space3.dbf'
3 size 5M;
表空间已创建。
2)建立表并分配表空间
SQL> create table mytable(
2 mno number(7) primary key,
3 mname varchar2(20))
4 partition by range(mno)
5 (partition p1 values less than(3) tablespace space1,
6 partition p2 values less than(5) tablespace space2,
7 partition p3 values less than(maxvalue) tablespace space3);
表已创建。
3)查找(先插值再进行查找)
SQL> select * from mytable partition(p1);
MNO MNAME
---------- --------------------
1 a
2 b
SQL> select * from mytable partition(p2);
MNO MNAME
---------- --------------------
3 c
4 d
SQL> select * from mytable partition(p3);
MNO MNAME
---------- --------------------
5 e
6 f
7 g
8 h
9 i
10 j
11 k
12 l
已选择8行。
26.范式
1NF:去掉重复的数据流,使数据不可再分。
2NF:按函数依赖与否使集合分为若干子集,在每个表中找到一个键,能决定其他数据项做为主键。
3NF:去掉数据冗余。
27.savepoint 保存点
1)创建保存点
SQL> savepoint mark1;
保存点已创建。
2) 返回到保存点
SQL> rollback to savepoint mark1;
回退已完成。
3)
SQL> rollback;
回退已完成。