sql ,oracle语法

来源:互联网 发布:第三届数据新闻大赛 编辑:程序博客网 时间:2024/06/17 02:47

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


投影就是从一张表中去我们自己想要的数据属性之 如: 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 来限制。