posts - 0, comments - 77, trackbacks - 0, articles - 356
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          oracle sql語句精講

          Posted on 2007-08-23 09:29 semovy 閱讀(471) 評論(0)  編輯  收藏 所屬分類: Oracle數據庫方面
          表 :建立表主要指定義下列信息:
               列定義
               完整性約束
               表所在表空間
               存儲特性
               可選擇的聚集
               從一查詢獲得數據
          語法如下:
          CREATE TABLE tablename (column1 datatype [DEFAULT expression] [constraint], column1 datatype [DEFAULT expression] [constraint], ……)
               例如:
               SQL> create table serv (serv_id number(10),serv_seq_nbr number(3))
          2      tablespace data_bill;
          視圖
          視圖是一個邏輯表,它允許操作者從其它表或視圖存取數據,視圖本身不包含數據。視圖所基于的表稱為基表。
          引入視圖有下列作用:
               提供附加的表安全級,限制存取基表的行或/和列集合。
               隱藏數據復雜性。
               為數據提供另一種觀點。
               促使ORACLE的某些操作在包含視圖的數據庫上執行,而不在另一個數據庫上執行。
          2.1分組視圖
          [例1]簡單的分組視圖
          SQL> create or replace view dept_tot as
          2 select a.dname dept,sum(b.sal) total_sal from scott.dept a,scott.emp b
          3 where a.deptno=b.deptno group by a.dname;

          查看已建立。
          SQL> select * from dept_tot;

          DEPT                   TOTAL_SAL
          --------------               ---------
          ACCOUNTING       8750
          RESEARCH         10875
          SALES                 9400
          [例2]合計視圖
          [例]合計函數視圖實例
          SQL> create or replace view emp_no1 as
          2 select deptno,sum(sal) 工資和,sum(comm) 總和
          3 from scott.emp group by deptno;
          SQL> select * from emp_no1;
          DEPTNO   工資和     總和
          --------- --------- ---------
              10     8750
              20   10875
          30     9400     2200
          索引
          索引是種數據庫對象。對于在表或聚集的索引列上的每一值將包含一項,為行提供直接的快速存取。在下列情況ORACLE可利用索引改進性能:
               按指定的索引列的值查找行。
               按索引列的順序存取表。
          語法:
          create index <index_name> on <table_name(column1,column2…)>
          [storage語句] [其它語句];
          例如:
          SQL> create index idx_serv_01 on serv(srev_id,serv_seq_nbr)
          2   tablespace data_bill_idx
          3   storage (initial 5m next 5m);
          存儲函數
          語法:
          create [or replace] function 函數名(參數1,參數2……) RETURN 類型 IS | AS
               [局部變量說明]
               BEGIN
                     執行語句;
               END;
          [例子]:
          建立oracle 的函數
          create or replace FUNCTION SumDeptSalary(dept_no in number)
          return number is
              total number(11,2);
          begin
          select sum(sal) into total from emp where deptno=dept_no;
          return(total);
          end;
          存儲過程
          語法:
          create [or replace] procedure 函數名(參數1,參數2……) IS | AS
               [局部變量說明]
               BEGIN
                     執行語句;
               END;
          [例子]
          過程的輸入、輸出參數的用例
          create or replace procedure RaiseSalary(RaiseRate in number,empnum in number,
          outname out varchar2,outsal out number) is
          begin
          update emp set sal=sal*(1+RaiseRate);
          select ename into outname from emp where empno=empnum;
          select sal into outsal from emp where empno=empnum;
          end;
          函數pl/sql 中的過程參數調用示例
          set serveroutput on; //顯示變量值的屬性
          declare name varchar2(10);sal number;
          begin
          RaiseSalary(0.05,7566,name,sal);
          dbms_output.put_line(name);
          dbms_output.put_line(sal);
          end;:
          查找系統時間

          select sysdate from dual;
          系統日期的格式轉換
          select to_char(sysdate,'MM/DD/YYYY HH:MM:SS AM') from dual;
          分解日期
          年 select to_char(sysdate,'year') from dual;
          月 select to_char(sysdate,'mon') from dual;
          月中第幾日 select to_char(sysdate,'dd') from dual;
          一年中的第幾星期 select to_char(sysdate,'ww') from dual;
          季度 select to_char(sysdate,'q') from dual;
          一年中的第幾天 select to_char(sysdate,'ddd') from dual;
          查詢時間
          testdate1 date
          select * from testdate where to_char(trunc(testdate1),'yyyy/mm/dd')='2001/04/09'
          oracle 中使用trunc()函數把所有日期的時間值設置為12:00AM,消除sysdata中的時間
          trunc()函數可進行時間加減
          在select中日期相減得出天數
          select trunc(sysdate)-trunc(hiredate) from emp where trunc(sysdate)-trunc(hiredate)>5000;
          case 語句使用decode()函數替代

          例如:select decode(deptno,10,'十',20,'二十',30,'三十') as chinesecode from emp;
                      列名   值 表示值
          decode列乘積的應用
          decode(Yjtx.Lb,0,Yprckmx.Ypsl*Xmxx.Xmpzlbl,1,Yprckmx.Ypsl*Xmxx.Xmpzlbl,2,Yprckmx.Ypsl) as Ypsl
          使用decode函數計算
          select sum(decode(deptno,20,1))-sum(decode(deptno,30,1)) as d from emp;

          偽列
          偽列不是表中真正的列,只是特征與列相同
          ---currval和nextval偽列
          currval和nextval偽列與序列聯合使用。currval偽列返回被引用的序列的當前值;
          nextval偽列增加序列的值,并返回序列的新值。只能用于select values 子句和set 子句
          表中主鍵列增加流水值
          insert into employee
          values(emp_id_seq.nextval,'stanton bernard');
          emp_id_seq為序列
          ---rownum偽列
          rownum偽列指出從表中檢索數據的次序。例如,值為1的rownum表明該記錄是從表中檢索的第一條記錄。
          rownum偽列最常見的用途是用于where子句。例如
          select * from emp where rownum <10;
          建立bh流水序列值
          create sequence seqczyqx
          start with 1
          increment by 1
          nocycle;
          生成表中沒有的列的方法
          select 'testchar' as dd,sysdate deptno from emp,dual;
              字符值   列名
          select 2342345234 as dd,sysdate deptno from emp,dual;
              數值     列名
          ________________________________________________________________________
          返回字符串的一部分
          select substr(ename,1,2) from emp;
          -----------------------------------------------------------------------------------集合操作
          select * from emp where deptno in(10,20);
          -----------------------------------------------------------------------------------
          在表中插入常量
          insert into testdate select 1,sysdate,sysdate from dual;
          -----------------------------------------------------------------------------------
          在select中對多個變量賦值
          SELECT SFBL ,DWBL into XMBL,DWBL FROM HZBL WHERE CFLBBM=CFLBBM AND HZLBBM=HZLBBM and Degree=Hzsf;
          -----------------------------------------------------------------------------------
          比較操作中的空問題
          is null;is not null
          使用nvl()函數
          select count(*),nvl(comm_amt,0) from comm;
          nvl函數用'0'值置換comm_amt表列中值為空的所有數據行
          ------------------------------------------------------------------------------
          ·      從另一張表改進得到
          Sql語句:
          Create Table <新表> As
            Select <列的列表> From <舊表>
            Where <約束條件>[可選]
          ·      拷貝表結構
            Create Table <表名> As
            Select <列的列表>From <舊表>
            Where 1=2
          主站蜘蛛池模板: 个旧市| 遂溪县| 宣武区| 额济纳旗| 库尔勒市| 遵化市| 丰台区| 杭锦旗| 绥棱县| 莒南县| 石城县| 彭泽县| 搜索| 平罗县| 平果县| 百色市| 延寿县| 唐山市| 元阳县| 乌审旗| 肇庆市| 徐州市| 喜德县| 闽清县| 马关县| 镇宁| 高密市| 乌鲁木齐市| 成武县| 萨迦县| 略阳县| 临汾市| 南乐县| 利辛县| 随州市| 佛山市| 土默特左旗| 新建县| 金溪县| 卓资县| 屏东市|