Oracle Day05 集合與數據處理

 

1.集合sql

  --集合操做: 並集、交集、差session

    select deptno,job,sum(sal) from emp group by deptno,job
    union
    select deptno,to_char(null),sum(sal) from emp group by deptno
    union
    select to_number(null),to_char(null),sum(sal) from emp;oracle

 

 

    select deptno,job,sum(sal) spa

    from emp 內存

    group by rollup(deptno,job);字符串

上述兩種表達結果相同。flash

  -- 集合操做須要注意的事項:it

    1). 集合的全部列應該數量相同,類型相同。io

    2). 集合操做的結果以第一條sql語句的表頭爲表頭。table

    3).集合操做儘可能少用

2.數據處理

  SQL 的類型:
    1). DML : 數據操做語言 insert/update/delete/select
    2). DDL : 數據定義語言 create/alter/drop/truncate
    3). DCL : 數據控制語言 grant(受權) revoke(移除受權)

    -- insert 向表裏面添加一行記錄

      (1)出入一行裏的某些數據

        insert into emp(empno,job,sal) values(2016,'SAL',8000);

      (2)按照表的順序插入一行裏的全部的數據

         insert into emp values(2015,'zhangsan','MANAGER',2016,'18-3月-16',5000,3000,20);

    -- 自定義日期的格式

        alter session set NLS_DATE_FORMAT = 'yyyy-mm-dd';

    -- create 建立一個表

      -- 用模板快速的建立一個表

        create table testemp as select * from emp where 1= 2;

        -- 快速的插入數據

          insert into testemp select * from emp;        -- 批量操做的時候不要加關鍵字

       -- 建立一個沒有模板的表

          create table testemp1(
                    id number(5),
                    name varchar(20),
                    weight number(5,2)
                    );

              -- varchar 和varchar2 均可以用來表示字符串,可是在oracle中推薦用varchar2。varchar是每個字段固定佔N個字節,無論內容是否足夠N個長度;varchar2 會根據內容本身調整他的長度。   

     --delete 刪除數據

        delete from emp where empno=2016 or empno=2015;

        rollback:回滾,若是你刪除錯誤之後能夠用rollback來回滾數據。

          能夠建立一個回滾的節點:savepoint a;

          而後再回滾:rollback to a;

          -- dml 能夠閃回,ddl不能。

     -- 格式化表 truncate

        truncate table testemp;

      delete 和truncate 刪除數據有什麼差異?
        (1). delete 是逐行刪除,truncate是先刪除表,在從新建立一個新表
        (2). delete 可以閃回(flashback),而truncate不能閃回
        (3). delete 不會釋放內存空間,而truncate會
        (4). delete 會產生碎片,而truncate不會
        (5). delete 是DML語句,truncate是一個DDL語句

        (6).delete 不會真正的將數據刪除,它將全部的數據移到一個叫undo表空間裏面。

    -- drop 操做

      drop table testemp;  刪除表 testemp

    -- 事物: 一連串的DML,造成的一個原子操做

       事物何時開啓:
          (1). 顯示的開啓: start transaction
          (2). 隱式開啓: 執行的第一個DML語句
      事物何時關閉:
          (1). 顯示關閉: commit,rollback;
          (2). 隱式關閉
              >> 正常關閉: 執行了一個DDL操做的時候
              >> 非正常關閉: 斷電斷網....

    --導入一個腳本里的sql語句

      格式:  @d:/testdelete.sql;

    -- 打開sql執行的時間
        set timing on
    -- 關閉oracle的回調顯示
        set feedback off;

    -- update 操做

        -- 從emp表更新名字爲KING的工資爲20000
          update emp set sal=10000 where ename='KING';

    --alter 修改表

         -- 在emp中追加一個列 photo,數據類型爲varchar2(20)。

            alter table emp add photo varchar2(20);

        -- 修改photo的字符串長度爲50

            alter table emp modify photo varchar2(50);  

        -- 修改photo這個列的列名爲photos

            alter table testemp10 rename column photo to photos;

        -- 刪除photos

            alter table emp drop column photos;

        -- 修改emp 表名稱

             rename emp to testemp;

        -- 刪除testemp;            drop table testemp;

相關文章
相關標籤/搜索