




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
连数据库:(1) 连的是数据库的那个实例:$ORACLE_SID 环境变量/c shell:.cshrc bash:.bash_profile(2) 建连接需要telnet 在操作系统上必须有账号 sqlplus 用户名/密码(3) 连成功与否:提示符变了则证明连接成功 比如:SQL(4) 看当前用户身份:show user(5) 切换用户:connect/conn 用户名/密码ORACLE用户常用数据字典的查询使用方法: (1)用户查看当前用户的缺省表空间:select username,default_tablespace from user_users;查看当前用户的角色select * from user_role_privs; 查看当前用户的系统权限和表级权限:select * from user_sys_privs; select * from user_tab_privs; (2)表 查看用户下所有的表:select table_name from user_tables; (3)索引 查看索引个数和类别:select index_name,index_type,table_name from user_indexes order by table_name;查看索引被索引的字段:select * from user_ind_columns where index_name=upper(index_name);(4) 序列号 查看序列号,last_number是当前值:select * from user_sequences;(5) 视图查看视图的名称:select view_name from user_views;(6) 约束条件查看某表的约束条件:select constraint_name, constraint_type,search_condition, r_constraint_name from user_constraints where table_name = upper(table_name); Oracle中的数据类型:数据类型 描述VARCHAR2(size)可变长度的字符串,其最大长度为size个字节;size的最大值是4000,而最小值是1;你必须指定一个VARCHAR2的size;NVARCHAR2(size)可变长度的字符串,依据所选的国家字符集,其最大长度为size个字符或字节;size的最大值取决于储存每个字符所需的字节数,其上限为4000;你必须指定一个NVARCHAR2的size;NUMBER(p,s)精度为p并且数值范围为s的数值;精度p的范围从1到38;数值范围s的范围是从-84到127;例如:NUMBER(5,2) 表示整数部分最大3位,小数部分为2位;NUMBER(5,-2) 表示数的整数部分最大为7其中对整数的倒数2位为0,前面的取整。NUMBER 表示使用默认值,即等同于NUMBER(5);LONG可变长度的字符数据,其长度可达2G个字节;DATE有效日期范围从公元前4712年1月1日到公元后4712年12月31日RAW(size)长度为size字节的原始二进制数据,size的最大值为2000字节;你必须为RAW指定一个size;LONG RAW可变长度的原始二进制数据,其最长可达2G字节;CHAR(size)固定长度的字符数据,其长度为size个字节;size的最大值是2000字节,而最小值和默认值是1;NCHAR(size)也是固定长度。根据Unicode标准定义CLOB一个字符大型对象,可容纳单字节的字符;不支持宽度不等的字符集;最大为4G字节NCLOB一个字符大型对象,可容纳单字节的字符;不支持宽度不等的字符集;最大为4G字节;储存国家字符集BLOB一个二进制大型对象;最大4G字节BFILE包含一个大型二进制文件的定位器,其储存在数据库的外面;使得可以以字符流I/O访问存在数据库服务器上的外部LOB;最大大小为4G字节.但是常用的数据类型为:varchar2(size)、char(size)、number、number(p,s)dual:系统提供的单行单列的表,用于测试。select语句的结构:select distinct | all select_listfrom table_name_source where search_condition group by group_by_expresson having search_condition order by order_expression asc | desc select 语句的执行步骤:1、执行from子句,根据from子句中的一个或多个表创建工作表。如果在from子句中有两个或多个表,DBMS将对表进行交叉连接,作为工作表。2、如果有where子句,dbms将where子句列出的搜索条件作用于步骤(1)生成的工作表。dbms将保留那些满足搜索条件的行,删除那些不满足搜索条件的行。3、如果有group by子句,dbms将步骤(2)生成的结果表中的行分成多个组,每个组所有行的group_by_expression字段具有相同的值,dbms将每组减少到单行,而后将其添加到新的结果表中。4、如果有having子句,dbms将having子句列出的搜索条件作用于步骤(3)生成的“组合”表中的每一行。dbms将保留那些满足搜索条件的行,删除那些不满足条件的行。5、将select子句作用于结果表。删除结果表中不包含在select_list中的列。如果select子句包含distinct关键字,dbms将从结果中删除重复的行。6、如果有order by子句,按指定的排序规则对结果进行排序。7、对于交互式的select语句,在屏幕上显示结果,对于嵌入式SQL,使用游标将结果传递给宿主程序中。例如:在学生成绩表中 ( t_Grade), 把 name内容不为空的记录按照 name 分组, 并且筛选分组结果, 选出 score 大于 600 分的. SQL 语句为: select name, max(score) as max_total from t_Grade where name is not null group by name having max(score) 600 order by max_total; 在上面的示例中 SQL 语句的执行顺序如下: (1). 首先执行 FROM 子句, 从 t_Grade 表组装数据源的数据 (2). 执行 WHERE 子句, 筛选 t_Grade 表中所有数据不为 NULL 的数据 (3). 执行 GROUP BY 子句, 把 t_Grade 表按 name 列进行分组 (4). 计算 max() 聚集函数, 按 score 求出总成绩中最大的一些数值 (5). 执行 HAVING 子句, 筛选课程的总成绩大于 600 分的. (7). 执行 ORDER BY 子句, 把最后的结果按 max_total 进行排序。连接符、数值运算和函数连接符:在SQL中,连接用于连接表中的两列或者多列数据,使他们作为一列供用户查询操作。连接符的符号为+或者|。究竟采用哪种,是要依据用户访问的数据库系统的(在Access、SQL Server和Sybase数据库系统中,采用的连接符为+,在DB2、Oracle、PostgreSQL数据库系统中采用的连接符为|)。数值运算:当用户使用SQL语言查询数据库表中的数据时,如果该数据位数值型,可在查询时使用数学运算符,直接对其进行处理,以满足不同的需要。例如,可以采用*运算符将表中存储的货物的单价和数量信息相乘,得到总价信息。在SQL中可用的运算符:+、-、*、/函数:字符函数:名称 描述CONCAT(字符串1,字符串2)将字符串1和字符串2连接成一个新的字符串示例: select CONCAT(job,ename) from empLPAD(字段,总的大小,添充字符)左填充即向右对齐示例: select empno,lpad(sal,10,*) from empRPAD(字段,总的大小,添充字符)右填充即向左对齐示例: select empno,rpad(sal,10) from empLOWER(字符串)将字符串全部变成小写;UPPER(字符串)将字符串全部变成大写;INITCAP(字符串)将字符串变成第一个字母大写,其余都变成小写;LENGTH(字符串)求出字符串的长度;SUBSTR(字符串,开始位置,长度)从字符串中取子串;示例: select substr(ename,2,3) from emp;-从ename的第2位开始取3位INSTR(字符串,字符)查看字符是否在字符串中存在;不存在返回0;存在则返回字符所在的的位置;如果有两个以上的字符则返回第一个的位置.示例:select instr(ename,S) from emp;TRIM(字符 FROM 字符串)去掉字符串首尾的字符;示例: select trim(S from ename) from emp;TO_CHAR()将不是其他类型转成字符类型;对于日期型可以控制其格式:TO_CHAR(日期,格式);其中格式有: YYYY -以4为显示年;YEAR -以标准格式显示年; MM ; MON ; DD ; DAY; HH ; MI ;SSREPLACE(字符串,字符串1,字符串2)将字符串中的字符1替换成字符2;示例: select replace(ename,SC,SS) from emp;TRANSLATE(字符串,字符串1,字符串2)替换多的字符;示例: select translate(ename,SH,AB) from emp; -表示将ename中的S换成A,H换成B;ASCII(char)求字符的ascii码NLSSORT(字符串)对字符串排序.数值函数:名称 描述ABS(数字)一个数的绝对值CEIL(数字)向上取整;不论小数后的书为多少都要向前进位;CEIL(123.01)=124;CEIL(-123.99)=-123;FLOOR(数字)向下取整;不论小数后的书为多少都删除;|floor(123.99)=123;floor(-123.01)=-124;MOD(被除数,除数)取余数;MOD(20,3)=2ROUND(数字,从第几为开始取)四舍五入;ROUND(123.5,0)=124;ROUND(-123.5,0)=-124; ROUND(123.5,-2)=100;ROUND(-123.5,-2)=-100;SIGN(数字)判断是正数还是负数;正数返回1,负数返回-1,0返回0;SQRT(数字)对数字开方;POWER(m,n)求m的n次方;TRUNC(数字,从第几位开始)切数字;TRUNC(123.99,1)=123.9TRUNC(-123.99,1)=-123.9 TRUNC(123.99,-1)=120TRUNC(-123.99,-1)=-120TRUNC(123.99)=123GREATEST(数字列表)找出数字列表中最大的数;示例:select greatest(100,200,-100) from dual; -结果为200LEAST(数字列表)找出数字列表中最小的数;SIN(n)求n的正旋COS(n)求n的余旋TAN(n)求n的正切ACos(n)求n的反正切ATAN(n)求n的反正切exp(n)求n的指数LN(n) 求n的自然对数,n必须大于0LOG(m,n)求n以m为底的对数,m和n为正数,且m不能为0日期函数:名称 描述ADD_MONTHS(日期,数字)在以有的日期上加一定的月份;示例:select add_months(hiredate,20),hiredate from emp;LAST_DAY(日期)求出该日期的最后一天.MONTHS_BETWEEN(日期1,日期2)求出两个月之间的天数(注意返回的天数为小数);示例:select months_between(sysdate,hiredate) from emp;NEXT_DAY(d,char)返回d指定的日期之后并满足char指定条件的第一个日期oracle日期格式参数 含义说明 d: 一周中的星期几 1-7 day: 天的名称,使用空格填充到9个字符 如:星期四dd: 月的天数 ddd: 年的天数 yyyy: 四位年份 yyy,yy,y: 年份的最后三位,两位,一位 hh: 小时,按12小时计 hh24:小时,按24小时计 mi: 分钟ss:秒 mm: 月数 mon: 3个字母的月份的简写 month: 月份的全名 w: 该月的第几个星期 ww: 年中的第几个星期Q:年的季度 1季度1-3月RR:在使用to_char时,返回年的最后2位数字RRRR:在使用to_char时,返回年的最后4位数字SSSSS:从午夜开始的秒数其他函数:名称 描述TO_NUMBER(字符串)将数字字符串转换为数值NVL(字符串,替换字符)如果字符串为空则替换,否则不替换TO_DATE(字符串,日期格式)将字符串转成日期GROUP BY:在没有group by子句时如果有组函数,则必须是组函数,否则出错。Having过滤的是分组后的结果,后面放组函数。如果有group by子句,select后面只能跟group by后面跟的字段或组函数。执行带having子句的组合查询时:根据列在select语句的from子句中的表生成的笛卡尔积创建中间表。如果from子句中只有一个表,那么中间表就是源表的副本。如果有where子句,将其搜索条件应用于从中间表过滤出不想要的行将中间表中的行排列成行组,其中所有的组合列都有相同的值将having子句中的每个搜索条件应用于每个行组。如果行组不满足一个或多个搜索条件,则从中间表中删除该行组。计算查询的select子句中的每项的值并为每个行组生成单一(总计)行。如果select子句中的项目引用了一列,则在总计行使用来自组内所有行上的该列值。如果select子句中的项目是个总计函数,则对要总计的行组计算函数数值并将此值添加到该组的总计行。如果查询包括关键词distinct(如select distinct),则从结果表中清除任何重复的行。如果有order by子句,则根据列在order by子句中的列值对结果表排序。查询出比本部门平均工资高的员工:Select first_name,salary,avgsalFrom s_emp e,(select avg(salary) avgsal,dept_id from s_emp group by dept_id) aWhere e.dept_id=a.dept_id and salaryavgsal;运算符:Logical Operators:!= 、 =、=、=AND、OR、NOTSQL Operators:BETWEEN . AND .IN(list)LIKE:select table_namefrom user_tableswhere table_name like S_% escape ;IS NULLNOT BETWEEN:NOT IN:NOT LIKE:IS NOT LIKE:NULL:EXITS:表连接:内连接:等值连接:通过两个表具有相同意义的列,可以建立相等连接条件。只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中。select first_name,name from s_emp e,s_dept dwhere e.dept_id=d.id;不等值连接:两个表中的相关的两列进行不等连接,比较符号一般为,(select avg(salary) from s_emp where dept_id=42);select ename,gradefrom emp ,salgradewhere sal between losal and hisal;结果:找出比42部门平均工资高的其他部门、查询出员工的工资级别自连接:自连接是数据库中经常要用的连接方式,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。下面介绍一下自连接的方法:将原表复制一份作为另一个表,两表做笛卡儿相等连接。例:显示雇员的编号,名称,以及该雇员的经理名称select e.id,e.first_name,a.first_name manager_namefrom s_emp e,s_emp awhere e.manager_id=a.id;外连接:LEFT/RIGHT/FULL OUTER JOIN 左外连接:LEFT OUTER JOINSELECT e.last_name, e.dept_id, FROM s_emp e LEFT OUTER JOIN s_dept d ON (e.dept_id = d.id); 等价于 SELECT e.last_name, e.dept_id, FROM s_emp e, s_dept d WHERE e.dept_id=d.id(+) 结果为:所有员工及对应部门的记录,包括没有对应部门编号dept_id的员工记录右外连接:RIGHT OUTER JOIN SELECT e.last_name, e.dept_id, FROM s_emp e RIGHT OUTER JOIN s_dept d ON (e.dept_id = d.id); 等价于 SELECT e.last_name, e.dept_id, FROM s_emp e, s_dept d WHERE e.dept_id(+)=d.id 结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录全外连接:FULL OUTER JOINSELECT e.last_name, e.dept_id, FROM s_emp e FULL OUTER JOIN s_dept d ON (e.dept_id = d.id); 结果为:所有员工及对应部门的记录,包括没有对应部门编号dept_id的员工记录和没有任何员工的部门记录。DDL:范式:第一范式:关系中每一分量不可再分。第二范式:有一个字段唯一且非空,比如id.但是数据很可能冗余,会造成数据不一致。第三范式:非主属性不能依赖于另外一个非主属性。在第二范式的基础上拆表。比如分为student表 class 表表的创建:在SQL中,创建数据库表的基本关键字为create table,在其后要指明创建的数据库表的名称,接着要分别定义表中的各列的名称、数据类型等。语法如下:CREATE TABLE (column1 DATATYPE NOT NULL PRIMARY KEY,column2 DATATYPE NOT NULL,.constraint 约束类型 (要约束的字段). );说明:DATATYPE -是Oracle的数据类型,可以查看附录。NUT NULL -可不可以允许资料有空的(尚未有资料填入)。PRIMARY KEY -是本表的主键。constraint -是对表里的字段添加约束.(约束类型有 Check,Unique,Primary key,not null,Foreign key)示例:create table stu(s_id number(8) PRIMARY KEY,s_name varchar2(20) not null,s_sex varchar2(8),clsid number(8),constraint u_1 unique(s_name),constraint c_1 check (s_sex in (MALE,FEMALE);表的复制:CREATE TABLE as (需注意的是复制表不能复制表的约束);示例:create table test as select * from emp;如果只复制表的结构不复制表的数据则:create table test as select * from emp where 1=2;表重命名:1,表名 rename xx to yy ; 2,字段 alter table kk rename column ss to k; 表名还可以 alter table tablename rename to tablename2;注意:表的名字对大小写不敏感。表名要紧接在CREATE TABLE 关键词的后面,且第一个字符必须是AZ之一,其余的字符可以是字母,也可以是_、#、$和等符号。而表中各列的定义在括号中完成,且各列之间以逗号隔开。不同的表,其列名可以相同,但是在同一个表中不允许出现相同的列名。在定义了列名后,一定要指明该列的数据类型。注意:VARCHAR2和CHAR这两种数据类型的区别!number -38位十进制数字注意:什么情况下会四舍五入!number(2,4) 范围: 0.0001 0.0099number(4,2) 范围: 00.01 99.99date:日期类型改变当前的日期的缺省格式:alter session set nls_date_format = yyyy mm dd hh24:mi:ss;隐式数据类型转换:insert into test values(01-JAN-99); to_date(date,fmt);日期是格式敏感的。fm:去掉前导0,空格表的删除:drop table parent cascade constraints;在drop table时先将子表上的外键删掉。create table child(c1 number primary key,c2 number references parent(c1) on delete cascade);级联删除级联删除:delete from parent;在删除父表的时候级联删除掉子表中引用的那个对应的值,此时他会先将子表的数据删除,再删除父表对应的记录注意:当某表语其他的表存在关联关系时,一些DBMS会不允许用户通过drop table语句来删除该表,只有当这种关联关系被删除后,才能删除该表。表的修改:对表定义的修改不同的数据库有不同的限制添加列:alter table table_name add column_name data_type not null ;删除列:alter table table_name drop column column_name;修改列:常用的修改操作主要包括字符长度限制的修订和非空约束的限制或取消alter table table_name modify column_name data_type;DML:DATA MANIPULATION LANGUAGEINSERT:在表中添加一条新的记录insert into table_name(column1,column2.) values(value1,value2.);UPDATE:对表中已经存在的记录进行修改(一条或多条记录)delete from table_name where condition;DELETE:删除表中存在的记录(一条或多条记录)update table_name set column=value,column=valuewhere condition;SELECT约束:约束是用来确保数据的准确性和一致性。数据的完整性就是对数据的准确性和一致性的一种保证。数据完整性(Data Integrity)是指数据的精确(Accuracy)和可靠性(Reliability)。数据完整性分为以下四类:实体完整性:规定表中的每一行在表中式唯一的实体。域完整性:是指表中的列必须满足某种特定的数据类型或约束,其中约束有包括取值范围、精度等规定。参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩展。用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。约束分为表级约束和列级约束:create table test(c1 number constraints test_pk_c1 primary key);列级约束create table test(c1 number,primary key(c1);表级约束约束类型:NOT NULL:非空约束只能用于定义列约束。UNIQUE:唯一约束用于指明某一列或多个列的组合上的取值必须唯一。定义了UNIQUE约束的那些列称为唯一健,系统自动为唯一健建立唯一索引,从而保证了唯一健的唯一性。唯一健允许为NULL,但系统为保证其唯一性,最多只可以出现一个NULL值。PRIMARY KEY:主键约束用于定义基本表的主键,起唯一标示作用,其值不能为NULL,也不能重复,以此来保证实体的完整性。PRIMARY KEY和UNIQUE约束类似,通过建立唯一索引来保证基本表在主键列取值的唯一性,但又存在很大的区别:A)在一个表中,只能定义一个PRIMARY KEY约束,但可以定义多个UNIQUE约束。B)对于指定为PRIMARY KEY的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于UNIQUE所约束的唯一健,则允许为NULL,只是NULL值最多有一个。注意:不能为同一个列或一组列既定义UNIQUE约束又定义PRIMARY KEY约束。FOREIGN KEY:外键约束指定某一个列或一组列作为外部键,其中,包含外部键的表称为子表,包含外部键所引用的主键的表称父表。系统保证,表在外部键上的取值要么是父表中某一个主键,要么取空值。以此保证两个表之间的连接,确保了实体的参照完整性。外键约束既可以用于列约束也可以用于表约束。CHECK:校验约束用来检查字段值所允许的范围。如,一个字段只能输入整数,而且限定在0100的整数,以此来保证域的完整性。校验约束可以被定义为表约束、列约束等。每个CHECK约束由关键字CHECK后跟搜索条件组成,DBMS每当执行delete、insert或update语句改变表的内容时,都对这些搜索条件求值。如果修改后,搜索条件为true,则dbms允许修改,如果结果为false,则系统取消操作并给出错误报告。CHECK约束是所有约束中最灵活的约束,若要创建列约束应在列定义时使用下列创建语法:column_name datetype CHECK (search condition);若要创建表约束,应在表定义时使用下列创建语法:constraint constraint_name check(search condition);列约束和表约束:列约束是对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名。表约束与列定义相互独立,不包括在列定义中,通常对多个列一起进行约束,与列定义用逗号分隔,定义表约束时,必须指定要约束的那些列的名称。表约束的基本语法格式如下: CONSTRAINT constraint_name constraint_type(column1,column2,.)说明:constraint_name 为约束名,约束不指定名称时,系统会给定一个名称。constraint_type为约束类型,可以是UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK等约束。其中search condition为check约束的搜索条件,可以是基于比较运算符简单表达式,也可以是复杂的子查询。外键:先建:create table parent(c1 number primary key);后建:create table child(c1 number primary key, c2 number references parent(c1); create table child(c1 number primary key, c2 number ,foreign key(c2) references parent(c1); 先插:insert into parent values(1);后插:insert into child values(1,1);先删:delete from child where c2=1;后删:delete from parent where c1=1;先drop:drop table child;后drop:drop table parent;drop table parent cascade constraints;在drop table时先将子表上的外键删掉。create table child(c1 number primary key,c2 number references parent(c1) on delete cascade);级联删除级联删除:delete from parent;在删除父表的时候级联删除掉子表中引用的那个对应的值,此时他会先将子表的数据删除,再删除父表对应的记录oracle不支持on update cascade若想实现则trigger实现,sql server支持SEQUENCE:在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。(1)Create Sequence:你首先要有CREATE SEQUENCE的权限。CREATE SEQUENCE emp_sequenceINCREMENT BY step - 每次加step个START WITH 1 - 从1开始计数NOMAXVALUE - 不设置最大值NOCYCLE- 一直累加,不循环CACHE 10;一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVALCURRVAL=返回 sequence的当前值NEXTVAL=增加sequence的值,然后返回 sequence 值比如:emp_sequence.CURRVALemp_sequence.NEXTVAL可以使用sequence的地方:A、不包含子查询、VIEW的 SELECT 语句B、INSERT语句的子查询中C、NSERT语句的VALUES中D、UPDATE 的 SET中可以看如下例子:INSERT INTO emp VALUES(emp_seq.nextval, LEWIS, CLERK,7902, SYSDATE, 1200, NULL, 20);SELECT emp_seq.currval FROM DUAL;要注意的是:(a)第一次NEXTVAL返回的是初始值,随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。(b)如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号,比如数据库突然不正常down掉,cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。(2)Alter Sequence如果想要改变start值,必须 drop sequence 再 re-create 。Alter sequence的例子:ALTER SEQUENCE emp_sequenceINCREMENT BY 10MAXVALUE 10000CYCLE - 到10000后从头开始NOCACHE ;影响Sequence的初始化参数。可以很简单的Drop Sequence:DROP SEQUENCE emp_sequence; 视图VIEW:什么是视图:图是存储在数据库中的预先定义好的查询,具有表的外观,可以象表一样对其进行存取,但不占据物理存储空间。视图的特点:视图的存在依赖于生成视图的表;视图能用作数据库安全的一种形式;利用视图维护综合数据。基本语法:CREATE VIEW view_name ASSELECT STATEMENTWITH CHECK OPTION 1、从单独的表中创建视图语法: CREATE VIEW view_name ASSELECT * |COL1,COL2,FROM table_nameWHERE expression例: CREATE VIEW emp _ view ASSELECT id,first_name,last_nameFROM s_emp;注意:expression:with read only;/with check opention constraint e_name; 2、从多表中创建视图语法:CREATE VIEW VIEW_NAME AS SELECT * |COL1,COL2,. FROM TABLE_NAME1,TABLE_NAME2, WHERE EXPRESSION例:CREATE VIEW v_emp AS SELECT e.id,e.first_name, FROM s_emp e , s_dept d WHERE e.dept_id = d.id 3、从视图中创建视图语法:CREATE VIEW2 ASSELECT * FROM VIEW1注意:不要创建层次太深的视图。例:由上例视图v_emp CREAT vemp AS SELECT * FROM v_emp;视图的更新:对视图的更新最终要转换成对基本表的更新。视图更新条件:1、视图必须未涉及连接2、视图必须不包含GROUP BY子句3、视图不能包含任何组合函数4、不能使用DISTINCT子句5、WHERE子句不能包含表的嵌套引用删除视图:语法:DROP VIEW view_name例:DROP VIEW v_emp删除了视图,由此视图导出的其他视图也将自动被删除若导出此视图的基本表被删除了,则此视图也将自动删除视图的优点:视图对于数据库的重构造提供了一定程度的逻辑独立性简化了用户观点视图使不同的用户能以不同的方式看待同一数据视图对机密数据提供了自动的安全保护功能索引:建立索引: 语法:CREATE INDEX index_name ON table_name(clo_name ) 例:为学生-课程数据库中的student, couse, sc 3个表建立索引 CREATE INDEX stusno ON student(sno);CREATE INDEX coucno ON couse(cno);CREATE INDEX scno ON sc(sno,cno);删除索引: 语法:DROP INDEX index_name 例:删除student表的stusno索引DROP INDEX stusno;oracle的索引陷阱:一个表中有几百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这主要可能是oracle的索引限制造成的。oracle的索引有一些索引限制,在这些索引限制发生的情况下,即使已经加了索引,oracle还是会执行一次全表扫描,查询的性能不会比不加索引有所提高,反而可能由于数据库维护索引的系统开销造成性能更差。下面是一些常见的索引限制问题。 1、 使用不等于操作符(, !=)下面这种情况,即使在列dept_id有一个索引,查询语句仍然执行一次全表扫描select * from dept where staff_num 1000;但是开发中的确需要这样的查询,解决的办法是通过把用 or 语法替代不等号进行查询,就可以使用索引,以避免全表扫描:上面的语句改成select * from dept shere staff_num 1000;就可以使用索引了。2、 使用 is null 或 is not null使用 is null 或is nuo null也会限制索引的使用,因为数据库并没有定义null值。如果被索引的列中有很多null,就不会使用这个索引。在sql语句中使用null会
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业面源污染治理2025年农业面源污染治理技术培训与人才培养研究报告
- 甘肃文旅集团签订协议书
- 空厂房场地出租合同范本
- 飞机设计外包合同协议书
- 私人委托代理协议书范本
- 股权托管合作协议书范本
- 禁止跨区就读家长协议书
- 液压翻斗车出租合同范本
- 线上如何签三方协议合同
- 玻璃砂原料采购合同范本
- DL∕T 5161.5-2018 电气装置安装工程质量检验及评定规程 第5部分:电缆线路施工质量检验
- (正式版)HGT 6313-2024 化工园区智慧化评价导则
- esc急性肺栓塞诊断和管理指南解读
- GB/T 1796.7-2018轮胎气门嘴第7部分:零部件
- 分光计的使用与调节-课件
- MCGS脚本驱动开发工具使用指导手册
- 新概念英语入门级AUnit3课件
- 35kV输电线路工程旋挖钻孔专项施工方案
- 扬尘控制洒水、车辆冲洗记录表
- 信访工作课品课件
- 加油站火灾、爆炸事故现场处置方案
评论
0/150
提交评论