断点

每天进步一点点!
posts - 174, comments - 56, trackbacks - 0, articles - 21

DML(data manipulation language)介绍

Posted on 2010-07-11 15:43 断点 阅读(230) 评论(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));



只有注册用户登录后才能发表评论。


网站导航: