所谓笛卡尔积,通俗点说就是指两个集合中任意取出两个元素所构成的组合的集合。假设R中有元组M个,S中有元组N个,则R和S的笛卡尔积中包含的元组数量就是M*N.这个规则可以向多个关系扩展。 所有表连接方式都会先生成临时笛卡尔积表,表示两个表中的每一行数据任意组合。在实际应用中,笛卡尔积本身大多没有实际用处,只有在两个表连接时加上限制条件,才会有实际意义。
24.【上机】完成下面的sql语句,练习表连接,并截图表示出结果。
1.求部门平均薪水的等级 select deptno,salgradewhere 部门平均薪水 between losal and hisal; 2.求平均薪水的等级最低的部门名称 select * from (select deptno,salgrade where 部门平均薪水 between losal and hisal) t where grade=(select min(grade) from (select deptno,salgrade where 部门平均薪水 between losal and hisal) ); 3.求部门经理人中平均薪水最低的部门名称 select t.* from (select t.*,avg(sal) 经理人平均薪水 from emp where job=‘MANAGER‘ group by deptno) t,salgrade where 经理人平均薪水 between losal and hisal) t where grade=(select min(grade) from (select deptno,avg(sal) 经理人平均薪水 from emp where job=‘MANAGER‘ group by deptno)); 4.求薪水最高的前5名雇员 select t.*,rownum from (select rownum,sal from emp order by sal desc) t where rownum<=5; 5.求薪水最高的第6到第10名雇员 select ename,sal from emp order by sal desc) t) ab where rn>5 and rn<=10;
25.Oracle中, union和minus的作用。
Union: 是将两个或者两个以上的结果集合并在一起; Minus: 是从一个结果集中减去一部分结果集。
26.Oracle中, union、 minus和intersect?的作用。
27.【上机】Oracle中,用minus的办法求薪水最高的第6到第10名雇员。
select * from ((select ename,rownum from (select ename,rownum as rn from emp order by sal desc) t where rownum<=10) minus (select ename,rownum as rn2 fromemp order by sal desc) d where rownum<=5)) order by sal desc;
28.【上机】使用create table empCopy as Select * from emp;复制一张新表出来。
29.【上机】为新表增加记录,测试一下。
insert into empCopy values (7787,‘amenda‘,‘secretary‘,7788,to_date(‘1988/04/08‘,‘YYYY/MM/DD‘),3000,1500,10);
30.【上机】将新表中所有人的薪水翻番。
update empCopy set sal=sal*2;
31.【上机】将表中薪水大于5000的人全部删掉。
delete empCopy where sal>5000;
32.truncate和delete有什么区别?
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同: 二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 TRUNCATE TABLE:删除内容不删除定义,释放空间。 DELETE TABLE:删除内容不删除定义,不释放空间。
33.【上机】练习使用DML语句,完成如下一系列操作:
a)创建班级表: id为主键 班级名称 班级成立时间 班级毕业时间 班级所在教室 create table sclass( classid number not null primary key, classname varchar(50) not null, classstarttime date not null, classgraduatetime date not null, classroom varchar(50)not null ) b)创建学生表: 建立一张用来存储学生信息的表,表中的字段包含了学生的学号、姓名、年龄、入学日期、年级、班级、email等信息,并且为grade指定了默认值为1,如果在插入数据时不指定grade得值,就代表是一年级的学生. 姓名不能为空。 email必须唯一,不能重复。 id为主键 classId作为外键关联到班级表的主键上。 create table STUDENT ( STUID NUMBER not null, SNAME VARCHAR2(20) not null, AGE NUMBER, SEX VARCHAR2(2), ENTERDATE DATE, CLASSID NUMBER, GRADE VARCHAR2(50) default 1, EMAIL VARCHAR2(50) )
alter table STUDENT add constraint PK_STUID primary key (STUID)
alter table STUDENT add constraint UNIQUE_EMAIL unique (EMAIL) alter table STUDENT add constraint FK_CLASSID foreign key (CLASSID) references CLASSGROUP (CLASSID); c)增加2个班级 insert into sclass values(1,‘百合班‘,to_date(‘2009/08/08‘,to_date(‘2012/08/08‘,‘101‘); insert into sclass values(2,‘牵牛花班‘,to_date(‘2010/08/08‘,to_date(‘2013/08/08‘,‘202‘); d)增加4个学生,并且每个学生都放到相应班级里面 举例: insert into student values(9,‘赵照‘,22,‘男‘,to_date(‘2010/08/09‘,1,‘[email?protected]‘); insert into student values(10,‘孙黎‘,22,‘[email?protected]‘); e)如何删除其中某个班级 (1)先要解除学生表中对班级的外键约束: alter table STUDENT1 drop constraint FK_CLASSID1 (2)删除某个班级,如: delete sclass where classid=1; f)为班级表增加新的字段:教室地址 alter table sclass add address varchar(50) g)删除学生表 drop table student
34.什么是事务?为什么需要事务?(查资料说明)
事务是指作为单个逻辑工作单元执行的一组相关操作,这些操作要求全部完成或者全部不完成。事务使使数据库从一种状态变换成为另一种状态,是数据库所特有的。 使用事务的原因:保证数据的安全有效。
35.说出事务的特点?
事务的特性有四个:简称ACID即 1、原子性(Atomic):事务中所有数据的修改,要么全部执行,要么全部不执行。 2、一致性(Consistence):事务完成时,要使所有的数据都保持一致的状态,换言之:通过事务进行的所有数据修改,必须在所有相关的表中得到反映。 3、隔离性(Isolation):事务应该在另一个事务对数据的修改前或者修改后进行访问。 4、持久性(Durability):保证事务对数据库的修改是持久有效的,即使发生系统故障, 也不应该丢失。
36.一个事务,什么时候开启?什么时候结束?
?
Oracle的事务开始于一个DML(数据库管理语句,如:create、drop、rename、alter)语句。
当以下情况发生时,事务结束:
1、COMMIT/ROLLBACK
2、执行了DDL(数据库定义语句)/DCL(数据库控制语句)语句
3、客户端主动断开数据库的连接(DISCONNECT)
4、数据库关闭(宕机)
另外,一个DDL/DCL语句实际上就是一个事务,其中隐含了COMMIT。
Oracle不需要特别的去指定事务的开始和结束。一个事务的结束就是下一个事务的开始。
37.回退后,是不是指回退到事务执行前数据库的状态? (编辑:广西网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|