ORACLE_SID数据库相关资料_第1页
ORACLE_SID数据库相关资料_第2页
ORACLE_SID数据库相关资料_第3页
ORACLE_SID数据库相关资料_第4页
ORACLE_SID数据库相关资料_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

1、Day01SQL(structure query language)DB databaseDDL(datta deffinitiion laanguagge)数据定定义语言:ccreatee tablle/altter taalbe/ddrop ttalbecolumn,data type,widthhconstraaintDML(Datta mannipulaation languuage)数数据操作语言言:inseert,uppdate,delette(增,删删,改)rowTCL(traansacttion(事事务) coontroll langguage)事务控制语语言:事务核核心语句:

2、ccommitt提交、roollbacck回滚DCL(graant授权 revokke收回权限限)DQL(datta queery laanguagge)数据查查询语言:sselecttR(关系型)DDBMS数据库产商 数数据库名版本oracle oraclle10g oraclle10.22.0IBM db2MS SQL sserverrSYBASE SEMMYSQLORACLESID 数数据库对应的的实例的名字字(即一个具具体数据库的的名称)创建数据库其实实是创建了:数据文件,日日志文件,操操作文件。 SGGA进程 insstancee与应用程序序1.空值(NULLL)在输入数数据时,该字

3、字段没有指定定值,并且没没有空值不等于0空值不等于空格格算术表达式中包包含空值导致致结果为空在算术表达式中中包含空值需需要用空值转转换函数cooalescce处理2.空值转换函函数coalescce函数(通通用)数据类型可以是是数值nummber、字字符charracterr、日期daate数据类型必须匹匹配NVL(p1,p2)函数数(oralle专用)nvl(p1,p2)if p1 iis nulll theenreturnn p2;elsereturnn p1;end if;3.拼接运算符符用于连接多个字字段的值拼接接在一起,特特殊符号放在在单引号里3.文字字符串串用 单引号表示示4.di

4、stiinct关键键字,去掉重重复值从distinnct开始到到from中中所有字段的的联合中有重重复的去重(注注意,是联合合起来的重复复)distincct后跟多跟跟distincct应用到sselectt后面所有列列,所有列联联合起来唯一一如果selecct后面跟ddistinnct关键字字,一定是直直接跟在seelect后后面,前面没没有任何内容容。5.wheree的作用用where子子句对表里的的记录进行过过滤1.)wherre子句跟在在FROM子子句之后2.)wherre子句后跟跟条件表达式式列名、表达式(比比如:sallary112)、常 量比较运算符文字值3.)wherre子句后

5、不不能跟别名总结:1)wheree子句执行在在前,sellect执行行在后,别名名不能放在wwhere子子句2)select salarry*12 ann_ssal frrom s_emp wwhere salarry*121200select salarry*12 ann_ssal frrom s_emp wwhere salarry10000(能提搞搞查询效率)salary可可建立索引,索索引的目的,提提高查询效率率3)wheree子句能不用用表达式尽量量不用表达式式;4)wheree子句中的列列为字符类型型字符串必面用单单引号括起来来字符串是大小写写敏感6.比较和逻辑辑运算符1)逻辑比较

6、运运算符 2)SQL比较较运算符betweenn andd :表示一一个范围,是是闭区间orin表示一个集集合,是离散散值,含义为为等于其中任任意一个值,等等价于 :anyin(X,Y,ZZ):表示符符合X,Y,ZZ的 。等价价于 deept = any(XX,Y,Z),表示等于于任意一个7.LIKE运运筧符在字符串比较中中,可用liike和通配配符进行查找找通配符种类:与表示0或多个个字符表示任意单个个字符8.is nuull运算符符is nulll是判断是否否为空测试NULL值值需要用ISS NULLL运算符NULL不能用用等于()和和不等于()跟任何何值比较,包包括它自身。所所以 ,不能

7、能使用或来测试一一列是否有空空值9.is noot nulll运算符表示不为空10.运算符符的否定形式式逻辑比较运算符符!SQL比较运算算符NOT BETTWEEN ANDNOT IN ALLL(并且关系系,注意别让让NULL在在NOT IIN里出现) IN(或者者关系) NOT LIKKENOT IS NULL11.ORDEER BY子子句用ORDER BY 子句句查询出来的的结果集进行行排序ASC:升序,默默认DESC:降序序ORDER BBY是SELLECT语句句中的最后一一个子句ORDER BBY执行于SSELECTT语句之后ORDER BBY 之后可可以跟字段名名,别名,字字段顺号,

8、表表达式(尽量量不用)NULL值在排排序中的显显显升序显示在最后后除序显示在前面面(NULLL值表示无穷穷大)按多列进行排序序ORDER BBY 后面的的列可以不出出现在SELLECT后面面Day02一、SQL函数数的两种类型型单行函数 字符类型(ccharaccter)数值(nummber)日期(datte)转换多行函数(组函函数)1.单行函数where 后后跟条件表达达式,还可以以跟单行函数数表达式或函数的的写法导致索索引用不了大小写转换函数数LOWER()转转小写UPPER()转转大写一般用于 innsert语语句中,便于于以后操作(查查询)方便,没没有大小写限限制参数为列名或常常量,调

9、常量,用frrom duual(系统统表,只有一一条记录)INITCAPP()首字线线大写concat()拼接 selecct conncat(He,llo, Worrld) Helllo frrom duual;求子串:subbstr(strinng,1,3)参数:字符串,起起始位,截取取个数求长度:lenngth(sstringg)参数:字字符串select substtr(firrst_naame,leength(firstt_namee)-1,22) froom s_eemp ;左对齐:lpaad(sttring,返回长度度,不不够就补符符号),位数数不够的,左左边补指定字字符sele

10、ct deptnno,lpaad(depptno,55,) fromm deptt;右对齐rpadd()select deptnno,rpaad(depptno,55,!) fromm deptt;数值函数四舍五入rouund(数,精精度) 如round(45.7223,2) 得45.772 round(45.7223,1) 得50 round(45.7223,1)得得46截取truncc(数,起始始截取点)如round(45.7223,2) 得45.772round(445.7233,1)得得45-1表示保留到到十位数,00保留到个位位数,1保留留一位小数,依依此类推select round

11、d(44.7723,-11) froom duaal;40select roundd(44.7723) ffrom ddual;445select roundd(44.3323) ffrom ddual;444select roundd(44.3323,1) fromm duall;44.33select roundd(44.3373,1) fromm duall;44.44系统自动调用的的函数(隐式式调用,orracle的的自动转换函函数一般都趋趋向于字符串串转数值)to_numbber(数字字字符),返返回数值(注注意一定要是是数字字符)select to_nuumber(12)*10 f

12、from ddual;得得120select * froom tesst wheere c11 = 100;select * froom tesst wheere too_numbber(c11) = 110;这语句句会导致索引引用不了,所所以表达式一一定要做到数数据类型匹配配。to_numbber()select to_nuumber(!$,xx) fromm duall;(xxx代表两位位十六进制)得171to_charr(数值,格格式)函数9:代表数字位位select to_chhar(saalary,$9) fromm s_emmp;0:当定义宽度度大于实际值值宽度时,00会被强制显显

13、示在前面,以以补齐位数select to_chhar(saalary,000,000,000.0000) frrom s_emp;select to_chhar(saalary,909,099,9999.9990) ffrom ss_emp;select to_chhar(2335,9000,00.00) from s_empp;:代表美元的的货币符号select to_chhar(saalary,$99,999.999) ffrom ss_emp;L:本地货币符符号select to_chhar(saalary,L99,999.999) ffrom ss_emp;(跟环境变量有有关)设置中文

14、B HHELLLNLSLANNG=SIIMPLIFFIED CCHINESSE_CHIINA.ZHHS16GBBKexport NLS_LLANG设置英文 NLS_LANNG=AMEERICANN_AMERRICA.UUS7ASCCIIexport NLS_LLANG直接在SQL环环境下alter ssessioon sett nls_languuage=simpllifiedd chinnese;alter ssessioon sett nls_languuageAAMERICCAN_AMMERICAA.US7AASCII;C SHELLLsetenv NLSLLANG=SIMPLLIFIE

15、DD CHINNESE_CCHINA.ZHS166GBKsetenv NLS_LLANG=AAMERICCAN_AMMERICAA.US7AASCII.如查显示位数数不足(定义义宽度小于实实际长度),用用代替替二、多表查询交叉连接,内连连接,外连接接内连接原理(重重要知识点,查查看另一文件件sql_nnotes.txt)1.交叉连接ccorss:实际上是两两个表中的记记录的笛卡尔尔积(即两张张表组合)列出每个员工在在哪个部门select e.firrst_naame,e.dept_id,d.id, from s_empp e crross jjoin ss_deptt d;(330

16、0条记录录,s_emmp(25)*s_deept(122)=3000)问题:每个员工工都在好多部部门解决方案,用: 表11 joiin 表2 on 两两个表关联字字段匹配表达达式 select e.firrst_naame,e.dept_id,d.id, from s_empp e jooin s_dept d on e.deppt_id=d.id;另一例题select d.id,d.namme,r.nname ffrom ss_deptt d innner jjoin ss_regiion r on d.regioon_id=r.id;2.内连接等值连接(jooin):两两张表有

17、描述述共同属性的的列。常见形形式为你表的的主键和子表表的外键相等等。非等值连接(jjoin):可以用beetweenn and 这样的非等等值运算符将将两张表中的的列写成一个个表达式,所所谓表之间的的关系,实际际指表中的行行(记录)之之间的关系,该该关系通过将将表中的列写写成表达式来来体现。自连接(sellf joiin):同一一张表的列之之间的关系实实际反映的是是同一张表的的行(记录)之之间的关系;通过给表起起别名将同一一张表的列之之间的关系转转换成不同表表的列之间的的关系内连接中包含有有wheree或and时时,都是先连连接后过滤原理:t1表和t2表表做内连接,连连接条件为oon t1.c

18、1 = t2.c22,假设t1表做驱驱动表,t22表做匹配表表,记录的匹匹配过程如下下:1、从t1表中中读取第一条条记录r1,若若它的c1值值为12、根据该值到到t2表中查查找匹配的记记录,即需要要遍历t2表表,从t2表表中的第一条条记录开始,若若该记录(rr1)的c22列的值=11,我们就说说这两条记录录能够匹配上上,那么t11的r1和tt2的r1组组合起来,作作为结果集里里的一条记录录,否则不能能组合起来,即即被过滤掉。3、按照方法22依次将t22表中所有的的记录检测一一遍,只要匹匹配就放入结结果集中4、从t1表中中读取第二条条记录,依次次重复步骤22和3,产生生最终的结果果集t1表和t2

19、表表做内连接,连连接条件为oon t1.c1 = t2.c22,假设t1表做驱驱动表,t22表做匹配表表,记录的匹匹配有如下三三种情况:1、t1表中的的某条记录在在t2中找不不到任何一条条匹配的记录录,那么t11表中的该记记录不会出现现在结果集中中2、t1表中的的某条记录在在t2表中只只有一条匹配配的记录,那那么t1表中中的该记录和和t2表中匹匹配的记录组组合成新记录录出现在结果果集中3、t1表中的的某条记录在在t2表中有有多条匹配的的记录,那么么t1表中的的该记录会和和t2表中每每一条匹配的的记录组合成成新记录出现现在结果集中中4、内连接的核核心为任何一一张表里的记记录一定要在在另一张表中中

20、找到匹配的的记录,否则则不能出现在在结果集中t1表和t2表表做内连接,连连接条件为oon t1.c1 = t2.c22有两种方式都能能得到结果集集记录1、一种t1表表做驱动表,tt2表做匹配配表2、另一种t22表做驱动表表,t1表做做匹配表3、无论哪种方方式最终得到到的结果集都都一样,所不不同的是效率率练习:Carmen在在哪个部门select e.firrst_naame, from s_empp e jooin s_dept d on e.deppt_id=d.id and ee.firsst_namme=Caarmen;Asia地区有有什么部门select d.namme f

21、room s_ddept dd joinn s_reegion r on d.reggion_iid=r.iid andd r.naame=AAsia;Carmen在在哪个地区工工作select e.firrst_naame, from s_empp e jooin s_dept d on e.deppt_id=d.id join s_reggion rr on dd.regiion_idd = r.id annd e.ffirst_name=Carmmen ;Asia地区有有哪些员工select e.firrst_naame frrom s_emp ee joinn s_deep

22、t d on e.dept_id=d.id jooin s_regioon r oon r.iid=d.rregionn_id aand =Asiaa;列出员工名字,工工资,工资级级别select e.enaame,e.sal,ss.gradde froom empp e jooin saalgradde s oon e.ssal beetweenn s.loosal aand s.hisall; 哪些员工的级别别是三级和五五级select e.enaame,e.sal,ss.gradde froom empp e jooin saalgradde s oon e.ssal bee

23、tweenn s.loosal aand s.hisall and s.graade inn (3,55);select firstt_namee,id,mmanageer_id from s_empp; 列出员工名字和和领导名字的的对应关系(一一张表的关系系,给表起别别名)select m.firrst_naame maanagerr,e.fiirst_nname eemployyee frrom s_emp ee joinn s_emmp m oon e.mmanageer_id=m.id;哪些人是领导(在在上题的基础础上,加个ddistinnct)select distiinct mm.

24、firsst_namme mannager from s_empp e jooin s_emp mm on ee.manaager_iid=m.iid;找Carmann,怎么找回回来?用下面知识点解解决3.外连接外连接(outter jooin):(内内连接把匹配配不上的记录录过滤的情况况下用外连接接)语法及原理:t1表和t2表表做外连接,连连接条件为from t11 leftt outeer joiin t2 on t11.c1 = t2.cc2,t1表必须做驱驱动表,t22表做匹配表表,记录的匹匹配过程如下下:1、从t1表中中读取第一条条记录r1,若若它的c1值值为12、根据该值到到t2表

25、中查查找匹配的记记录,即需要要遍历t2表表,从t2表表中的第一条条记录开始,若若该记录(rr1)的c22列的值=11,我们就说说这两条记录录能够匹配上上,那么t11的r1和tt2的r1组组合起来,作作为结果集里里的一条记录录,否则不能能组合起来,即即被过滤掉。3、按照方法22依次将t22表中所有的的记录检测一一遍,只要匹匹配就放入结结果集中,若若扫描完后,tt1的r1记记录在t2表表中找不到任任何匹配的记记录,t2表表中模拟一条条null记记录与t1表表中r1组合合起来,放入入结果集中4、从t1表中中读取第二条条记录,依次次重复步骤22和3,产生生最终的结果果集t1表和t2表表做外连接,连连接

26、条件为from t11 leftt outeer joiin t2 on t11.c1 = t2.cc2,t1表必须做驱驱动表,t22表做匹配表表,1、外连接的结结果集=内连连接的结果集集+t1表中中匹配不上的的记录和一条条null记记录的组合2、外连接的核核心可以将匹匹配不上的记记录找回来,即即一个都不能能少t1表和t2表表做外连接,连连接条件为from t11 righht outter jooin t22 on tt1.c1 = t2.c2,t2表必须做驱驱动表,t11表做匹配表表,1、外连接的结结果集=内连连接的结果集集+t2表中中匹配不上的的记录和一条条null记记录的组合t1表和t

27、2表表做外连接,连连接条件为from t11 fulll outeer joiin t2 on t11.c1 = t2.cc2,t2表必须做驱驱动表,t11表做匹配表表,外连接的结果集集=内连接的的结果集+tt2表中匹配配不上的记录录和一条nuull记录的的组合+t11表中匹配不不上的记录和和一条nulll记录的组组合select distiinct mm.firsst_namme mannager from s_empp e leeft jooin s_emp mm on ee.manaager_iid=m.iid wheere m.managger_idd is nnull;select

28、distiinct nnvl(m.firstt_namee,BOSSS) mmanageer froom s_eemp e left join s_empp m onn e.maanagerr_id=mm.id; 外连接在什么情情况下用:select distiinct ddeptnoo fromm emp;dept表(什么东西里没没有什么,什什么东西里不不包含什么,什什么东西不是是东西等之类类的否定的语语句,用外连连接)哪个部门没有员员工(在表ddept,eemp里操作作)一条记录录(15114+1)select e.enaame,e.deptnno,d.ddeptnoo,d.dnnamef

29、rom emmp e rright join dept d on e.deeptno = d.ddeptnoowhere ee.empnno is null;where在外外连接之后执执行,在内连连接之前执行行and先过滤再再连接where先连连接再过滤注意:内连接中中的and是是先连接再过过滤结论:外连接+is nuull用来解解决否定问题题,不是,不不包含,没有有。哪些人是员工(哪些人不是是领导)?117条记录(44124+17)select m.firrst_naame frrom s_emp ee righht joiin s_eemp m on e.managger_idd=m.id

30、d wherre e.iid is null;哪个部门没有ssmithselect d.dnaamefrom emmp e rright join dept don e.deeptno=d.depptnoand e.eename = SMMITHwhere ee.empnno is null;Day03count统计计所有非空值值select dept_id frrom s_emp wwhere dept_id =331;select countt(*) ffrom ss_emp wheree deptt_id =31;select countt(firsst_namme) frrom s_e

31、mp ;select countt(firsst_namme) frrom s_emp wwhere firstt_namee = CCarmenn;select countt(disttinct dept_id) ffrom ss_emp;有多少个不同职职位select countt(disttinct titlee) froom s_eemp;2.groupp by 列列名(,列名名,列名)select 列名,组函函数from 表where condiitiongroup bby grooup_byy_exprressioonHavingg gruoou_connditioonorder

32、by coolumnwhere先过过滤,再grroup bby ,后sselectt根据groupp by 子子句指定的表表达式,将要要处理的数据据(若有)各个职位的平均均工资?select titlee,avg(salarry) frrom s_emp ggroup by tiitle;每个提成有多少少人?select commiissionn_pct,countt(commmissioon_pctt) froom s_eemp grroup bby commmissiion_pcct;分组时,会把NNULL值都都分加一组;select commiissionn_pct,countt(*)

33、ffrom ss_emp groupp by ccommisssion_pct;42号部门的平平均工资列出平均工资select roundd(avg(salarry) ffrom ss_emp wheree deptt_id = 42;列出平均工资与与 部门号select dept_id,roound(aavg(saalary) froom s_eemp whhere ddept_iid = 442;出错select dept_id,roound(aavg(saalary) froom s_eemp whhere ddept_iid = 442 grooup byy deptt_id;正正确结

34、论:若有groupp by 子子句,sellect后面面可跟grooup byy后面跟的表表达式以及组组函数,其它它会报错如果没有grooup byy 子句,sselectt后面有一个个组函数,其其它都必须是是组函数。各个工资级别有有多少人select s.graade, ccount(*) frrom emmp e jjoin ssalgraade s on e.sal bbetweeen s.llosal and ss.hisaal grooup byy s.grrade; select s.graade, ccount(*) frrom emmp e rright join salgrr

35、ade ss on ee.sal betweeen s.losall and s.hissal grroup bby s.ggrade; 各个部分的平均均工资,列出出部门名称,地地区名称,平平均工资select d.namme,r.nname,aavg(e.salarry) frrom s_emp ee joinn s_deept d on e.dept_id = d.id join s_reggion rr on dd.regiion_idd=r.idd grouup by d.namme,r.nname;或者select max(e),maxx(r.naame),aavg(e

36、.salarry) frrom s_emp ee joinn s_deept d on e.dept_id = d.id join s_reggion rr on dd.regiion_idd=r.idd grouup by e.deppt_id;Asia地区各各个部门的平平均工资select max(e),maxx(r.naame),aavg(e.salarry) frrom s_emp ee joinn s_deept d on e.dept_id = d.id join s_reggion rr on dd.regiion_idd=r.idd and r.namme=Ass

37、ia ggroup by e.dept_id;各个部门不同职职位的平均工工资select dept_id,tiitle,ccount(*),avvg(sallary) from s_empp grouup by dept_id,tiitle;总结:grouup by 后可以跟多多个列。select * froom deppt ordder byy dnamme,depptno ddesc;HAVING子子句的sellect语句句的执行过程程行被分组将HAVINGG子句的条件件应用 到每每个分组上只有符合HAVVING条件件的组被保留留,再应用SSELECTT后面的组函函数对每组的的数据进行处处

38、理各个部门的平均均工资15500;select dept_id,avvg(sallary) from s_empp grouup by dept_id haaving avg(ssalaryy)15000;除了32,422部门,其它它各个部门的的平均工资select dept_id,avvg(sallary) from s_empp grouup by dept_id haaving dept_id noot in (32,442);先分分组再过滤select dept_id,avvg(sallary) from s_empp wherre deppt_id not iin (322,42)

39、groupp by ddept_iid ;先过过滤再分组(效效率高)总结:where子句句和haviing子句的的区别:where子句句 过滤的是是行(记录),后后跟单行函数数having子子句 过滤滤的是分组以以后的聚合结结果,只能包包含grouup by后后面的表达式式和组函数where执行行 在前 ,hhavingg执行在后where和hhavingg子句都不允允许用列别名名3.子查询子查询就是在一一条SQL语语句加入SEELECT语语句语法:SELECT selecct_lisstFORM taableWHERE eexpr ooperattor(SEELECT selecct_lis

40、st FRROM ttable)先执行子查询,子子查询的返回回结果作为主主查询的条件件,再执行主主查询 子查询只执行一一次若子查询的返回回结果为多个个值,ORAACLE会去去掉重复值之之后,再将结结果返回给主主查询谁的工资是最低低的?select firstt_namee,salaary frrom s_emp wwhere salarry in (seleect miin(sallary) from s_empp);哪个部门的平均均工资比322部门的平均均工资高?select dept_id,avvg(sallary) from s_empp grouup by dept_id haavin

41、g avg(ssalaryy) (selecct avgg(salaary) ffrom ss_emp wheree deptt_id = 32);哪个部门的平均均工资比322部门的平均均工资高,并并列出部门名名字与地区名名字?select max(e),maxx(r.naame),ee.deptt_id,aavg(saalary) fromm s_emmp e jjoin ss_deptt d onn e.deept_idd=d.idd joinn s_reegion r on d.reggion_iid=r.iid grooup byy deptt_id hhavingg a

42、vg(salarry) (seleect avvg(sallary) from s_empp wherre deppt_id = 32);谁跟Smithh做一样的职职位?select firstt_namee fromm s_emmp wheere tiitle iin (seelect titlee fromm s_emmp wheere laast_naame =Smithh) annd lasst_namme Smitth; 谁是领导?select firstt_namee fromm s_emmp wheere idd in (selecct mannager_id frrom s_e

43、mp );哪些人是员工?子查询实现:sselectt firsst_namme froom s_eemp whhere iid nott in (selecct mannager_id frrom s_emp wwhere managger_idd is nnot nuull);外连接实现:sselectt e.fiirst_nname ffrom ss_emp m rigght jooin s_emp ee on ee.id=mm.manaager_iid wheere m.managger_idd is nnull; 谁跟Smithh的职位不一一样?select last_name fro

44、m s_empp wherre tittle noot in (seleect tiitle ffrom ss_emp wheree lastt_namee = SSmith);select e1.laast_naame,e11.titlle froom s_eemp e11 leftt joinn s_emmp e2 on e11.titlle=e2.titlee and e2.laast_naame = Smitth whhere ee2.lasst_namme is null;4.1多列子查查询哪个员工的工资资跟本部门平平均工资相等等?select firstt_namee,salaar

45、y frrom s_emp wwhere (deptt_id,ssalaryy) in (seleect deept_idd,avg(salarry) frrom s_emp ggroup by deept_idd);4.关联子查询询语法形式SELECT colummn1,coolumn22,.FORM taable1 outerrWHERE ccolumnn1 opeeratorr(SEELECT scoluumn1,ccolumnn2,. FRROM ttabless WHHERE eexpr1 = outter.exxpr2);哪个员工的工资资大于本部门门平均工资?select firs

46、tt_namee fromm s_emmp o wwhere salarry (selecct avgg(salaary) ffrom ss_emp i wheere deept_idd = o.dept_id );关联子查询的执执行过程关联子查询采用用的是循环(lloop)的的方式,执行行步骤如下:1 外部查询得得到一条记录录(查询先从从outerr表中读取数数据)并将其其传入到内部部查询。 2 内部查询基基于传入的值值执行。 3 内部查询从从其结果中把把值传回到外外部查询,外外部查询使用用这些值来完完成其处理,若若符合条件,oouter表表中得到的那那条记录就放放入结果集中中,否则放弃弃,

47、该记录不不符合条件。4 重复执行步步骤1-3, 直到把ouuter表中中的所有记录录判断一遍。5.EXISTTS运算符1.EXISTTS运算符SELECT colummn1,coolumn22,.FORM taable1 outerrWHERE EEXISTSS(SEELECT X FRROM ttabless WHHERE eexpr1 = outter.exxpr2);EXISTS采采用的是循环环(loopp)的方式,判断outter表中是是否存在记录录,只要在IINNER表表中找到一条条匹配即可。1 外部查询得得到一条记录录(查询先从从outerr表中读取数数据)并将其其传入到内部部查询

48、的表。 2 在INNEER表中的记记录依次扫描描,若根据条条件存在一条条记录在与oouter表表中的记录匹匹配,立即停停止扫描,返返回truee,将outter表中得得到的那条记记录就放入结结果集中否则则放弃,该记记录不符合条条件。3 重复执行步步骤1-2, 直到把ouuter表中中的所有记录录判断一遍。谁跟Smithh的职位不一一样?select last_namefrom s_emp oowhere eexistss (sellect 11 fromm s_emmp i wheere i.titlee = o.titlee andd lastt_namee = SSmith)and las

49、st_namme Smitth; 2.NOT EEXISTSS运算符(可可以用来代替替外连接查询询的现实)也是符合条件后后退出扫描,过过滤掉外表中中与内表做对对比的记录。哪个部门没有员员工?not exiists现实实:seleect idd,namee fromm s_deept ouuter wwhere not eexistss(seleect xx froom s_eemp whhere ddept_iid = oouter.id);外连接现实:select d.dnaamefrom emmp e rright join dept don e.deeptno=d.depptnowher

50、e ee.empnno is null;not in现现实:哪些人是员工?select firstt_namee from s_emp ooutwhere nnot exxists(seleect XX froom s_eemp i wheree out.id = i.mannager_id);in和exissts的比较较EXISTS是是用循环(lloop)的的方式,由oouter表表的记录数决决定循环的次次数,对于eexistss影响最大,所所以,外表的的记录数要少少 IN先执行子查查询,子查询询的返回结果果去重之后,再再执行主查询询,所以,子子查询的返回回结果越少,越越适合用该方方式Day

51、041.1系统开开发周期基于数据库的开开发是一个自顶向下下的系统开发发方法将业务1.2系统开开发的五个阶阶段:需求分析:客户户需要的系统统模型 设计:ER图表表模型数数据库的表E(entitty):实体体R(relattionshhip):关关系开发测试:编程程功能、性性能测试实施、上线:生产系统1.3实体关关系模型的概概念实体:有共同属属性的一类对对象的集合。例例如:客户、销销售代表、订订单属性(attrributee):通过属属性描述实体体、区分实体体。例如:名名字、电话、身身份证号关系(relaationsship):描述实体和和实体的关系系。例如:客客户订货通过过客户和订单单的关系表达

52、达。1.4实体关关系模型实体:圆角方框表示一一个实体名,实实体名唯一,大大写,同义词词用括号括起起来属性:一个属性名,小小写,“”为强制属属性,必须有有值,即NOOT NULLL“o”(opttion)为为可选属性,即即可以为NUULL表示唯标标识(唯一标标识Uniqque iddentiffier:UUID),即即PRIMAARY KEEY1.5实体关关系语法实体和实体的关关系从实例之之间的数量关关系的角度可可分为一对一一、一对多,多多对多;实体和实体之间间的关系从紧紧密程度上分分为必须和可可以例子:每个订单必须而而且只能属于于一个客户一个客户可以有有一张或多张张订单1.6关系类型型用唯一标

53、识来表表达一对一:这种类类型较少。例子:法律上夫夫妻关系(一一夫一妻制)一对多:这种类类型很普遍。例例子:学生和和班级、员工工和部门多对多:这种类类型较多。例子:学生和课课程。(一学学生可以选多多个课程,一一个课程可以以被多个学生生选)1.7完整性约约束保证数据的一致致性通过数据库的特特性或应用程程序完成数据库约束1.8主键(PPRIMARRY KEYY)主键值要求唯一一且非空 PKUKK+NN(NNOT NUULL)联合主键:多列列联合唯一,任任意一列可以以重复。FK:NOT NULL ,可重复UK:唯一,可可NULLPK:唯一,NNOT NUULL1.9外键(FFK)1.10数据库库设计表

54、和列分别对应应实体和属性性(考虑用什什么类型的表表(堆表(hhecp):存放无序)定义命名规范还需要考虑:设设计索引,创创建视图,数数据存储规划划,确认完整整性约束第一步:将实体体映射成表第二步:将属性性映射成列第三步:将唯一一标识映射 成主键第四步:关系映映射成外键一对多关系:一一的那边定义义成主键(PPK)或唯一一键(UK)多的那边定成外外键(FK)一对一关系,在在外键(FKK)列上增加加唯一约束(UUK)若一对一关系在在两头都是可可选的,任意意一边定义成成外键(PKK)若一对一关系中中一边是强制制的,将其定定义成外键(PPK)对于强制关系,在在外键上定义义非空约束(NNN)多对多关系:另

55、建一个表,分分别把别两张张表的PK列列放到第三张张表中,并在在第三张表中中设置联合主主键;规范化:三个范范式最小化数据冗余余最少完整性问题题标识丢失的实体体、关系、表表第一范式:表中中不会有重复复记录,即有有主属性;每每个属性值不不可再分第二范式:每个个非主属性必必须完全依赖赖于主属性;完全依赖:比如有一张表:sid ccid grrade ccname 学时 学分分 (联合主主键sid cid)grade完全全依赖,cnname部分分依赖,只依依赖于cidd不符合第二范式式时,会造成成数据冗余,比比如有1000个学生选同同一门课,就就会有1000个相同的ccname第二范式主要发发生于联合主

56、主键上!第三范式:每个个非主属性不不能依赖于另另一个非主属属性比如有一张表:sid nname ccid cnname 学学时(联合主主键sid cid)cname依赖赖于cid , 学时依依赖于cidd把一对多关系合合表就会不符符合第三范式式。经过严格的ER图设计,一一般都会符合合第三范式,第第三范式决定定了表连接。去规范化,以适适度的冗余来来合表,以提提高查询的效效率。命名规则首字符必须是字字母,名字为1300个字符长,只能包含AZZ,az,00-9,同一个命名空间间里的对象不不能重名不能用ORACCLE保留字字create创创表语法create tablee 表名(列1 数数据类型 ,列

57、2 数据据类型 ,列3 数数据类型 ,.列n数据据类型 );create tablee yyjttest(cc1 varrchar22(10),c2 chhar(100);drop删除表表语法drop taable 表表名;insert语语句的基本语语法insert into 表名(当当给指定列插插入值时,用用上引括号) vaalues (填上插入入的值);插入值中字符用用单引号括上。给全字段插入值值insert into yyjteest vaalues (abcc,bccd);给指定字段插入入值,没有插插入的字段系系统用NULLL补上,这这是隐式插入入。给指定字段插入入值,不想给给指定字段

58、插插入值,自己己用NULLL补上,这是是显式插入。insert into yyjteest(c11,c2) valuees (cc,bccd);2.数据类型varcharr2 变长字字符类型,一一定要带上宽宽度char定长长字符类型,可可以不带宽度度,默认宽度度为1,只能能存一个字符符number数值类型number(pp,s)数值类型varcharr2和chaar的区别.select c1|d,leength(c1), c2|d,leength(c2) ffrom yyyjtesst;select lengtth(c1), lenngth(cc2) frrom yyyjtestt;1.var

59、chhr2按字符符串的实际长长度存,chhar按定义义长度存2.列的取值是是定长,定义义成charr类型,列的的取值长度不不固定,定义义成varcchar2。select * froom tesst wheere c11 = aabc;找找到记录select * froom tesst wheere c11 = aabc ;找不到记录录select * froom tesst wheere c22 = aabc;找找到记录select * froom tesst wheere c22 = aabc ;找到记录3.字符串的比比较中,vaarcharr2按实际字字符串比,对对空格是敏感感的,cha

60、ar会将短字字符串补起后后,再与字符符串比,对空空格不敏感。number类类型create tablee yeyjjnumbeer(c1 nummber,c2 nummber(66),保留六位整整数。最大值值为9999999c3 nummber(44,2),保留到小数数点后两位,最最大保留整数数数字位数为为(42)2位数字,即最大值为为99.999;c4 nummber(33,-3),保留到千位位数(没有小小数部分)最最大保留整数数数字位数为为(3(3))66位数字,即即最大值为99990000;c5 nummber(22,4)保留到小数数点后四位(没没有整数部分分0),最大大值为0.0009

温馨提示

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

评论

0/150

提交评论