斷點

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

          DML(data manipulation language)介紹

          Posted on 2010-07-11 15:43 斷點 閱讀(241) 評論(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));


          主站蜘蛛池模板: 台安县| 明光市| 柘荣县| 祁连县| 乐都县| 库伦旗| 韶关市| 襄城县| 靖远县| 来凤县| 乐都县| 巴马| 秦皇岛市| 萍乡市| 沙坪坝区| 额尔古纳市| 自贡市| 西充县| 江津市| 辰溪县| 苏尼特左旗| 从化市| 丽水市| 东辽县| 漠河县| 阿克陶县| 商南县| 广昌县| 沛县| 涪陵区| 玛纳斯县| 郑州市| 陇西县| 长葛市| 桂林市| 佛坪县| 射阳县| 双鸭山市| 泸定县| 红原县| 泾川县|