Oracle练习笔记

发布 2021-05-11 22:37:28 阅读 4236

设某商业集团数据库中有三个实体集。

一是“仓库”实体集,属性有仓库号、仓库名和地址等。二是“商店”实体集,属性有商店号,商店名,地址等,三是“商品”实体集,属性有商品号、商品名,单价(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...