设某商业集团数据库中有三个实体集。
一是“仓库”实体集,属性有仓库号、仓库名和地址等。二是“商店”实体集,属性有商店号,商店名,地址等,三是“商品”实体集,属性有商品号、商品名,单价(int数据类型)。
设仓库与商品之间存在“库存”联系,每个仓库可存储若干种商品,每种商品存储在若干仓库中,每个仓库每存储一种商品有个日期及存储量;商店与商品之间存在着“销售”联系,每个商店可销售若干种商品;每种商品可在若干商店里销售,每个商店销售一种商品有月份和月销售量两个属性;仓库,商店之间,商品之间存在着“**”联系有月份和月**量2个属性。(1)创建合适的多表及表间关系。
2)为仓库表的仓库名创建一个唯一性约束(3)为商品表的商品名字段添加一个非空约束(4)为商品表添加一个字段生产日期。
5)修改商品表的单价字段类型及长度为number(8,3)
6)为商品表的单价字段添加检查约束,要求单价必须大于20(7)为商店表的地址字段添加位图索引(8)查找所有商品的具体信息。
9)查找所有地址以上海开头的商店名和商店号(11)查找销量》10000的商品名和单价(12)查找每个商品的总**量。
13)创建视图,要求包含每个商品在每个仓库的平均存储量。
-create table ck(cnumchar(10),cname varchar2(20),addr varchar2(50));alter table ck add primary key(cnum);
-create table shop(snumchar(10) primary key,sname varchar2(20),saddr varchar2(50));create table sp(snochar(10),spname varchar2(20),price int);-alter table sp add primary key(sno);
-create table kucun(cnum char(10) references ck(cnum),sno char(10) references sp(sno), kdate date,num number);-alter table kucun add primary key(cnum,sno);
-create table sales(snum char(10) references shop(snum),sno char(10) references sp(sno) ,primary key(snum,sno),-s_month int,m_sales number);
-createtablesupp(cnumchar(10)referencesck(cnum),snumchar(10)referencesshop(snum),snochar(10)references sp(sno),-primary key(cnum,snum,sno),su_month int,qty int);
-alter table ck add constraint uk1 unique(cname);-alter table sp modify spname not null;--alter table sp add sp_date date;
-alter table sp modify price number(8,3);
-alter table sp add constraint ck1 check(price>20);-create bitmap index index_1 on shop(saddr);-select * from sp;
-select snum,sname from shop where saddr like '上海%'
-select spname,price from sp where sno in(select sno from sales where m_sales>10000);-select sno,sum(qty) from supp group by sno;
create or replace view view_1(sno,cnum,**gnum) as
select sno,cnum,**g(num) from kucun group by sno,cnum;
对象:表,约束,索引,视图,序列,同义词,过程,触发器,包,函数(自定义)
索引:用于提高数据的查询效率索引的分类:唯一性和非唯一性平衡数和位图索引单列索引和复合索引函数索引。
考试要点:1:位图索引建立在重复值很多的字段上2:关于复合索引。
例如表a(a,b,c)其中a的值30%重复b10%重复c50%重复要求建立一个位于a,b,c三个字段上的复合索引。
create index index_name on a(b,a,c)重复值少的往前放3:有索引的字段无法参与运算和函数。
函数--函数。
-dual表一行一列。
-select 123556*12356 from dual;--select sysdate from dual;
-select initcap('abcdefg') from dual;--selectupper('good') from dual;--select lower('good') from dual;
-select concat('go','od') from dual;--等价于||连接字符串--select substr('abcdefghijklmn',3,5) from dual;
-select replace('abcdefg','ab','kk') from dual;--如果找不到,原字符串--select lpad('abc',8,'k') from dual;--select rpad('abc',8,'k') from dual;
-select instr('xaypixpxuxyxtxgxbx','x',1,3) from dual;--select instr('aypixpxuxyxtxgxbx','x',3,3) from dual;--select length('abc') from dual;
-要求显示所有员工姓名,前2字母大写,后面小写,列名为ename
-select concat(upper(substr(ename,1,2)) lower(substr(ename,3,length(ename)-2)))ename" from emp;--selectconcat( lower(substr(ename,1,length(ename)-1)) upper(substr(ename,-1,1)))from emp;--selectlower(substr(ename,1,length(ename)-1))|upper(substr(ename,-1,1)) from emp;
-select ceil(3.45) from dual;--大于等于它的最小整数--select floor(3.45) from dual;--小于等于它的最大整数--select mod(10,3) from dual;--取余。
-select sign(-9),sign(0),sign(9) from dual;--select sqrt(16) from dual;--select power(4,3) from dual;
select round(56.47,-1),round(56.47,-2),round(56.
47,0),round(56.47,1),round(56.47,2) from dual;select trunc(56.
47,-1),trunc(56.47,-2),trunc(56.47,0),trunc(56.
47,1),trunc(56.47,2) from dual;
-select sysdate from dual;
-select sysdate+3,sysdate-3,sysdate+98/16 from dual;--select add_months(sysdate, 3) from dual;
-select months_between('11-11月-11','11-1月-12') from dual;--select months_between(sysdate,'11-11月-11') from dual;--select next_day(sysdate,'星期一') from dual;--select last_day(sysdate) from dual;--2012-07-18
-select round(sysdate,'year'),round(sysdate,'month'),trunc(sysdate,'year'),trunc(sysdate,'month') from dual;
-求每个员工的年终奖,假设年终奖为12个月的工资+24个月的奖金--select ename,12*sal+24*comm年终奖from emp;--select ename,sal,comm,job from emp;
-select ename,12*sal+24*nvl(comm,0)年终奖from emp;
-select ename,job from emp;
-显示每个员工的工种,要求工种显示时为中文。
-selectename,decode(job,'clerk','办事员','salesman','销售员','manager','经理','analyst','分析大事','最终boss') from emp;
-给每个员工加工资,10号部门加200,20号部门加300,其余加50,要求显示原工资和现有工资select ename,sal,decode(deptno,10,sal+200,20,sal+300,sal+50) newsal,deptno from emp;
oracle练习笔记
1 pl sql是oracle系统的核心语言,现在oracle的许多部件都是由pl sql写成。在pl sql中可以使用的sql语句有 select,update,delete,insert into,commit,rollback,s epoint 提示 在pl sql中只能用sql语句中的dml...
oracle笔记
1 查看表的结构 desc tabledescription 2 set timing on 打开操作表的时间记录。3 消除重复行 distinct 4 大小写不区分的是列名,而不是里面的数据。1 可以对某一列直接进行加减乘除。两列相加。2 如果有一列为null,所得结果也为空。使用nvl函数处理n...
Oracle笔记
第1页1.oracle 的使用 1.1.sqlplus 的命令 初始化表的位置 set nls lang american 设置编码才可以使用下面脚本 cd oracle home rdbms cd demo 我们目前使用的是oralce 9i 9201 版本 select from v versi...