您的位置:首页 > 数据库 > Oracle

sql ,oracle语法

2013-04-27 15:28 197 查看
完整性规则:

实体完整性和引用完整性 实体完整性是指:主键不能为空。 引用完整性是指,引用要么为空要么必须是引用表的主键;

投影就是从一张表中去我们自己想要的数据属性之 如: TABLE_A =PART(DESC,DEPTNO);在part这张表中只取desc 和 deptno 这两个字段的值就行了。

E-R 图:

entiy-relations:

完全依赖:一个非键列完全依赖于主键;

部分依赖:一个非键列依赖于部分主键 ;

传递依赖:一个非键列依赖于另一个非键列;

处理数据冗余用范式:

第一范式:

第二范式:

满足第一范式:

不从在部分依赖:

第三范式:

满足第二范式:

不从在传递依赖:

在数据表中不建议定义年龄这样的列,可以选择出生日期这样的字段。

列约束: 列约束级别只适合一列,他的定义于列同时进行。出外键和复合主约束外是他约束均可以在列级别上。

colum datatype 【constraint constraint_name】 constration type

ename varchar2(20) not null;

表级别约束: 所有的列级别定义完才能定义表级别的约束,但是除了非空之外。

【constraint constraint_name】 constrint_type(colum,...)

not null(ename,...)

constraint student faulty_id_fk FOREIGN KEY(faulty_id) references faulty(faulty_id);( on delete cascade )

NOT NULL 非空约束不能再表级别出现输入,name varchar2(20) not null;// 没有约束名,

unique 复合唯一键约束只能在表级别上建立。

oracle 隐式的在为一列上创建索引。

检查约束定义了每一行都满足的条件. 表空间 tablespace 定义中的storage 子句的定义。例子:

tablespace TB

pctfree 10 // 空闲百分比

initrans 1

maxtrans 255

storage

(

initial 80

minextents 1

maxextents unlimited

)

ORACLE 中查看用户的表名: select *from USER_TABLES;

默认情况下oracle会为主键添加非空约束; 为表添加注释:

comment on table tablename is '';

comment on column SYS.USER_TABLES.AVG_ROW_LEN is 'The average row length, including row overhead';

向已经存在数据的表中添加心列:

alter table tablename add columname datatype;

修改格式:

alter table tablename modify columname datatype;

删除一列:

alter table tablename drop colum columname;

重新命名一列:

alter table tablename rename colum oldname to newname ;

表的删除:

drop table tablename [cascade constraint ];重新命名数据表:

rename oldtablename to newtablename ;

截断一张表的语法:

truncate table tablename ;

只有delete table 权限的表才能有这个权限:

截断操作会释放表的所有空间:

操作数据表:数据的检索和管理:

用DML语言来操作添加数据 (insert,update,delete);

如果一个语句中有一个引号的话,那么要在其中在加一个引号,作为转意字符,distinct 关键字是取消重复的值:

别名中想保留那个大写字母或者空格的话就用引号.

column 命令:

coulum columname format ...;

运算符: not null /between...and.../like/ in /and /or/

通配符

用途

%

代表0个或者多个字符

-

代表一个字符

如果一个之中本身含有通配符那么,在定义的时候就用escape来转义 where colum ‘%%_’escape '/';

desc 表示降序,asc 升序排列。

case when condition then

when condition then

.....

else

end;

操作数据表:函数的分组

字符操作函数:

upper(); select upper('oracle') from dual; Lower(); substr(colum,expression,r,y)....

ltrim('000222','0')-----'222'

substr('hello',2,3)----- ell

LPAD(str,number,'s');---- 用s 充填str直到总长度为number;

数字函数:

Round(,) round(34.5634,2)-----34.56 round(25.465,-1)----30;

trunc()函数 :

trunc(25.456,2)----25.45

trunc(25.464,-1) ---- 20

abs(-12) = 12 返回绝对值

floor(values)--返回小于等于此值的最大值;

ceil(values)-- 返回大于等于辞职的最小值;

select to_char(sysdate,'dd-mm-yyy') from dual; 把当前日期转化成字符形式 date1-date2 是日数;

日期函数:

MONTHS_BETWEEN(DATA1,DATA2)----返回两个日期之间的月数;

add_months(date,m); add_months('10-MAY-2001',3)--- 10-AUG-2001

NVL 函数将空值转换为由参数指定的实际值。如果是date/char/varchar2/数据类型充当第二个参数时则要将他们放在单引号中;

commiss 是空值 nvl(commiss,0)用0 代替空值commiss

操作数据表:函数的分组

字符操作函数:

upper(); select upper('oracle') from dual; Lower(); substr(colum,expression,r,y)....

ltrim('000222','0')-----'222'

substr('hello',2,3)----- ell

LPAD(str,number,'s');---- 用s 充填str直到总长度为number;

sun(colum) 返回一列中所有值的总值 avg(colum) 返回一列中的所有值的平均值 max(column) 返回最大值 ,min(column) 返回最小值

count() 参数如果是* 则用来计算行数包括非空值,如果是列或是表达式则计算非空值。 所以用它计算是当参数是列是一定要注意,要小心的去用它。

数据表中的行可以被分成不同的组,以便对每个组进行处理. 当查询中有一个分组函数和group by 子句时,select 语句中出现的单个列,必须出现在group by 的子句 中;(很重要,不要写错了!) where可以限制数据但是不可以限制组。 列别名不能出现在group by 子句中。

当一列出现在select子句,且select子句中有分组函数则,分组列必须也要出现在group by子句中,要不然,就会出错。

select DEPTNO,COUNT(*) AS TOTAL FROM EMP WHERE COUNT(*)>2 GROUP BY DEPTNO; 这样写对吗? 当然不对了,切记 where 子句中一定不能限制分组函数。 那么怎么才能限制组了,我们可以用having 来限制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: