斷點

          每天進步一點點!
          posts - 174, comments - 56, trackbacks - 0, articles - 21

          DML(data manipulation language)介紹

          Posted on 2010-07-11 15:43 斷點 閱讀(237) 評論(0)  編輯  收藏 所屬分類: Oracle DBA

          SQL語言共分為四大類:數據查詢語言DQL,數據操縱語言DML,數據定義語言DDL,數據控制語言DCL。

          DML(data manipulation language):它們是SELECT、UPDATE、INSERT、DELETE,就象它的名字一樣,這4條命令是用來對數據庫里的數據進行操作的語言。

          conn sys/sys as sysdba;
          drop user pcisv6 cascade;
          exp --備份scott用戶下的表
          --創建用戶,identified為認證相當是密碼,quota配額就是分配空間。
          create user pcisv6 identified by 11 default tablespace core6 quota 10M on corev6
          grant create session,create table,create view to pcisv6;   --授權,session是用于登錄的
          imp --導入scott用戶下的表

          SELECT:
          select rownum r,ename from emp;    --rownum行數,目前只能使用<、<=, 而沒有直接>、=的寫法。
          select ename, sal     --求薪水最高的前5人
           from (select ename, sal from emp order by sal desc)
           where rownum <= 5;

          --求薪水最高的前6到10人
          select ename,sal,rownum r from emp order by sal desc; --r 排序混亂
          select ename,sal,rownum r from (select ename,sal from emp order by sal desc); --此時r序號按新表排序
          select ename, sal    -- 此處為結果
            from (select ename, sal, rownum r
                    from (select ename, sal from emp order by sal desc))
           where r >= 6
             and r <= 10;


          INSERT:
          insert into dept values(50,'game','bj');    --整條記錄
          rollback;
          create table dept2 as selet * from emp; --創建dept2表
          insert into dept2(deptno,dname) values(60,'game2');    --有選擇的字段插入
          insert into dept2 select * from dept;    --插入一個表, 2個表結構一樣


          UPDATE:
          update emp2 set sal=sal*12,ename=ename||'-' where deptno=10;

          DELETE:
          delete from dept2 where deptno<25;
          rollback;

          TRANSACTION:
          transaction 起始一條dml語句,在commit、rollback時完成。
          transaction 在執行dml后,在其后有執行了ddl、dcl時,事務自動提交。
          在正常退出exit時,事務自動提交。
          在非正常退出時,事務回滾。

          ------------------------------------------------------------
          例子:
          有3個表S,C,SC
          S(SNO,SNAME)代表(學號,姓名)
          C(CNO,CNAME,CTEACHER)代表(課號,課名,教師)
          SC(SNO,CNO,SCGRADE)代表(學號,課號成績)
          問題:
          1,找出沒選過“黎明”老師的所有學生姓名。
          2,列出2門以上(含2門)不及格學生姓名及平均成績。
          3,即學過1號課程有學過2號課所有學生的姓名。
          請用標準SQL語言寫出答案,方言也行(請說明是使用什么方言)。

          1.
          select sname froms
            join sc on (s.sno = sc.sno)
            join c(c.cno = sc.cno)
           where c.cteacher <> 'liming';
          2.
          select sname
           where sno in (select sno
                           from sc
                          where scgrade < 60
                          group by sno
                         having count(*) >= 2);
          3.
          select sname
           where sno in (select sno
                           from sc
                          where cno = 1
                            and sno in (select sno from sc where cno = 2));


          主站蜘蛛池模板: 梁平县| 宜都市| 忻城县| 清远市| 突泉县| 孝义市| 宜州市| 阳新县| 中方县| 德化县| 平阳县| 昔阳县| 绥芬河市| 乌拉特后旗| 寿光市| 板桥市| 京山县| 海晏县| 望江县| 中卫市| 德兴市| 台山市| 航空| 集安市| 安仁县| 德钦县| 阳高县| 浮梁县| 长沙县| 马关县| 德格县| 呼图壁县| 奉化市| 广德县| 辉南县| 黔江区| 五峰| 高台县| 防城港市| 武功县| 四川省|