版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、SQL语句培训教材SQL概述1、 SQL初识SQI,(StructuredQueryLanguage结构化查询语言)是一种查询、插入、更新和删除数据,生成、修改和删除数据库对象,提供数据库安全控制,完整性及数据保护控制,是面向数据库的通用数据处理语言规范。数据库对象包括表、视图、索引、同义词、族、触发器、函数、过程、包、数据库链和快照等。2、 SQL数据库的体系统结构(1) SQL数据库是表的汇集;(2) SQL表由行集构成,行是列的序列,每列对应一个数据项;(3) 表或者是基本表,或者是视图;(4) 一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。存储文件与物理文件
2、对应。(5) 用户可以用SQL语句对表进行操作,包括视图和基本表,(6) SQL的用户可以是应用程序,也可以是终端用户。3、 SQL的组成SQL由4部份组成:(1)数据定义:SQLDDL定义SQL模式、基本表、视图和索引(2)数据操纵:SQLDML。包括数据查询和数据更新(增、删、改)。(3)数据操制:包括对基本表和视图的授权、完整性规则的描述和事务控制等。(4)嵌入式SQL的使用规定数据库查询1、SQL语句符号:操作符用途例子+-表不正数或负数,正数可省去+将两个数或表达式进行相加A=c+b-将两个数或表达式进行相减34-12*将两个数或表达式进行相乘12*34/除以一个数或表达式18*11
3、NULL空值判断Wherenameisnull;II字符串连接1'01-'|tel_num=等于测试Select*fromempwherename=生五';!=或<>或八二不等于测试Select*fromempwherename!='王五';<小于测试Select*fromempWheresal<5000;>大于测试Select*fromempWheresal>5000;<=小于等于测试Select*fromempWheresal<=5000;>=大于等于测试Select*fromempWheresa
4、l>=5000;Notin测试某值是否在一个指定的结果集中Selectname,addrfromexpertwherelocalnotin(北京:'上海);ANY将一个值与一组值进行比较,返回满足条件的结果。必须跟!=,<,>,<=,>=selectename,salfromempwheresal<=any(selectsalfromempwheredeptno=10)SOME同ANY,必须跟!=,<,>,<=,>=ALL将一个值与一组值比较,返回满足条件的所后列值。必须跟!=,<,>,<=,>=Sel
5、ectname,salfromempWheresal<=all(500,800,1200);Not判断某个值是否界于两者之Selectname,salfrombetweenAandB间。empWheresalbetween500and1200;notexists判断某个列是否存在于一组值中。selectdname,deptnofromdeptwhereexists(select*fromempwhere=AnotlikebEscapechar'比较两个模式是否相似,当使用like语句时Oracle不去访问索引。Select*fromempWhereenamelikeTH%;Isn
6、otnull测试值是否为空。Selectename,deptnofromempWherecomm.Isnullorcomm.=0;Not对结果的否定。Select*fromempWheresalnot(sal<1000);等价于selectename,salfromempwheresal>=1000;AND用于判断两个条件十分都满Select*fromemp足。whereEname='SIMTH'andsal>=1000;OR用于判断两个条件中是否有一个满足。Select*fromempwhereEname='SIMTH'orename=
7、9;SCOTTUNION用于返回(组合)两个查询中所有唯一的行。SelectenamefromempunionSelectenamefromemp;UNIONALL用于返回(组合)两个查询中所有所有的行。INTERSECT用于返回两个查询中相同的行。Selectenamefromemp1intersectselectenamefromemp2;MINUS用于返回两个查询中的不同的行。2、简单查询当我们可以用SQL*PLU瞪录到SQL王后,我们可以用DESC显示某表的结构,也可以用select语句简单查询表中的一些列的内容。例:要查询T_person表中人员的姓名、出生日期及出生地,则:SQL&
8、gt;selectname,dob,natal_placefromt_person;3、伪列及伪表Oracle系统为了实现完整的关系数据库功能,系统专门提供了一组称为伪列(Pseudocolumn)的数据库列,这些列不是在建立对象(如建表)时由我们完成的,而是在我们建立对象时由自动Oracle完成的。Oracle目前有以下的伪列:CURRVALandNEXTVAL使用序列号的保留字LEVEL查询数据所对应的级ROWID记录的唯一标识ROWNUM限制查询结果集的数量有关伪列的详细解释和使用见相关章节。Oracle还提供了一个DUAL的伪表,该表主要目的是保证在使用SELECTS句中语句的完整性而
9、提供的,如:我们要查询当前的系统日期及时间,而系统的日期和时间并是放在一个指定的表里。所以在from语句后就没有表名名出。为了使用from后有个表名,我们就用DUAL弋替。如:例1:查询Oracle系统日期及时间:SQL>selectto_char(sysdate,'hh24:mi:ss')fromDUAL;TO_CHAR(SYSDATE,'YY07:28:09例2:计算一下5000+5000*的结果是多少,则:SQL>select5000+5000*fromDUAL;5000+5000*5500三、数据基本类型Oracle数据库的数据类型与其它的数据库系统
10、相比,它的数据类型不多,Oracle在表示数据方面比其他数据库系统来说要省去许多关键字。Oracle只用NUMBER(m,n;B可以表示任何复杂的数字数据。其它如日期类型等也简单得多,只DATEM表示日期和时间。下面以列表形式给出Oracle8i版本以上系统数据类型的表示方法。数据类型说明Char定长字符,2000个字符Varchar(同Varchar2)可变字符,4000个字符Varchar2变长字符,4000个字符Date固定长度(7字节)的日期型Number数字型,可存放实型和整型Long可变字符,2GB个字符Raw可变二进制数据,4000字节Longraw可受二进制数据,2GBMLSL
11、ABEL仅TrustedOracle用长度在25字节间Blob大二进制对象,4GBClob大字符串对象,4GBNclob多字节字符集的Clob,w4GBBfile外部二进制文件,大小由OS决定例:SQL>createtablenchar_tst(namevarchar2(10),addrvarchar2(16),salnumber(9,2);表已创建四、常用函数1、单记录字符函数函数说明ASCII返回对应字符的十进制值CHR给出十进制返回字符CONCAT拼接两个字符串,与|相同INITCAT将字符串的第一个字母变为大写INSTR找出某个字符串的位置INSTRB找出某个字符串的位置和字节数
12、LENGTH以字符给出字符串的长度LENGTHB以字节给出字符串的长度LOWER将字符串转换成小写LPAD使用指定的字符在字符的左边填充LTRIM在左边裁剪掉指定的字符RPAD使用指定的字符在字符的右边填充RTRIM在右边裁剪掉指定的字符REPLACE执行字符串搜索和替换SUBSTR取字符串的子串SUBSTRB取字符串的子串(以字节)SOUNDEX返回一个同音字符串TRANSLATE执行字符串搜索和替换TRIM裁剪掉前面或后面的字符串UPPER将字符串变为大写NVL以一个值来替换空值ASCII(<c1>)<c1混字符串。返回与指定的字符对应的十进制数。SQL>selec
13、tascii('A')A,ascii('a')a,ascii('0')zero,ascii('')spacefromdual;AaZEROSPACE65974832SQL>selectasc侬')zhao,length('赵')lengfromdual;ZHAOLENG547401CHR(<I>NCHAR)给出整数,返回对应字符。如:SQL>selectchr(54740)zhao,chr(65)chr65fromdual;ZHC|(<c1>,<c2>)SQL
14、>select('#39;)|'转23'王五电话fromdual;王五电23INSTR(<c1>,<c2>,<I>,<j>)在一个字符串中搜索指定的字符,返回发现指定的字符的位置。C1:被搜索的字符串C2:希望搜索的字符串I:搜索的开始位置,缺省是1J:出现的位置,缺省是1。SQL>SELECTINSTR('OracleTraining','ra',1,2)"Instring"FROMDUAL;Instri
15、ngLENGTH(<c>)返回字符串c的长度。SQL>l1selectname,length(name),addr,length(addr),sal,length(to_char(sal)2*fromnchar_tstSQL>/NAMELENGTH(NAME)ADDRLENGTH(ADDR)SALLENGTH(TO_CHAR(SAL)王五2北京市海淀区68LOWER(<c>)返回字符串并将所有字符变为小写。SQL>selectlower('AaBbCcDd')AaBbCcDdfromdual;AABBCCDDaabbccddUPPER(
16、<c>)与LOWER相反,将给出字符串变为大写。如:SQL>selectupper('AaBbCcDd')AaBbCcDdfromdual;AABBCCDDAABBCCDDRPAD和LPAD粘贴字符)RPAD(stringLength,'set')LPAD(stringLength,'set')RPAD在列的右边粘贴字符;LPAD在歹U的左边粘贴字符。例1:SQL>selectRPAD(City35,'.'),temperaturefromRPAD(City35,'.')temperatur
17、eCLEVELAND.85LOSANGELES.81(即不够35个字符用.'填满)LTRIM在截断)RTRIM(右截断)函数LTRIM(string,set')LeftTRIM庄截断)删去左边出现的任何set字符。RTRIM(string,set')RightTRIM府截断)删去右边出现的任何set字符。例1:TrimmingFROMDUAL;weather;ExampleofRightSELECTRTRIM('MotherTheresa,The','The')ExampleofRightMotherTheresa,SUBSTRSubst
18、r(stringstart,Count)取子字符串中函数对字串(或字段),从start字符开始,连续取count个字符并返回结果,如果没有指count则一直取到尾。selectphone,substr(phone,1,3)|0'|substr(phone,4)fromtelecommunicationwheremaster='中国电信';SUBSTRB(stringstart,Count)对字串(或字段),从start字节开始,连续取count个字节并返回结果,如果没有指count则一直取到尾。TRIM(<leading><trailing>FR
19、OM<trim_char>)TRIM可以使你对给定的字符串进行裁剪(前面,后面或前后)如果指定LEADING,Oracle从trim_char中裁剪掉前面的字符;如果指定TRAILING,Oracle从trim_char中裁剪掉尾面的字符;如果指定两个都指定或一个都没有给出,Oracle从trim_char中裁剪掉前面及尾面的字符;如果不指定trim_character,缺省为空格符;如果只指定trim_source,OracleOracle从trim_char中裁剪掉前面及尾面的字符。例子:将下面字符串中的前面和后面的0'字符都去掉:SELECTTRIM(0FROM000
20、00)"TRIMExample"FROMDUAL;TRIMexample2、单记录数字函数函数说明Value1+value2Value1-value2Value1*value2Valuel/value2ABS(value)加减乘除绝对值CEIL(value)COS(value)COSH(value)EXP(value)FLOOR(value)LN(value)LOG(value)MOD(value,divisor)NVL(value,substitute)POWER(value,exponent)ROUND(value,precision)SIGN(value)SIN(va
21、lue)SINH(value)SQRT(value)TAN(value)TANH(value)TRUNC(valu啾precision)VSIZE(value)大于或等于value的最小整数余弦反余弦e的value次募小于或等于value的最大整数value的自然对数value的以10为底的对数求模value为空时以substitute代替value的exponent次哥按precision精度4舍5入value为正返回1;为负返回-1;为0返回0.余弦反余弦value的平方根正切反正切按照precision截取value返回value在ORACLE勺存储空间大小ABS(<n>)返
22、回指定值的绝对值。如:SQL>selectabs(100),abs(-100)fromdual;ABS(100)ABS(-100)100100CEIL(<n>)返回大于或等于给出数字的最小整数。如:SQL>selectceilfromdual;CEIL4FLOOR(<n>)对给定的数字取整数,如:SQL>selectfloor,floorfromdual;FLOORFLOOR12345MOD(<n1>,<n2>)SQL>Selectmod(10,3),mod(10,2),mod(10,4)fromdual;MOD(10,3
23、)MOD(10,2)MOD(10,4)102POWER(<n1>,<n2>)返回n1的n2次方值,如:SQL>selectpower(2,10),power(3,3)fromdual;POWER(2,10)POWER(3,3)102427ROUND(value,precision)按照指定的精度进行舍入;selectround,round,trunc,truncfromdual;roundroundtrunctrunc56-5655-55SIGN(<n>)取数字n的符号,大于0返回1;小于0返回-1;等于0返回0如:例:selectsign(123),
24、sign(-100),sign(0)fromdual;sign(123)sign(-100)sign(0)1-10SIN(<n>)返回一个数字的正弦值。如:SQL>selectsinfromdual;SIN1SINH(<n>)返回双曲余弦的值,如:SQL>selectsin(20),sinh(20)fromdual;SIN(20)SINH(20).18SQRT(<n>)返回数字n的根,如:SQL>selectsqrt(64),sqrt(10)fromdual;SQRT(64)SQRT(10)83.TRUNC(value,precision)
25、按照指定的截取一个数。如:SQL>SELECTTRUNC,-2)trunc1,trunc,2)fromdual;TRUNC1TRUNC,2)1003、单记录日期函数函数描述ADD_MONTH在日期date上增加count个月GREATEST(date1,date2,.).从日期列表中选出最晚的日期LAST_DAY(date)返回日期date所在月的最后TLEAST(date1,date2,.)从日期列表中选出最早的日期MONTHS_BETWEEN(date2,date1)?给出Date2-date1的月数(可以是小数)NEXT_DAY(dateday)给出日期date之后下T的日期,这里
26、的day为星期,如:MONDAY,Tuesday等。NEW_TIME(date:this:'other)给出在this时区=Other时区的日期和时间ROUND(date:format)未指定format时,如果日期中的时间在中午之前,则将日期中的时间截断为12.(午夜,T的开始),否则进到第二天。时间截断为12.(午夜,f的开始),否则进到第二天。TRUNC(date:format)未指定format时,将日期截为12.(午夜,T的开始).ADD_MONTHS(<d>,<I>)增加月份和减去月份,如:SQL>selectto_char(add_month
27、s(to_date('199712','yyyymm'),1),'yyyymm')add_month2fromdual;ADD_MO199801SQL>selectto_char(add_months(to_date('199712','yyyymm'),-1),'yyyymm')add_mo2fromdual;ADD_MO199711LAST_DAY(date)返回日期date所在月的最后一天,如:SQL>selectto_char(sysdate,"),to_char(sy
28、sdate)+1,")2fromdual;TO_CHAR(SYTO_CHAR(S给出Date2-date1的月数(可以是小数);SQL>selectmonths_between('19-12月-1999','19-3月-2000')mon_betwfromdual;MON_BETW-3SQL>selectmonths_between(to_date('',''),2to_date('','')mon_betfromdual;MON_BET-60SYSDATE用来得到系统的当前日
29、期,如:SQL>selectto_char(sysdate,'dd-mon-yyyyday')fromdual;TO_CHAR(SYSDATE,'DD18-5月-2001星期五4、 单记录转换函数函数描述CHARTOROWID将子符转换到rowid典型CONVERT转换一个字符节到另外一个字符节HEXTORAW转换十K进制到raw典型RAWTOHEX转换raw到十六进制ROWIDTOCHAR转换ROWID到字符TO_CHAR转换日期格式到字符串TO_DATE按照指定的格式将字符串转换到日期型TO_MULTIBYTE把单字节字符转换到多字节TO_NUMBER将数字字
30、串转换到数字TO_SINGLE_BYTE转换多字节到单字节TO_CHAR(dateformat)根据format重新格式日期date的格式。如:SQL>selectto_char(sysdate,'yyyy/mm/ddhh24:mi:ss')fromdual;TO_CHAR(SYSDATE,'YY2001/051823:05:36TO_DATE(strinformat)将一和字串转换为ORACL由日期。如:Insertintodemo(demo_key,date_col)Values(1,to_date('04-Oct-1999',DD-Mon-y
31、yyy');TO_NUMBER(<c>)将给出的字符转换为数字,如:SELECTTO_NUMBER('1947')"FISCAL_YEARFROMDUAL;FISCAL_YEAR1947USER函数返回当前用户的名字,如:SQL>selectuserfromdual;USERSYSTEM5、 SQL中的组函数AVG(DISTINCT|ALL)求平均值,ALL表示对所有求平均值,DISTINCT只对不同的求平均值,相同只取一个。SQL>l1*selectavg(sal)fromempSQL>/AVG(SAL)MAX(DISTINCT
32、|ALL)求最大值,ALL表示对所有求最大值,DISTINCT只对不同的求最大值,相同只取一个。SQL>selectmax(sal)fromemp;MAX(SAL)5000MIN(DISTINCT|ALL)求最小值,ALL表示对所有求最小值,DISTINCT只对不同的求最小值,相同只取一个。SQL>selectmin(sal)fromemp;MIN(SAL)800STDDEV(DISTINCT|ALL)DISTINCT只对不同的求标准差,求标准差,ALL表示对所有求标准差,相同只取一个。SQL>selectstddev(sal)fromemp;STDDEV(SAL)6、 带G
33、ROUPBY的计算可以用GROUPBy来实现对一组数进行分组统计(如SUM,count(*)等),如:要列出部门代码、部门人数,部门工资总和,则用到GROUPBY:SQL>selectdeptno,count(*),sum(sal)fromempgroupbydeptno;DEPTNOCOUNT(*)SUM(SAL)10387502051087530694007、 用HAVING来限制分组的计算在分组GROUPBY中,一般都不管统计的结果是多少都要全显示,我们可以在GROUPBY前或后加HAVING子句来限制结果的统计,比如要求被统计的人数有5个人以上,则有两方法可以实现:SQL>
34、selectdeptno,count(*),sum(sal)fromempgroupbydeptno2havingcount(*)>=5;DEPTNOCOUNT(*)SUM(SAL)20510875SQL>selectdeptno,count(*),sum(sal)fromemphavingcount(*)>=52groupbydeptno;DEPTNOCOUNT(*)SUM(SAL)20301087594008、 用ORDERBY子句来对结果进行排序Oracle提供ORDERBY?句,可用于对查询到的结果进行排序输出。这样的操作是在内存中进行的。比如按照部门代码顺序和员工的
35、工资多少顺序进行输出,需要命令:SQL>selectdeptno,ename,salfromemporderbydeptno,saldesc;DEPTNOENAMESAL10KING500010CLARK245010MILLER130020SCOTT300020JONES297520ADAMS110020SMITH80030BLAKE285030ALLEN160030TURNER150030WARD125030MARTIN125030JAMES950这里的DESC表sal(工资)按照降序排列五、数据操纵语言(DML)命令1、 INSERTS作INSERT语句可以完成对表、视图及快照(sn
36、apshot)进行数据插入。插入的数据依不同的版本而允许插入的数据类型也不同,最新版本可以在子查询中使用LOB数据类型。现在最新的版本仍有下面限制:不能在语句中使用并行,也不允许从远程进行插入;在子查询中不允许使用带有long类型的字段。(1)INSER愉令语法:INSERTINTOuser.tabledb_link(column1,column2.)VALUES(express1,express2.|subquery.);(2)日期的插入INSERTintoemp_house_fund(name,emp_acc_no,tran_date,tran_val)VALUES五','
37、123456',todate('06/09/2000','dd/mm/yyyy'),;INSERTintoemp_house_fund(name,emp_acc_no,tran_date,tran_val)VALUES低五','123456',tD_daleCXINSERTintoemp_house_fund(name,emp_acc_no,tran_date,tran_val)VALUES五','1234561to_date('06092000?ddmmyyyy'),;(3)带select的插入S
38、QL>createtableemp_house_fund_sum(per_idverchar2(20),tran_valnumber(9,2);SQL>insertintoemp_house_fund_sumselectper_id,sum(tran_val)Fromemp_house_fundgroubyper_id;SQL>select,fromemp_house_funda,emp_house_fund_sumbwhere=;(4)用文字插入操作INSERTINTOdeptVALUES(50,PRODUCTION'SANFRANCISCOINSERTINTOem
39、p(empno,ename,job,sal,comm,deptno)VALUES(7890,LINKS:CLERK,NULL,40);下面语句完成同样的功能,只是用了子查询:INSERTINTO(SELECTempno,ename,job,sal,comm,deptnoFROMemp)VALUES(7890,LINKS:CLERK,NULL,40);(5)用子查询插入操作INSERTINTObonusSELECTename,job,sal,commFROMempWHEREcomm>*salORjobIN(PRESIDENTMANAGER);2、 UPDATE®作(1) UPDA
40、TED法UPDATEuser.tabledb_linkaliasSETcolumn1=express1,column2=experss2|(column1,column2.)=(subquery)WHEREcondition|currentofcursor;(2) 一般的修改如果起息日为空时以处理日作为该记录的起息日:SQL>updateemp_house_fundsettran_date=sysdateWhereproc_date=sysdateandtran_dateisnull;带null的修改SQL>updateempsetper_id=nullwherelength(pe
41、r_id)<15orSubstr(per_id,15,1)>1;3、DETELEt作在应用中,可以使用delete语句实现将不需要的记录进行删除值得注意的是,经常使用DELETE语句对表的记录进行有条件的删除。而无条件的全表删除需要一定的技巧。请看下面的例子。(1)用delete删除全部记录的操作1.DELETE语法DELETEFROMuser.tabledb_linkAliasWHEREcondition;这里的condition可以复杂的表达式或子查询。2例子:SQL>deletefrom;SQL>deletefromcolle_subjectsWhereper_i
42、din(selectper_idfromuniv_subjects);(2)用delete有条件删除部分记录删除语句用的最多应该是有条件的删除记录。如果我们不是有条件的删除的话,我们应该采用直接建立一个新表、DROP旧表的方法来达到我们的目的。例1:DELETEFROMtemp_assign;例2:DELETEFROMempWHEREJOB='SALESMANANDCOMM<100;例3:DELETEFROM(select*fromemp)WHEREJOB='SALESMANANDCOMM<100;限制:不能使用并行或带远程对象不能用LONG类型(3)用delete
43、分段删除大量记录有时我们需要删除大块的数据,在环境比较差的情况下,往往由于回滚段不够大而出现删除失败。这样我们可以采用以下两种方法来达到删除大量数据的目的。例1:用rownum来限制每次删除的记录数目:DELETEfromempwheredeptno=9999andrownum<1000;例2:编写一个简单的存储过程,如:SQL>getdel_recDECLARETMPVARCHAR2(1);BEGINLOOPBEGIN/*下面语句确定是否还有可删的记录,如果没有就直接到EXCEPTION*/SELECTX'INTOTMPFROMSAMPLEWHEREROWNUM=1;/*
44、如果SAMPLE®有数据就执行删除一组操作,即使不够20条也不会出错*/DELETEFROMSAMPLEWHEREROWNUM<20;COMMIT;EXCEPTIONWHENNO_DATA_FOUNDTHENEXIT;END;ENDLOOP;END;4、复杂查询语句的使用1、复杂查询语句的使用使用SELEC语句和子查询(SUBQUERY可以从一个或多个表、视图、实体视图中返回数据。(1)相关子查询可以将子查询(前面提到的assubquery)或In或exists当成where的一个条件的一部分,这样的查询称作子查询。where中可以包含一个select语句子查询;where中可
45、以包含IN,EXISTS语句;最多可嵌套16层;层数过多会影响性能。例:比如一个查询是否有专家既以研究所的名义申请基金项目又以大学系为单位申请项目(按规定只能以一个单位来申请):SQL>selectname,per_id,dept_namefromuniv_subjectsWhereper_idin(selectper_idfromcolle_subjects);(2)外连接招生中,如果所有学生的信息放在students表中,而部分有特长的学生在另一个表student_skill中同样有该学生信息。现在要全部列出所有学生,如果某个学生在表student_skill中有其特长信息,就显示特
46、长内容,如果某个学生没有特长(在表student_skill中无其特长信息)就显示特长为空:SQL>select,name,age,skillfromstudentsa,student_skillbWhere=(+)Orderby;Students结构为:St_idvarchar(20),Namevarchar2(10),Agenumber(2),Tot_scorenumber(3),.Student_skill结构为:St_idvarchar(20),Skillvarchar2(20),Students的记录,Student_skill的记录少。上面的“+”跟在记录少的表后面,它表示当
47、没有与匹配时就为增加一空行。1111aaaa600足球2222bbbb590篮球3333cccc6204444dddd610跳身St_idnametotscoreskill(3)自我连接自我连接是在同一个表或视图内进行条件连接。下面语句返回的是每个雇员的名字及该雇员的经理的名字:SELECT|'worksfor'|"EmployeesandtheirManagers"FROMempe1,empe2WHERE=;EmployeesandtheirManagersBLAKEworksforKINGCLARKworksforKINGJONESworksforKIN
48、GFORDworksforJONESSMITHworksforFORDALLENworksforBLAKEWARDworksforBLAKEMARTINworksforBLAKESCOTTworksforJONESTURNERworksforBLAKEADAMSworksforSCOTTJAMESworksforBLAKEMILLERworksforCLARK连接条件是=(4)UNION,INTERSECTMINUS有时需要从多个表中组合具有一种相似类型的信息。Union可以完成将两个以上的表的相类似的查询结果合并在一起,并且相同的只取其一;如果unionall则表示返回所有行(不管是否重复)
49、。Intersect返回在两个表中都有相同内容的信息。Minus则返回只在一个表中出现的信息。1.语法:ersectselect.select.minusselect.例:sql>selectsum(balance)intolf_returnfrom(selectsum(nvl(tran_val,0)*decode(db_cr_flag,'1',1,'0',-1,0)balancefromper_fix_detwhereacc_no=as_acc_nounionallselectsum(nvl
50、(tran_val,0)*decode(db_cr_flag,'1',1,'0',-1,0)balancefromper_detailwhereacc_no=as_acc_no);列出有特长的考生(在表students,student_skill同时出现):sql>selectnamefromsutdentsintersectselectnamefromstudent_skill;列出没有特长的考生(仅在表students出现):sql>selectnamefromsutdentsminusselectnamefromstudent_skill;2、
51、创建复杂的视图(1)分组视图例1:CREATEORREPLACEVIEWdept_totasselectdept,sumtotal_salfromdepta,empbwhere=groupby例2:CRATEORREPLACEITEMTOTASSELECTPERSION,SUM(AMOUNT)ITEMTOTFROMLEDGERWHEREACTIONDATEBETWEENTO_DATE01-MAR-1901:'DD-MON-YYYYandTO_DATE31-MAR-1901:'DD-MON-YYYYAndACTIONIN(BOUGH'RAID')GROUPBYPE
52、RSION;(2)合计视图例:CREATEVIEWempviASSELECTDEPTNO,SUM(SAL),SUM(COMM)FROMEMPGROUPBYDEPTNO;(3)组合视图例:CREATEORREPLACEVIEWBYITEMASSELECT,Amount,100*amount/itemtotalbypersion,100*amount/totalbytotalfromledgerlL,iteamtotalI,totalwhere=andactiondatebetweento_date(0'1-MAR-1901:'DD-MON-YYYYandTO_date(31-MAR-1901:'DD-MON-YYYY)AndACTIONIN(BOUGHPAID);(4)在from中使用视图在SELECTS句中,当对一个表或视图查询时,语句要求视图是必须存在的。在版以后。当该视图不存在时,我们可以在FROM子句后写上该视图即可。详细例子如下:1 .假设有下面视图:CREATEORREPLACEVIEWTOTALASSelectSUM(amount)TOTALFromledgerWhere
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年及未来5年市场数据中国一次性口罩行业市场全景分析及投资策略研究报告
- 中国科学院空间应用工程与技术中心2027届校园招聘79人考试备考试题及答案解析
- 2027届高三数学一轮复习课件:第七章 7.4 直线、平面垂直的判定与性质
- 南方航空物流股份有限公司2026届春季校园招聘笔试备考试题及答案解析
- 2026年中国邮政储蓄银行新疆分行春季校园招聘笔试模拟试题及答案解析
- 2026年郑州大学第五附属医院招聘高层次人才31名考试备考题库及答案解析
- 乳品干燥工安全生产能力强化考核试卷含答案
- 2026湖南长沙卫生职业学院招聘3人考试模拟试题及答案解析
- 2026新疆天宜养老有限责任公司招聘6人笔试参考题库及答案解析
- 退役军人回访制度
- 内蒙古自治区矿山地质环境治理工程预算定额标准
- 劳动纠纷应急预案
- 外科学第二十三章 颅内和椎管内血管性疾病
- YY 0777-2023射频热疗设备
- 沈阳地铁6号线一期工程环评报告
- 河南建设工程项目安全生产综合评定表
- 2020中国大学慕课超星尔雅工程伦理2020章节测验答案
- -NSF-PROD-NF-V5.6-产品规格说明书-V1.1
- 测绘生产困难类别细则及工日定额
- QCDSM管理目标五大要素
- 文明工地创建方案(3篇)
评论
0/150
提交评论