数据库总结[之四](Oracle)

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;

  4lower (显示所有字符都小写)

SQL> select lower(ename) from scott.emp;

  5initcap (显示首字母大写,别的字母小写)

SQL> select initcap(ename) from scott.emp;

  6concat (连接字符串,等效于”||”

SQL> select concat('My name is ','anmei') from dual;

 

CONCAT('MYNAMEIS

----------------

My name is anmei

 

  7substr (求子串)

//求从第3个字母开始的前3个字符

SQL> select substr('abcdefgh',2,3) from dual;

SUB

---

bcd

 

//求最后两个字符

SQL> select substr('tarenasd0603',-2) from dual;

 

SU

--

03

  8length 求字符长度

//空格也算上长度内

SQL> select length('ipweoopijfsdu 4196416 161 ') from dual;

LENGTH('IPWEOOPIJFSDU4196416161')

---------------------------------

                               26

 

SQL> select length('ipweoopijfsdu4196416161') from dual;

LENGTH('IPWEOOPIJFSDU4196416161')

---------------------------------

                               23

 

  9instr (字符串内所查找字符第一次出现的位置)

SQL> select instr('abdcefabdcef','d') from dual;

INSTR('ABDCEFABDCEF','D')

-------------------------

                        3

 

  10lpad | 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

 

  11trim

      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

 

  12replace replace(字符串,要替换的字符串,替换的字符串)

SQL> select replace('aabbccddee','bb','ff') from dual;

REPLACE('A

----------

aaffccddee

 

  13round 数值函数(四舍五入成整数)

SQL> select round(-12.356) from dual;

ROUND(-12.356)

--------------

           -12

 

  14trunc 数值函数(截取,不管后面的数字)(相当于保留小数点后几位有效数字)

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

 

  15mod (求模,如果被除数为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

 

17order by 按某几个字段排序(默认为升序ASC

SQL> select * from emp order by ename ASC,job DESC,sal;

 

SQL> select * from emp order by 3; 3表示表中的第三个字段)

 

18where 选择操作

where条件一定是根据某个字段来进行过滤操作.

SQL> select * from emp where sal>2000;

1between and(在..之间)

SQL> select * from emp where sal between 1500 and 3000;

    2in(list) (在某个集合中)

SQL> select * from emp where sal in(2000,3000);

    3is null; and; or; any; link;

 

19.日期显示

内置函数:

months_betweensysdate,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.格式转换

1to_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

 

    2to_date表达日期

SQL> select to_date('2009 05 05','yyyy mm dd') from dual;

TO_DATE('2

----------

05-5 -09

 

    3to_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 子句中wherehaving的使用

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 ) 求和

 

22check约束

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;

 

此时往表empbase 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:去掉数据冗余。

 

27savepoint 保存点

1)创建保存点

SQL> savepoint mark1;

保存点已创建。

 

2) 返回到保存点

SQL> rollback to savepoint mark1;

回退已完成。

 

3

SQL> rollback;

回退已完成。

你可能感兴趣的:(Java技术~~~~~)