版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、韩顺平玩转Oracle9i1. Oracle认证和安装,与其他数据库比较Oracle安安装会自动的的生成syss用户和sysstem用户户:(1)sys用用户是超级用用户,具有最最高权限,具具有sysddba角色,有有creatte dattabasee的权限,该该用户默认的的密码是chhange_on_innstalll(2)systtem用户是是管理操作员员,权限也很很大。具有ssysopeer角色,没没有creaate daatabasse的权限,默默认的密码是是managger(3)一般讲,对对数据库维护护,使用syystem用用户登录就可可以拉也就是说syss和systeem这两个用
2、用户最大的区区别是在于有有没有creeate ddatabaase的权限限。2. HYPERLINK /blog/605375 Oraccle的基本本使用-基基本命令sql*pluus的常用命命令n 连接命令 1.connect用法:connn 用户名/密码网络服务名名as ssysdbaa/sysooper当当用特权用户户身份连接时时,必须带上上as syysdba或或是as ssysopeer远程连接:sqqlpluss usr/pwd/hostt:portt/sid 如:connn syss/admiin1277.0.0.1:15221/orccl as sysdbba;2.discon
3、necct说明: 该命令令用来断开与与当前数据库库的连接3.pssswword说明: 该命令令用于修改用用户的密码,如如果要想修改改其它用户的的密码,需要要用sys/systeem登录。4.sshow uuser说明: 显示当当前用户名5.exit说明: 该命令令会断开与数数据库的连接接,同时会退退出sql*plus n 文件操作命命令 1.startt和说明: 运行ssql脚本案例: sqll d:a.sqql或是sqlstartt d:aa.sql2.edit说明: 该命令令可以编辑指指定的sqll脚本案例: sqlleditt d:aa.sql,这样会把d:a.sqql这个文件件打开3.
4、spooll说明: 该命令令可以将sqql*pluus屏幕上的的内容输出到到指定文件中中去。案例: sqllspoool d:b.sqll 并输入 sqlsspool off n 交互式命令令 1.&说明:可以替代代变量,而该该变量在执行行时,需要用用户输入。select * froom empp wherre jobb=&joob;2.edit说明:该命令可可以编辑指定定的sql脚本案例:SQLedit d:a.sql3.spooll说明:该命令可可以将sqll*pluss屏幕上的内内容输出到指指定文件中去去。spool dd:b.ssql 并输输入 spoool offfn 显示和设置置环
5、境变量概述:可以用来来控制输出的的各种格式,set show如果希望永久的保存相关的设置,可以去修改glogin.sql脚本1.linessize说明:设置显示示行的宽度,默默认是80个字符show liinesizze set linnesizee 902.pagessize说明明:设置每页页显示的行数数目,默认是是14用法和lineesize一一样至于其它环境参参数的使用也也是大同小异异3. HYPERLINK /blog/606336 oraccle用户管管理n 创建用户概述:在oraacle中要要创建一个新新的用户使用用creatte useer语句,一一般是具有ddba(数据据库管理
6、员)的权限才能能使用。create user 用户名 iddentiffied bby 密码; (ooraclee有个毛病,密密码必须以字字母开头,如如果以字母开开头,它不会会创建用户) n 给用户修修改密码概述:如果给自自己修改密码码可以直接使使用passworrd 用户名名如果给别人修改改密码则需要要具有dbaa的权限,或或是拥有allter uuser的系系统权限SQL allter uuser 用用户名 iddentiffied bby 新密码码n 删除用户概述:一般以ddba的身份份去删除某个个用户,如果果用其它用户户去删除用户户则需要具有有drop user的的权限。比如 drop
7、p userr 用户名 【casccade】在删除用户时,注注意:如果要删除的用用户,已经创创建了表,那那么就需要在在删除的时候候带一个参数数cascaade; n 用户管理的的综合案例概述:创建的新新用户是没有有任何权限的的,甚至连登登陆的数据库库的权限都没没有,需要为为其指定相应应的权限。给给一个用户赋赋权限使用命命令grannt,回收权权限使用命令令revokke。为了给讲清楚用用户的管理,这这里我给大家家举一个案例例。SQL coonn xiiaominng/m122; ERROR: ORA-010045: uuser XXIAOMIING laacks CCREATEE SESSSI
8、ON pprivillege; logonn deniied警告: 您不再再连接到 OORACLEE。SQL shhow usser; USER 为 SQL coonn syystem/p;已连接。 SQL grrant cconnecct to xiaomming;授权成功。 SQL coonn xiiaominng/m122;已连接。 SQL注意:grannt connnect to xiiaominng;在这里里,准确的讲讲,connnect不是是权限,而是是角色。 看图: 现现在说下对象象权限,现在在要做这么件件事情: * 希望xiaaomingg用户可以去去查询empp表 * 希望x
9、iaaomingg用户可以去去查询scoott的emp表 grantt seleect onn emp to xiiaominng * 希望xiaaomingg用户可以去去修改scoott的emp表 grantt updaate onn emp to xiiaominng* 希望xiaaomingg用户可以去去修改/删除,查询询,添加sccott的emp表 grantt all on emmp to xiaomming* scottt希望收回xiiaominng对emp表的查查询权限 revokke sellect oon empp fromm xiaooming /对权限的维维护。* 希望x
10、iaaomingg用户可以去去查询scoott的emp表/还希望xiaaomingg可以把这个个权限继续给给别人。-如果是对象象权限,就加加入 witth graant opptiongrant sselectt on eemp too xiaooming with grantt optiion我的操作过程: SQL cconn sscott/tigerr;已连接。SQL grrant sselectt on sscott.emp tto xiaaomingg withh grannt opttion;授权成功。SQL coonn syystem/p;已连接。SQL crreate user
11、xiaohhong iidentiified by m1123;用户已创建。SQL grrant cconnecct to xiaohhong;授权成功。 SQL coonn xiiaominng/m122;已连接。SQL grrant sselectt on sscott.emp tto xiaaohongg;授权成功。 -如果是系统统权限。system给给xiaomming权限限时: grant conneect too xiaooming with adminn optiion问题:如果sccott把xiaomming对emp表的查查询权限回收收,那么xiiaohonng会怎样?答案:被
12、回收。下面是我的操作作过程:SQL coonn sccott/ttiger;已连接。SQL reevoke selecct on emp ffrom xxiaomiing;撤销成功。 SQL coonn xiiaohonng/m1223;已连接。SQL seelect * froom scoott.emmp; select * froom scoott.emmp *第 1 行出现现错误:ORA-009942: 表表或视图不存存在结果显示:小红红受到诛连了了。 n 使用proofile管管理用户口令令概述:proffile是口口令限制,资资源限制的命命令集合,当当建立数据库库的,oraacle会
13、自自动建立名称称为defaault的profiile。当建建立用户没有有指定proofile选选项,那么ooraclee就会将deffault分分配给用户。 1.账户锁定概述:指定该账账户(用户)登陆时最多多可以输入密密码的次数,也也可以指定用用户锁定的时时间(天)一般用dbaa的身份去执执行该命令。例子:指定sccott这个个用户最多只只能尝试3次登陆,锁锁定时间为22天,让我们们看看怎么实实现。创建pprofille文件SQL crreate profiile loock_acccountt limiit faiiled_llogin_attemmpts 33 passsword_lock
14、_time 2; SQL allter uuser sscott profiile loock_acccountt; 2.给账户(用用户)解锁 SQL allter uuser ttea acccountt unloock; 3.终止口令为了让用户定期期修改密码可可以使用终止止口令的指令令来完成,同同样这个命令令也需要dbba的身份来来操作。例子:给前面创创建的用户ttea创建一一个proffile文件件,要求该用用户每隔100天要修改自自己的登陆密密码,宽限期期为2天。看看怎怎么做。SQL crreate profiile myyprofiile liimit ppasswoord_liif
15、e_tiime 100 passsword_gracee_timee 2; SQL allter uuser ttea prrofilee myprrofilee;口令历史概述:如果希望望用户在修改改密码时,不不能使用以前前使用过的密密码,可使用用口令历史,这这样oraccle就会将将口令修改的的信息存放到到数据字典中中,这样当用用户修改密码码时,oraacle就会会对新旧密码码进行比较,当当发现新旧密密码一样时,就就提示用户重重新输入密码码。例子:1)建立proofileSQLcreeate pprofille passswordd_histtory llimit passwword_lli
16、fe_ttime 110 passswordd_gracce_timme 2 ppasswoord_reeuse_ttime 110 passworrd_reuuse_tiime /指定口令可可重用时间即即10天后就可可以重用2)分配给某个个用户 n 删除proofile概述:当不需要要某个proofile文文件时,可以以删除该文件件。SQL drrop prrofilee passsword_histoory 【casadde】注意:文件删除除后,用这个个文件去约束束的那些用户户通通也都被被释放了。加了casadde,就会把把级联的相关关东西也给删删除掉4. HYPERLINK /blog/
17、607467 oraccle表的管管理(数据类类型,表创建建删除,数据据 CRUDD操作)内容介绍 1.上节回回顾 2.oraacle的表表的管理 3.基本查查询 4.复杂查查询 5.oraacle数据据库的创建期期望目标 1.掌握ooraclee表的管理(创创建/维护) 2.掌握对对oraclle表的各种种查询技巧 3.学会创创建新的orracle数数据库 oracle的的表的管理表名和列的命名名规则 必须以字母母开头 长度不能超超过30个字符 不能使用ooraclee的保留字 只能使用如如下字符 AA-Z,a-z,0-9,$,#等oracle支支持的数据类类型n 字 符类 char 定长
18、最最大20000个字符。例子:charr(10) 小韩前四个字符符放小韩,后添6个空格补全全 如小韩 varchhar2(220) 变变长 最大40000个字符。例子:varcchar2(10) 小韩 oraccle分配四四个字符。这这样可以节省省空间。clob(chharactter laarge oobjectt) 字符型型大对象 最最大4Gchar 查询询的速度极快快浪费空间,查查询比较多的的数据用。varcharr 节省空间间 n 数字型number范范围 -100的38次方 到到 10的38次方可以表示整数,也也可以表示小小数 number(5,2)表示一位小数有有5位有效数,22位
19、小数范围:-9999.99到999.999number(5)表示一个5位整整数范围999999到-999999 n 日期类型 date 包含含年月日和时时分秒 oraclle默认格式式 1-11月-19999 timestaamp 这是是oraclle9i对date数据据类型的扩展展。可以精确确到毫秒。n 图片 blob 二进进制数据 可可以存放图片片/声音 4GG 一般般来讲,在真真实项目中是是不会把图片片和声音真的的往数据库里里存放,一般般存放图片、视视频的路径,如如果安全需要要比较高的话话,则放入数数据库。怎样样创建表 n 建表 -学生表 create tablee studdent (
20、 表名 xhh nummber(44), -学号 xmm vvarchaar2(200), -姓名 seex chaar(2), -性别 biirthdaay datte, -出生生日期 saal nummber(77,2) -奖学学金); -班级表 CREATE TABLEE classs(classIdd NUMBBER(2),cName VVARCHAAR2(400);修改表n 添加一个字字段SQLALTTER TAABLE sstudennt addd (claassId NUMBEER(2); n 修修改一个字段段的长度SQLALTTER TAABLE sstudennt MODDI
21、FY (xm VAARCHARR2(30); n 修改字段段的类型/或是名字(不不能有数据) 不建议做SQLALTTER TAABLE sstudennt moddify (xm CHHAR(300); n 删除一个字字段 不建议做做(删了之后,顺顺序就变了。加加就没问题,应应为是加在后后面) SQLALTTER TAABLE sstudennt DROOP COLLUMN ssal; n 修改表的名名字 很少有有这种需求SQLRENNAME sstudennt TO stu; n 删除表 SQLDROOP TABBLE sttudentt;添加数据 n 所有字段都都插入数据INSERT IN
22、TO studeent VAALUES (A0001, 张三, 男, 001-5月-05, 10); oracle中中默认的日期期格式dd-moon-yy dd日子(天天) monn 月份 yyy 2位的的年 09-6月-99 19999年6月9日修改日期的默认认格式(临时时修改,数据据库重启后仍仍为默认;如如要修改需要要修改注册表表)ALTER SSESSIOON SETT NLS_DATE_FORMAAT =yyyyy-mmm-dd;修改后,可以用用我们熟悉的的格式添加日日期类型: INSERTT INTOO studdent VVALUESS (A0002, MIKEE, 男男, 119
23、05-005-06, 10); n 插入部分字字段INSERT INTO studeent(xhh, xm, sex) VALUUES (A003, JOOHN, 女); n 插入空值值INSERT INTO studeent(xhh, xm, sex, birtthday) VALUUES (A004, MAARTIN, 男, nuull);问题来了,如果果你要查询sstudennt表里birtthday为为null的记记录,怎么写写sql呢?错误写法:seelect * froom stuudent wheree birtthday = nulll;正确写法:seelect * froom
24、 stuudent wheree birtthday is nuull;如果要查询biirthdaay不为nulll,则应该这这样写: selectt * frrom sttudentt wherre birrthdayy is nnot nuull;修改数据n 修改一个字字段UPDATE studeent SEET sexx = 女女 WHEERE xhh = AA001; n 修改多个字字段UPDATE studeent SEET sexx = 男男, biirthdaay = 1984-04-011 WHEERE xhh = AA001;修改含有nulll值的数据据不要用 = nnull
25、 而而是用 iss nulll; SELECTT * FRROM sttudentt WHERRE birrthdayy IS nnull;n 删除数据DELETE FROM studeent;删除所有记录,表表结构还在,写写日志,可以以恢复的,速速度慢。Delete 的数据可以以恢复。savepoiint a; -创建建保存点DELETE FROM studeent; rollbacck to a; 恢复到保保存点一个有经验的DDBA,在确确保完成无误误的情况下要要定期创建还还原点。DROP TAABLE sstudennt; 删除表的结结构和数据; deletee fromm studde
26、nt WWHERE xh = A0011; 删除一条记记录; truncaate TAABLE sstudennt; 删除表中的的所有记录,表表结构还在,不不写日志,无无法找回删除除的记录,速速度快。5. HYPERLINK /blog/608779 oraccle表查询询(1)n 介绍在我们讲解的过过程中我们利利用scottt用户存在在的几张表(emp,dept)为大家演示如何使用select语句,select语句在软件编程中 非常有用,希望大家好好的掌握。emp 雇员表表 clerk 普员工salesmaan 销售managerr 经理analystt 分析师presideent 总总裁m
27、gr 上级级的编号hiredatte 入职时时间sal 月工资资comm 奖金金deptno 部门deptt部门表deptno 部门编号accountting 财财务部researcch 研发发部operatiions 业业务部loc 部门所所在地点salgradde 工工资级别grade 级别losal 最低工工资hisal 最高工工资简单的查询语句句n 查看表结构构DESC emmp; n 查询所有有列SELECT * FROOM deppt;切忌动不动就用用selecct *SET TIMMING OON; 打开开显示操作时时间的开关,在在下面显示查查询时间。CREATE TABLEE
28、userrs(useerId VVARCHAAR2(100), uNName VVARCHAAR2 (220), uuPassww VARCCHAR2(30); INSERT INTO userss VALUUES(aa0001, 啊啊啊啊啊, aaaaaaaaaaaaaaaaaaaaaaaaaaa); -从自己复复制,加大数数据量 大概概几万行就可可以了 可以用来来测试sqll语句执行效效率INSERT INTO userss (useerId,UUNAME,UPASSSW) SEELECT * FROOM useers; SELECT COUNTT (*) FROM userss;统计行数
29、数n 查询指定列列SELECT enamee, sall, jobb, depptno FFROM eemp; n 如何取消重重复行DISSTINCTTSELECT DISTIINCT ddeptnoo, jobb FROMM emp;?查询SMITTH所在部门门,工作,薪薪水SELECT deptnno,jobb,sal FROM emp WWHERE enamee = SSMITH;注意:oraccle对内容容的大小写是是区分的,所所以enamme=SMMITH和和enamee=smiith是不不同的n 使用算术表表达式 nnvl nnull问题:如何显示示每个雇员的的年工资?SELECT
30、 sal*113+nvll(commm, 0)*13 年年薪 , enamee, commm FROOM empp; n 使用列的的别名SELECT enamee 姓名, ssal*122 AS 年收入 FFROM eemp; n 如何处理理null值使用nvl函数数来处理n 如何连接字字符串(|)SELECT enamee | is a | jobb FROMM emp; n 使用wheere子句问题:如何显示示工资高于33000的 员工? SELECTT * FRROM emmp WHEERE saal 33000;问题:如何查找找1982.1.1后入入职的员工? SELECTT enam
31、me,hirredatee FROMM emp WHEREE hireedate 1-11月-19822;问题:如何显示示工资在20000到3000的员员工? SELECTT enamme,sall FROMM emp WHEREE sal =20000 ANDD sal 5500 orr job = MAANAGERR) annd enaame LIIKE JJ%; n 使用ordder byy 字句 默认asc问题:如何按照照工资的从低低到高的顺序序显示雇员的的信息? SELECTT * FRROM emmp ORDDER byy sal;问题:按照部门门号升序而雇雇员的工资降降序排列SE
32、LECT * FROOM empp ORDEER by deptnno, saal DESSC; n 使用列的别别名排序问题:按年薪排排序select enamee, (saal+nvll(commm,0)*12 年年薪 frrom emmp ordder byy 年薪 assc;别名需要使用“”号圈中,英文不需要要“”号n 分页查询等学了子查询再再说吧。Clear 清清屏命令oracle表表复杂查询n 说明在实际应用中经经常需要执行行复杂的数据据统计,经常常需要显示多多张表的数据据,现在我们们给大家介绍绍较为复杂的的selecct语句n数据分组 max,min, avg, sum, coun
33、nt问题:如何显示示所有员工中中最高工资和和最低工资?SELECT MAX(ssal),mmin(saal) FRROM emmp e; 最高工资那个人人是谁?错误写法:seelect enamee, sall fromm emp wheree sal=max(ssal);正确写法:seelect enamee, sall fromm emp wheree sal=(seleect maax(sall) froom empp);注意:seleect enname, max(ssal) ffrom eemp;这语语句执行的时时候会报错,说说ORA-000937:非单组分组组函数。因为为max是分
34、组组函数,而eename不不是分组函数数但是selecct minn(sal), maxx(sal) fromm emp;这句是可以以执行的。因因为min和max都是分分组函数,就就是说:如果果列里面有一一个分组函数数,其它的都都必须是分组组函数,否则则就出错。这这是语法规定定的问题:如何显示示所有员工的的平均工资和和工资总和?问题:如何计算算总共有多少少员工问题:如何扩展要求:查询最高工资员员工的名字,工工作岗位SELECT enamee, jobb, sall FROMM emp e wheere saal = (SELECCT MAXX(sal) FROMM emp);显示工资高于平平均
35、工资的员员工信息SELECT * FROOM empp e whhere ssal (SELEECT AVVG(sall) FROOM empp); n groupp by 和和 haviing子句group bby用于对查查询的结果分分组统计,having子子句用于限制制分组显示结结果。问题:如何显示示每个部门的的平均工资和和最高工资?SELECT AVG(ssal), MAX(ssal), deptnno FROOM empp GROUUP by deptnno;(注意:这里暗暗藏了一点,如如果你要分组组查询的话,分分组的字段ddeptnoo一定要出现现在查询的列列表里面,否否则会报错。因
36、因为分组的字字段都不出现现的话, 就就没办法分组组了)问题:显示每个个部门的每种种岗位的平均均工资和最低低工资? SELECT min(ssal), AVG(ssal), deptnno, joob FROOM empp GROUUP by deptnno, joob;问题:显示平均均工资低于22000的部部门号和它的的平均工资?SELECT AVG(ssal), MAX(ssal), deptnno FROOM empp GROUUP by deptnno havving AAVG(saal) 2000; n 对数据分组组的总结1 分组函数只只能出现在选选择列表、hhavingg、order
37、r by子句句中(不能出现在在wheree中) 2 如果在seelect语语句中同时包包含有grooup byy, havving, orderr by 那那么它们的顺顺序是grooup byy, havving, orderr by 3 在选择列中中如果有列、表表达式和分组组函数,那么么这些列和表表达式必须有有一个出现在在groupp by 子子句中,否则则就会出错。如SELECTT depttno, AAVG(saal), MMAX(saal) FRROM emmp GROOUP byy depttno HAAVING AVG(ssal) sellect * fromm salggrade
38、;GRADE LOSSAL HISSAL 1 7700 200 2 12001 14000 33 11401 20000 4 20011 3000 5 30001 99999 SELLECT ee. enaame, ee.sal, s.grrade FFROM eemp e, salggrade s WHEERE e.sal BBETWEEEN s.llosal AND ss.hisaal;扩展要求:问题:显示雇员员名,雇员工工资及所在部部门的名字,并并按部门排序序? SELECTT e.enname, e.sall, d.ddname FROM emp ee, deppt d WWHERE
39、e.depptno = d.deeptno ORDERR by ee.depttno;(注意:如果用用groupp by,一一定要把e.deptnno放到查询询列里面)n 自连接自连接是指在同同一张表的连连接查询问题:显示某个个员工的上级级领导的姓名名?比如显示员工FORD的上级SELECT workeer.enaame, bboss.eename FROM emp wworkerr,emp boss WHEREE workker.mggr = bboss.eempno AND wworkerr.enamme = FORD;子查询 n 什么是子查查询子查询是指嵌入入在其他sqql语句中的的se
40、lecct语句,也也叫嵌套查询询。n 单行子查询询单行子查询是指指只返回一行行数据的子查查询语句请思考:显示与与SMITHH同部门的所所有员工?思路:1 查询出SMMITH的部部门号select deptnno froom empp WHERRE enaame = SMITTH; 2 显示SELECT * FROOM empp WHERRE depptno = (sellect ddeptnoo fromm emp WHEREE enamme = SMITHH);数据库在执行ssql 是从从左到右扫描描的, 如果果有括号的话话,括号里面面的先被优先先执行。n 多行子查询询多行子查询指返返回多行
41、数据据的子查询请思考:如何查查询和部门110的工作相相同的雇员的的名字、岗位位、工资、部部门号SELECT DISTIINCT jjob FRROM emmp WHEERE deeptno = 10; SELECT * FROOM empp WHERRE jobb IN (SELECCT DISSTINCTT job FROM emp WWHERE deptnno = 110);(注意:不能用用job=.,因为等等号=是一对一的的)n 在多行子查查询中使用aall操作符符问题:如何显示示工资比部门门30的所有员员工的工资高高的员工的姓姓名、工资和和部门号? SELECTT enamme, sa
42、al, deeptno FROM emp WWHERE sal all (SELEECT saal FROOM empp WHERRE depptno = 30);扩展要求:大家想想还有没没有别的查询询方法。SELECT enamee, sall, depptno FFROM eemp WHHERE ssal (SELEECT MAAX(sall) FROOM empp WHERRE depptno = 30);执行效率上, 函数高得多多 n 在多行子查查询中使用aany操作符符问题:如何显示示工资比部门门30的任意一一个员工的工工资高的员工工姓名、工资资和部门号? SELECTT enamm
43、e, saal, deeptno FROM emp WWHERE sal ANY (SELEECT saal FROOM empp WHERRE depptno = 30);扩展要求:大家想想还有没没有别的查询询方法。SELECT enamee, sall, depptno FFROM eemp WHHERE ssal (SELEECT miin(sall) FROOM empp WHERRE depptno = 30); n 多列子查询询单行子查询是指指子查询只返返回单列、单单行数据,多多行子查询是是指返回单列列多行数据,都都是针对单列列而言的,而而多列子查询询是指查询返返回多个列数数据的子
44、查询询 语句。请思考如何查询询与SMITTH的部门和和岗位完全相相同的所有雇雇员。SELECT deptnno, joob FROOM empp WHERRE enaame = SMITTH; SELECT * FROOM empp WHERRE (deeptno, job) = (SSELECTT depttno, jjob FRROM emmp WHEERE enname = SMIITH); n 在fromm子句中使用用子查询请思考:如何显显示高于自己己部门平均工工资的员工的的信息思路:1. 查出各个个部门的平均均工资和部门门号SELECT deptnno, AVVG(sall) mys
45、sal FRROM emmp GROOUP byy depttno; 2. 把上面的的查询结果看看做是一张子子表SELECT e.enaame, ee.depttno, ee.sal, ds.mmysal FROM emp ee, (SEELECT deptnno, AVVG(sall) myssal FRROM emmp GROOUP byy depttno) dds WHEERE e.deptnno = dds.depptno AAND e.sal ds.mmysal;如何衡量一个程程序员的水平平?网络处理能力, 数据库, 程序代码的的优化程序的的效率要很高高小总结:在这里需要说明明的当在
46、frrom子句中中使用子查询询时,该子查查询会被作为为一个视图来来对待,因此此叫做内嵌视视图,当在ffrom子句句中使用子查查询时,必须须给 子查询询指定别名。注意:别名不能能用as,如:SELLECT ee.enamme, e.deptnno, e.sal, ds.myysal FFROM eemp e, (SELLECT ddeptnoo, AVGG(sal) mysaal FROOM empp GROUUP by deptnno) ass ds WWHERE e.depptno = ds.ddeptnoo AND e.sall dss.mysaal;在ds前不能加加as,否则会会报错 (
47、给表取取别名的时候候,不能加aas;但是给给列取别名,是是可以加ass的)n 分页查询按雇员的id号号升序取出oracle的的分页一共有有三种方式1.根据rowwid来分 selecct * ffrom tt_xiaooxi whhere rrowid in (sselectt rid from (seleect roownum rn, rrid frrom(seelect rowidd rid, cid from t_xiaaoxi oorder by ciid dessc) whhere rrownumm99880) orrder bby cidd descc;执行时间0.003秒2.按分
48、析函数数来分select * froom (seelect t.*, row_nnumberr() ovver(orrder bby cidd descc) rk from t_xiaaoxi tt) wheere rkk99980;执行时间1.001秒 3.按rownnum来分 selecct * ffrom (selecct t.*,rownnum rnn fromm(seleect * from t_xiaaoxi oorder by ciid dessc)t wwhere rownuum99980;执行时间0.11秒其中t_xiaaoxi为表表名称,ciid为表的关关键字段,取取按ci
49、d降序排排序后的第99981-99999条记记录,t_xxiaoxii表有700000多条 记记录。个人感觉1的效效率最好,33次之,2最差。/测试通过的的分页查询ookokokk select * froom (seelect a1.*, rownnum rnn fromm(seleect enname,jjob frrom emmp) a11 wherre rowwnum=5;下面最主要介绍绍第三种:按按rownuum来分1. rownnum 分页页SELECT * FROOM empp; 2. 显示roownumoraclle分配的 SELECT e.*, ROWNUUM rn FROM
50、 (SELEECT * FROM emp) e;rn相当于Orracle分分配的行的IID号3.挑选出610条记录先查出1-100条记录SELECT e.*, ROWNUUM rn FROM (SELEECT * FROM emp) e WHEERE ROOWNUM =6是不不行的, 4. 然后查查出6-100条记录 SELECT * FROOM (SEELECT e.*, ROWNUUM rn FROM (SELEECT * FROM emp) e WHEERE ROOWNUM = 66; 5. 几个查询询变化 a. 指定查询询列,只需要要修改最里层层的子查询只查询雇员的编编号和工资SELE
51、CT * FROOM (SEELECT e.*, ROWNUUM rn FROM (SELEECT enname, sal FFROM eemp) ee WHERRE ROWWNUM = 6; b. 排序查询询,只需要修修改最里层的的子查询工资排序后查询询6-10条数数据SELECT * FROOM (SEELECT e.*, ROWNUUM rn FROM (SELEECT enname, sal FFROM eemp ORRDER bby sall) e WWHERE ROWNUUM = 6; n 用查询结果果创建新表这个命令是一种种快捷的建表表方式CREATE TABLEE mytaab
52、le (id, nname, sal, job, deptnno) ass SELEECT emmpno, enamee, sall, jobb, depptno FFROM eemp;创建好之后,ddesc mmytablle;和seleect * from mytabble;看看看结果如何?n 合并查询有时在实际应用用中,为了合合并多个seelect语语句的结果,可可以使用集合合操作符号uunion,unionn all,interrsect,minuss多用于数据量比比较大的数据据局库,运行行速度快。1). Uniion该操作符用于取取得两个结果果集的并集。当当使用该操作作符时,会自自动
53、去掉结果果集中重复行行。SELECT enamee, sall, jobb FROMM emp WHEREE sal 25000 UNIONSELECT enamee, sall, jobb FROMM emp WHEREE job = MAANAGERR; 2).uniion alll该操作符与unnion相似似,但是它不不会取消重复复行,而且不不会排序。SELECT enamee, sall, jobb FROMM emp WHEREE sal 25000UNION AALLSELECT enamee, sall, jobb FROMM emp WHEREE job = MAANAGERR
54、;该操作符用于取取得两个结果果集的并集。当当使用该操作作符时,会自自动去掉结果果集中重复行行。3). Inttersecct使用该操作符用用于取得两个个结果集的交交集。SELECT enamee, sall, jobb FROMM emp WHEREE sal 25000INTERSEECTSELECT enamee, sall, jobb FROMM emp WHEREE job = MAANAGERR; 4). Miinus使用改操作符用用于取得两个个结果集的差差集,他只会会显示存在第第一个集合中中,而不存在在第二个集合合中的数据。SELECT enamee, sall, jobb FRO
55、MM emp WHEREE sal 25000MINUSSELECT enamee, sall, jobb FROMM emp WHEREE job = MAANAGERR;(MINUS就就是减法的意意思)创建数据库有两两种方法:1). 通过ooraclee提供的向导导工具。databasse Connfigurrationn Assiistantt 【数据据库配置助手手】2).我们可以以用手工步骤骤直接创建。 7. HYPERLINK /blog/611443 javaa操作oraacle内容介绍1.上节回顾2.java程程序如何操作作oraclle 3.如何在oraacle中操操作数据 4
56、4.oraccle事务处处理 5.ssql函数的的使用 期望目标 1.掌握oraccle表对数数据操作技巧巧 2.掌握在javva程序中操操作oraccle 3.理解oraccle事物概概念 4.掌握oraccle各种sql函数 java连接接oraclle n 介介绍 前面我我们一直在pplsql中中操作oraacle,那那么如何在jjava 程程序中操作数数据库呢? 下面我们举举例说明,写写一个javva,分页显显示emp表的用用户信息。 Java 代码码 1. packkage ccom.spp; 2. 3. impoort jaava.sqql.Connnectiion; 4. imp
57、oort jaava.sqql.DriiverMaanagerr; 5. impoort jaava.sqql.RessultSeet; 6. impoort jaava.sqql.Staatemennt; 7. 8. /演示示 如何使用用 jdbcc_odbcc桥连接方式式 9. publlic cllass TTestOrracle 10. 11. publlic sttatic void main(Strinng aargs) 12. try 13. 14. / 1.加加载驱动 15. CClass.forNaame(ssun.jddbc.oddbc.JddbcOdbbcDrivver)
58、; 16. 17. / 2.得得到连接 18. CConnecction ct = DriveerManaager.ggetConnnectiion( 19. jddbc.oddbc:teestConnnectOOraclee, sscott, 20. 21. tiiger); 22. 23. / 从下面面开始,和SSQL Seerver一一模一样 24. SStatemment ssm = cct.creeateSttatemeent(); 25. RResulttSet rrs = ssm.exeecuteQQuery(seleect * from emp); 26. wwhile (rs
59、.nnext() 27. /用户名 28. Syystem.out.pprintlln(用户户名: +rs.getSttring(2); 29. /默认是从1开始编号的的 30. 31. cattch (EExcepttion ee) 32. ee.prinntStacckTracce(); 33. 34. 35. packagee com.sp;import java.sql.CConnecction;import java.sql.DDriverrManagger;import java.sql.RResulttSet;import java.sql.SStatemment;/演示 如如何
60、使用 jjdbc_oodbc桥连连接方式public classs TesttOraclle public statiic voiid maiin(Strring argss) try / 1.加载载驱动Class.fforNamme(suun.jdbbc.odbbc.JdbbcOdbccDriveer);/ 2.得到到连接Connecttion cct = DDriverrManagger.geetConnnectioon(jdbc.oodbc:ttestCoonnecttOraclle, scottt, tiger);/ 从下面开开始,和SQQL Serrver一模模一样Statemeen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年侨办事业单位招聘面试华侨华人历史研究认知题
- 2026年政务服务窗口无否决权机制执行及说不事项报备题库
- 2026年乡镇干部林区吸烟人员管理专项题库
- 2026年驾驶员面试中常见问题回答技巧
- 2026年中医药知识要点与测试题库
- 2026年征兵工作条例应知应会测试试题
- 三、防范和抵御邪教说课稿2025学年小学综合实践活动沪科黔科版六年级下册-沪科黔科版
- 2026年IT技术支持与客户服务规范考试
- 2026年生态产品价值实现机制知识竞赛题
- 农村自建房边坡防护施工方案
- 重庆聚硅氮烷项目可行性研究报告(模板范文)
- (二模)贵阳市2025年高三年级适应性考试(二)语文试卷
- 血透工程师试题及答案
- 2024年多人承诺协议书模板
- 3个人合股合同协议书范文模板
- 常住人口登记表
- 2024-2025学年全国中学生天文知识竞赛考试题库(含答案)
- 储备成品油管理制度
- 乳房肿块护理查房课件
- 管网工程施工方案
- 第四章-无机反应机理和无机化合物的合成方法
评论
0/150
提交评论