精品IT教程Oracle经典学习资料_第1页
精品IT教程Oracle经典学习资料_第2页
精品IT教程Oracle经典学习资料_第3页
精品IT教程Oracle经典学习资料_第4页
精品IT教程Oracle经典学习资料_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、oracle & sql基本介绍:oracledboracle公司 也提供应用系统;我们涉及的是数据库管理系统dbms(多用户系统);数据库操作语言sql结构化查询语言;sql操作对象为 db中的数据,表现形式为库和表。oracle用表管理表系统表(数据字典)用户表:telnet 3 通过sqlplus命令 与数据库建立连接,才可操作ddl 、dml环境变量: path 中要加入sqlplus所在的目录 oracle_home oracle安装目录 oracle_sid 表示连接的数据库 /一定要设置,否则无法连数据库 sqlplus sd0701/sd0701 sql

2、表示这是sql环境1. telnet 32. 用户 两个环境变量:oracle_home oracle_sid 数据库实例的名字 path 中追加 $oracle_home/bin3. sqlplus口令比如命令: show user /看登录的用户名 sqlplus命令一、oracle数据库中常用的数据类型varchar2(长度) 可变长字符串 date 日期类型char(长度) 定长 number() 表示整数或者浮点数clob 字符的大对象blob 二进制的大对象select table_name from user_tables; /查看当前有那些表desc s_

3、emp /查看表结构 以上两条很有用二、数据库查询1、select语句从表中提取查询数据.语法为:select distinct column1,column2, from tablename where conditions group by conditions order by expressions asc/desc; 说明:select子句用于指定检索数据库的中哪些列,from子句用于指定从哪一张表或视图中检索数据。注:distinct会触发排序2、where子句。where子句用来选择符合条件的记录。between . and . 表示结果在这之间,between and是一个闭区

4、间;!=,= 这三个都可以表示不等于;in (va1,val2,.) 判断结果是否在这个集合中存在; in等价于:=any 注意顺序会影响执行效率like . 表示字符串通配查询,%表示0或多个字符, _ 表示一个字符; 注意字符大小写敏感 知道转义的用法:like s_% escape . and . 表示只有两个条件同时满足;. or . 表示条件只要满足其中之一就可以;all . 是要求都满足条件;not . 可以与以上的条件产生相反的效果; not in 等价于: all 注意空值的影响,空值与任何值比较结果都为空!. is null 用来判断值是否为空。3、order by子句ord

5、er by 子句使得sql在显示查询结果时将各返回行按顺序排列,返回行的排列顺序由order by 子句指定的表达式的值确定。 asc(默认,升序) desc(降序)order by 目标列名(别名) 排序顺序(不写则默认为升序)例:select first_name from s_emp order by first_name; /默认为升序select first_name from s_emp order by first_name desc; /降序三、sql常用的命令分类及例子create(创建)alter(更改)drop(删除)数据定义语言: ddl必须要掌握,使用频度高!inse

6、rt(插入)select(选择)delete(删除)update(更新)命令数据操纵语言: dml记住,事务处处流淌在我们的应用中!commit(提交)savepoint(保存点)rollback(回滚)事务控制语言: tcl数据控制语言:grant(授予)和revoke(回收)。与权限有关 dcl1、数据定义语言ddl举例: sql create table mytab(no number(4),name varchar2(20); /创建一个名为mytab的表,包含两列分别为no和name;sql alter table mytab modify (name varchar2(25); /

7、修改mytab中的name列,使此列能容纳25个字符;sql alter table mytab add (tel_no varchar2(20); /给表mytab增加一列tel_no;sql alter table mytab drop column tel_no; /删除表mytab的tel_no列;sql drop table mytab; /删除表mytab;sql truncate table mytab; /删除表mytab中的所有行(截断表),注意:此操作不可以rollback。2、数据操纵语言dml举例:sql insert into mytab values(001,joh

8、n); /向表mytab中插入一行数据;sql select distinct salary “薪水” from s_emp where salary1500 order by sal desc; /选择表中salary大于1500的数据,以别名“薪水”显示并按照salary的降序进行排列输出;sql create table empa as select empno,ename,job,sal from emp;/从emp表中选择“empno,ename,job,sal”四列的数据建立新表empa;sql create table empa as select * from emp wher

9、e 1=2;/使用一个假条件根据现有表emp创建一个只包含结构的空表empa; sql delete from empa where sal update empa set sal=1500 where sal commit; /用于提交并结束事务处理;sql savepoint mark1; /保存点类似于标记,用来标记事务中可以应用回滚的点;sql rollback to savepoint mark1; /回滚到保存点mark1。四、oracle数据库函数注意:dual表(虚表)是专门用于函数测试和运算的.单行函数1、字符函数 字符是大小写敏感的 转小写 lower(字段名) 转大写 u

10、pper(字段名) 首字母大写 initcap(字段名) 字符串拼接 concat(字段1, 字段2) 截取子串 substr(字段名, 起始位置,取字符个数) 字符串长度 length() 忽略空值 nvl()例: select first_name,substr(first_name,2,2) sub from s_emp;(从名字的第二个字符开始取两个字符)select first_name,substr(first_name,-2,2) sub from s_emp;(从名字的倒数第二个字符开始取两个字符)2、数值函数 四舍五入函数 round(数据,保留到小数点后几位) 1表示保留到

11、小数点后一位,-1表示保留到小数点前一位。 例:select round(15.36,1) from dual; 截取数值函数 trunc(数据,保留到小数点后几位) 例:select trunc(123.456,1) from dual;截取到小数点后一位,注意:与round函数不同,不会四舍五入。3、日期函数 缺省日期格式:日-月-年 dd-mon-rr 修改当前会话的日期格式,会按照指定的格式输出日期 alter session set nls_date_format=yyyy mm dd hh24:mi:ss; 返回当前日期 sysdate 世纪、年、月、日、时、分、秒 例:selec

12、t sysdate from dual; 另外,date 类型可以运算:select sysdate-1,sysdate,sysdate+1 from dual; 单位为1天select sysdate,sysdate+1/144 from dual; 加10分钟两个日期相减表示 相隔多少天。使用函数:select trunk(add_months(sysdate,1),month) from dual; /取下个月首天4、不同数据类型间转换函数 将日期转成特定格式字符串 tochar(date,日期格式) 日期格式要用有效格式,格式大小写敏感 yyyy mm dd hh24:mi:ss(标准

13、日期格式),year(年的全拼),month(月的全拼),day(星期的全拼),ddspth (日期的全拼) 例:select to_char(sysdate,yyyy mm dd hh24:mi:ss)from dual;select to_char(sysdate,year month day ddspth)from dual; /大小写敏感select to_char(sysdate,year month day ddspth)from dual; 将字符串转成日期 to_date(.,日期格式) 例:select to_char(to_date(2006 11 03,yyyy mm d

14、d),dd-month-yy) from dual;五、表连接(关联查询)等值连接 select table1.column1,table2.column2 from table1 t1,table2 t2 where t1.column3=t2.column4; 表连接时,当表与表之间有同名字段时,可以加上表名或表的别名,加以区分,使用时要用表名.字段名或表别名.字段名(列名)。当表的字段名是唯一时,可以不用加上表名或表的别名。注意:当为表起了别名,就不能再使用表名.字段名了。例如:select e.first_name | | e.last_name name, dept_n

15、amefrom s_emp e, s_dept dwhere e.dept_id=d.id;非等值连接 select 表别名1.字段名1,表别名2.字段名2,. from 表1 表别名1 ,表2 表别名2 where 表别名1.字段名3 . 表别名2.字段名4 .可以使比较运算符,也可以使其他的除了=的运算符例:select first_name, salaryfrom s_emp where salary between 1000 and 2000;自连接 把一个表的两个字段关系转换成两个表字段之间的关系. select 表别名1.字段名1,表别名2.字段名2,. from 表1 表别名1

16、,表1 表别名2 where 表别名1.字段名3=表别名2.字段名4;例:select a.first_name ename,b.first_name cname from s_emp a,s_emp b where a.manager_id=b.id; 以上三种连接为内连接,会严格匹配!外连接 在加(+)的这一边模拟数据与之匹配。使用一张表中的所有记录去和另一张表中的记录按条件匹配(空值也会匹配),这个表中的所有记录都会显示。*要记录一个都不能少,则在对方的那一边加(+) 1. left outer join:左外连接select e.last_name, e.dept_id,

17、 from s_emp e left outer join s_dept d on (e.dept_id = d.id);掌握哪个部门没有员工的写法,用外连接。select e.deptno, d.deptno from emp e, dept dwhere e.deptno(+) = d.deptnoand e.deptno is nullselect e.last_name, e.dept_id, from s_emp e, s_dept d where e.dept_id=d.id(+);等价于 结果为:所有员工及对应部门的记录,包括没有对应部门编号dept_id的员工记录

18、。 select e.last_name, from s_emp e, s_dept d where e.dept_id(+)=d.id;select e.last_name, from s_emp e right outer join s_dept d on (e.dept_id = d.id);2. right outer join:右外连接结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录。 select e.dept_id,d.id from s_emp e, s_dept d where e.dept(+) = d.id(+) select e.d

19、ept_id,d.id from s_emp e full outer join s_dept d on (e.dept_id = d.id);3. full outer join:全外关联结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录。六、组函数group by把 select 查询的结果集分成几个小组,这个group by 子句可以跟在 select 语句后面或是 having前面。group by子句也会触发排序操作,会按分组字段排序。select 组函数或分组的字段名. from 表名 group by 字段名1,字段

20、名2,.;例:select avg(salary) from s_emp group by dept_id; 注意: 组函数会忽略空值,但是count(*)除外,他会把空记录也统计在内。 avg和sum这两个函数的参数只能是number型的。 count、max、min可以使用任意类型做参数。 max(.), min(.)求最大值和最小值, count(*)统计表中记录数。例:select max(), avg(a.salary), max() from s_emp a, s_dept b, s_region c where a.dept_id=b.id and b.r

21、egion_id=c.id group by b.id;注意:只要写了group by子句,select后就只能用group by之后的字段或者是组函数。having子句可以过滤组函数结果或是分组的信息,并且写在group by子句后。七、子查询可以嵌在sql语句中的select语句。在select语句中嵌套子查询时,会先执行子查询,返回结果再执行主查询。一般的会将子查询放在运算符的右边。注意:在使用子查询时,要注意这个运算符是单行的(也就是只能是单值)比如=要确认返回的是单行;还是多行运算符(范围,多值.比如in)。配合使用子查询返回的结果必须符合运算符的用法。例:select first_

22、name| |last_name name / 用 | 表示字符串拼接from s_empwhere title in (select title from s_emp where dept_id=42);查询和42部门员工职位相同的所有员工的姓名.在select后加子查询: 谁的工资比本部门的平均工资高?select e.first_name, e.salary, a.avgsalfrom s_emp, (select dept_id,avg(salary) avgsal from s_emp group by dept_id) awhere e.dept_id = a.dept_idand

23、 e.salary a.avgsal范式:1nf 关系中每一分量不可再分。即不能以集合、序列等作为属性值2nf 有一个字段唯一且非空的,比如id。但是数据很可能冗余,会造成数据不一致3nf 非主属性间无依赖关系了。在2nf的基础上拆表。比如分为 student表 class表八、约束针对表中的字段进行定义的。1、primary key(主键约束 pk)保证实体的完整性,保证记录的唯一。主键约束,唯一且非空,并且每一个表中只能有一个主键,有两个字段联合作为主键时,将两个字段组合在一起唯一标识记录,叫做联合主键。主键约束的定义:第一种定义形式:create table test(c number

24、primary key ); 列级约束第二种定义形式:create table test(c number , primary key(c) ) ; 表级约束create table test(c1 number constraints pk_c1 primary key ); 此约束有名字: pk_c1create table test(c number , c1 number , primary key (c ,c1) ) ; 用表级约束可以实现联合主键2、foreign key(外键约束 fk)保证引用的完整性,外键约束,外键的取值是受另外一张表中的主键或唯一值的约束,不能够取其他值,只

25、能够引用主键或唯一键的值,被引用的表,叫做parent table(父表),引用方的表叫做child table(子表),要想创建子表,就要先创建父表;记录的插入也是如此,先父表后子表;删除记录,要先删除子表记录,后删除父表记录;要修改记录,如果要修改父表的记录要保证没有被子表引用。要删表时,要先删子表,后删除父表。(可以通过使用cascade constraints 选项来删除父表)carete table parent(c1 number primary key ); 列级约束create table child (c number primary key , c2 number refe

26、rences parent(c1);或表级约束定义:create table child( c number primary key , c2 number , foreign key(c2) references parent(c1);3、not null(非空约束nn)这是一个列级约束,在建表时,在数据类型的后面加上 not null ,也就是在插入时不允许插入空值。例:create table student(id number primary key,name varchar2(32) not null,address varchar2(32);4、unique(唯一约束uk)唯一约束

27、,允许为空,要求插入的记录中的值是唯一的。例:create table student(id number,name varchar2(32),address varchar2(32),primary key (id),unique (address);check约束检查约束,可以按照指定条件,检查记录的插入。check中不能使用伪列,不能使用函数,不能引用其他字段。例:create table sal (a1 number , check(a11000);九、数据字典 dd数据字典是由系统维护的,包含数据库的信息数据字典视图user_xxxxx 用户视图all_xxxxx 所有视图dba_x

28、xxxx 数据库中所有视图v$_xxxxx 动态性能视图dict或 dictionary 表示数据字典的数据字典。user_constraints 用户的表中管理约束的表其中有constraints_name字段存放的是约束名,constraint_type字段存放的是约束的类型, r_constraints_name字段表示外键引用自何处.user_cons_column表,是用户的列级约束表, column_name字段存放的是约束字段的名字, position字段存放的是约束在联合键中的位置.十、事务 transaction原子操作,也就是不可分割的操作,必须一起成功一起失败。事务的结束

29、动作就是commit; ddl, dcl语句执行会自动提交commit。sqlplus正常退出是会做提交动作的commit;,当系统异常退出时,会执行回滚操作rollback;。一个没有结束的事务,叫做活动的事务 (active transaction),活动的事务中修改的数据时,只有本会话(session)才能看见。十一、oracle中的伪列伪列就像oracle中的一个表列,但实际上它并未存储在表中。伪列可以从表中查询,但是不能插入、更新或删除它们的值。常用的伪列:rowid和rownum。rowid:数据库中的每一行都有一个行地址,rowid伪列返回该行地址。可以使用rowid值来定位表中

30、的一行。通常情况下,rowid值可以唯一地标识数据库中的一行。rowid伪列有以下重要用途:1)能以最快的方式访问表中的一行;2)能显示表的行是如何存储的。3)可以作为表中行的唯一标识。如:sql select rowid,ename from emp;rownum:对于一个查询返回的每一行,rownum伪列返回一个数值代表的次序。rownum伪列特点:1) 有个特点要么等于1 要么小于某个值, 不能直接等于某个值, 不能大于某个值。2)常用于分页显示。返回的第一行的rownum值为1,第二行的rownum值为2,依此类推。通过使用rownum伪列,用户可以限制查询返回的行数。如:sqlselect * from emp where rownum10with check option;十四、索引(index)建立索引的目的就是为了加快查询速度,建立索引后会使dml操作效率

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论