版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、淘宝网开发技术人员数据库知识参考手册(V2.0)-胜通淘宝网开发人员数据库知识参考手册编写、修订、审核记录编号文档版本修订章节修订原因修订日期修订人11.0全文新建文档2007-9-27胜通22.0补充文档2008-1-6胜通345678910目录第一章 基本元素6第一节 数据类型61.VARCHAR2(size):62.CHAR(size)63.LONG74.CLOB75.NUMBER(p,s)76.DATE87.TIMESTAMP( factional_seconds_precision )8第二节 NULL8第三节 伪列111.CURRVAL 和 NEXTVAL112.LEVEL123.
2、ROWID124.ROWNUM135.XMLDATA15第四节 注释15第五节 数据库的对象161.模式对象162.非模式对象173.部分模式对象17第六节 格式模型171.时间格式17第七节 操作符191.操作符列表192.操作符优先级193.连接操作符194.集合操作符19第二章 表达式19第三章 条件19第一节 条件的优先级20第二节 比较条件21第三节 逻辑条件23第四节 成员关系条件23第五节 范围条件23第六节 NULL条件23第四章 函数23第一节 单值函数231.数值型函数24²MOD24²ROUND24²TRUNC26²ABS26
3、78;ACOS26²ASIN27²ATAN27²ATAN228²BIN_TO_NUM29²BITAND29²CEIL29²COS29²FLOOR29²SIN29²SINH29²292.返回字符值的字符型函数29²LOWER29²UPPER30²LPAD30²RPAD31²TRIM31²LTRIM32²RTRIM33²REPLACE33²SOUNDEX33²SUBSTR34²TR
4、ANSLATE35²363.返回数字值的字符型函数36²INSTR36²LENGTH37²384.日期函数38²ADD_MONTHS38²CURRENT_DATE39²CURRENT_TIMESTAMP40²SYSDATE40²SYSTIMESTAMP41²LAST_DAY42²NEXT_DAY42²MONTHS_BETWEEN43²ROUND43²TRUNC455.转换函数45²TO_CHAR45²TO_DATE47²TO_
5、NUMBER476.其他辅助函数48²DECODE48²GREATEST49²LEAST50²NULLIF50²NVL50²NVL251²SYS_CONNECT_BY_PATH52²SYS_CONTEXT52第二节 聚集函数52²AVG55²COUNT56²DENSE_RANK57²RANK57²FIRST58²LAST58²MAX58²MIN59²SUM60²61第三节 分析函数611.概述612.工作机制613.
6、语法624.常用的分析函数65²AVG65²COUNT66²FIRST_VALUE67²LAST_VALUE68²LAG68²LEAD69²MAX69²MIN70²DENSE_RANK70²RANK72²ROW_NUMBER72²SUM735.不太常用的分析函数746.常见问题74²计算动态累计问题74²TOP-N问题74²交叉查询问题74²移除重复值问题74第四节 对象引用函数74第五节 函数列表(字母序)741.ABS742.ACO
7、S743.ADD_MONTHS744.ASCII755.ASIN756.ATAN757.ATAN2758.AVG769.BIN_TO_NUM7610.BINAND7611.CHARTOROWID7712.COUNT7713.CURRENT_DATE7714.CURRENT_TIMESTAMP7715.DECODE7716.DENSE_RANK7817.DUMP7818.FIRST7819.FIRST_VALUE7820.FLOOR7821.GREATEST7822.GROUP_ID7823.GROUPING7824.GROUPING_ID7825.INSTR7826.LAG7827.LAST7
8、928.LAST_DAY7929.LAST_VALUE7930.LEAD7931.LEAST7932.LENGTH7933.LOWER7934.LPAD7935.MAX7936.MIN8037.MOD8038.MONTHS_BETWEEN8039.NEXT_DAY8040.NULLIF8041.NVL8042.NVL28043.RANK8044.REPLACE8045.ROUND(date)8146.ROUND(number)8147.ROW_NUMBER8148.RPAD8149.RTRIM8150.SOUNDEX8151.SUBSTR8152.SUM8153.SYSDATE8154.SYS
9、TIMESTAMP8255.TO_CHAR8256.TO_DATE8257.TO_NUMBER8258.TRANSLATE8259.TRIM8260.TRUNC(number)8261.TRUNC(date)8262.UPPER82第五章 后记83第一章 基本元素第一节 数据类型1. VARCHAR2(size):可变长度的字符串,最大size个字节。size最大可取值是4000,如果你指定了size是4000,然后插入超过4000子句的字符串,oracle会字段截取先进入库的4000字节,后面的它就不管了。如果你知道的size没有4000,而是其他一个数字如200,那么如果你插入的字符串超过
10、200,oracle就会返回一个错误。size必须指定个正数。有关VARCHAR类型,它其实和VARCHAR2一样,是它的同义词。但是不宜指定VARCHAR作为数据类型,因为你不确定oracle哪天头脑发热,把VARCHAR的含义改掉了或者不支持它,那就完了。2. CHAR(size)固定长度的字符串,最大size个字节。如果你插入的字符串没有size个字节,那么oracle就会使用空白来填充它。size最大可取值是2000,如果你指定了size是2000,然后插入超过2000子句的字符串,oracle会字段截取先进入库的4000字节,后面的它就不管了。如果你知道的size没有2000,而是其
11、他一个数字如200,那么如果你插入的字符串超过200,oracle就会返回一个错误。如果你不指定size,那么它的默认值就是1。3. LONG用于存储字符串,最多可以存储2G个字节的字符。LONG类型有很多的限制,已经不被oracle推荐使用,大家最好不要用,会有一系列操作限制,导致一些隐形的问题。4. CLOB存储字符串,即支持可变长度的,也支持固定长度的字符串,最大可支持到4G字节。5. NUMBER(p,s)oracle中唯一存储数字的数据类型。最大最小值分别为9.99.999 ×10125(38个9后面跟了88个0,因此它的数字精度就是38)和1.0×10-130。
12、如果你使用的数字超过这个数字,那么oracle返回错误。p表示这个数字一共有多少个数字组成,范围是从1到38。s就表示0右边的精度有多少位,就小数是多少位,范围是-84到127。p和s要么都不指定,就表示范围是使用最大值,即p=38,s=127;要么就指定p,那么s=0;要么都必须同时指定。不存在只指定s不指定p的情况。下面给个例子,来详细说明这个类型:下面正常情况下,s的值小于p的情况:实际数据指定的类型结果说明1234567.89NUMBER1234567.89没有变化1234567.89NUMBER(9)1234567小数没有了1234567.89NUMBER(9,2)1234567.8
13、9没有变化1234567.89NUMBER(9,1)1234567.9小数只有1位,四舍五入了1234567.89NUMBER(6)错误超过了最大数字精度范围1234567.89NUMBER(7,-2)1234500s为负数,则在0左边截取1234567.89NUMBER(7,2)错误超过最大数字精度范围7下面是“不正常”情况,s的值大于p的值的情况:实际数据指定的类型结果说明0.01234NUMBER(4,5)0.01234没有变化0.00012NUMBER(4,5)0.00012没有变化0.000127NUMBER(4,5)0.0013超过指定小数位数的范围了,四舍五入0.0000012N
14、UMBER(2,7)0.0000012没有变化0.00000123NUMBER(2,7)0.0000012超过指定小数位数的范围了,四舍五入从上面的例子可以看到,s是表示小数点右边的有多少个数字,即有多少为小数,如果它为负值,那么就表示小数点左边有多少位数字;当所指定的数字超过了这个s精度指定的访问,那么oracle就执行四舍五入。p表示的是一共有多少为有效数字,不能超过这个有效数字,超过了就返回相应的错误。6. DATE时间类型,oracle存储时间的数据包括:世纪、年、月、日、时、分、秒。可见它只精确到秒级别。往date类型你们插入数据要使用函数to_date(),把date类型数据转换为
15、字符串类型数据,要使用to_char()函数。有关日期的计算:可以对日期进行加、减计算,不能对其进行乘法和除法运算。指定一个数字,oracle对其附加天作为单位来和日期进行计算。如sysdate-1 就表示昨天,sysdate+1就表示明天, sysdate-7就表示一周以前,而sysdate-10/1440就表示10分钟以前。7. TIMESTAMP( factional_seconds_precision )TIMESTAMP表示时间戳类型,就是一个时间点。oracle存储的时间戳数据包括:年、月、日、时、分、秒。可见它不存储世纪。对于faction_seconds_precision,表
16、示将秒精确到哪个级别,它的值是从0到9,默认是6,如果是3,就表示把秒精确到毫秒级别,9就表示精确到“纳米”级别。看个例子就明白了:SQL> select to_char(systimestamp,'yyyy-mm-dd,hh24:mi:ssxff') time from dual;TIME-2007-09-19,11:20:41.035829存储TIMESTAMP类型,要使用TO_TIMESTAMP()函数,显示TIMESTAMP类型数据要使用TO_CHAR()函数,如例子中那样。第二节 NULLnull表示no value,unknown,它不表示0,也不表示一个空的
17、字符串。SQL函数中的NULL所有的函数,除了REPLACE , NVL , CONCAT以外,如果你用null作为它的参数,那么结果就是返回null。大部分的聚集函数如(COUNT,AVG),他们会忽略null,如一个列上面有10行记录,其中2行是null,那么count这个列的结果就是8。例如在增加月份函数中使用null进行计算的情况:SQL> select to_char(sysdate,'yyyy-mm-dd') today from dual;TODAY-2007-09-23SQL> select to_char(add_months(sysdate,1)
18、,'yyyy-mm-dd') another_day from dual;ANOTHER_DA-2007-10-23SQL> select to_char(add_months(sysdate,null),'yyyy-mm-dd') another_day from dual;ANOTHER_DA-聚集函数的情况:22:11:28 SQL> select empno,ename,comm from emp; EMPNO ENAME COMM- - - 7369 SMITH 7499 ALLEN 300 7521 WARD 500 7566 JONES
19、 7654 MARTIN 1400 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 0 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER已选择14行。22:11:43 SQL> select count(empno) from emp;COUNT(EMPNO)- 1422:12:05 SQL> select count(comm) from emp;COUNT(COMM)- 4条件中的null。对NULL所进行的任何数学计算结果都是null,如10+null结果是null。oracl
20、e始终认为两个null是不相等的(除了少数情况),不能用null=null这个条件来进行判断两个null是否相等,null不等于其他的null,你只能用is null或者is not null来判断某个记录的某个字段是不是null。但是oracle在使用decode函数的时候,它认为两个null是相等的。oracle还有一种情况也认为两个不同的null是相等的,就是在一个复合键中,如果这两个复合键值中非null部分是相等的,那么这两个复合键值是相等的。下面给出null出现的条件表格:如果a是比较条件是那么结果是10a IS NULLFALSE10a IS NOT NULLTRUENULLa I
21、S NULLTRUENULLa IS NOT NULLFALSE10a = NULLUNKNOWN(其实就是null)10a != NULLUNKNOWNNULLa = NULLUNKNOWNNULLa != NULLUNKNOWNNULLa = 10UNKNOWNNULLa != 10UNKNOWN例如:SQL> select empno,ename,comm from emp; EMPNO ENAME COMM- - - 7369 SMITH 7499 ALLEN 300 7521 WARD 500 7566 JONES 7654 MARTIN 1400 7698 BLAKE 778
22、2 CLARK 7788 SCOTT 7839 KING 7844 TURNER 0 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER已选择14行。SQL> select empno,ename,comm from emp where comm=null;未选定行SQL> select empno,ename,comm from emp where comm <> null;未选定行SQL> select empno,ename,comm from emp where comm is null; EMPNO ENAME COM
23、M- - - 7369 SMITH 7566 JONES. . .已选择10行。SQL> select empno,ename,comm from emp where comm is not null; EMPNO ENAME COMM- - - 7499 ALLEN 300 7521 WARD 500 7654 MARTIN 1400 7844 TURNER 0第三节 伪列伪列就像是一个表的列,但却不是,它不存储在表中。你可以对伪列进行查询,而却不能进行增删改。伪列包括下面几类:1. CURRVAL 和 NEXTVAL这两个伪列主要是用于访问序列(sequence)的值。currval
24、返回当前值,而nextval返回下一个值并且导致sequence一次值的增加。你只能通过下列的形式来访问这两个伪列:sequencename.CURRVALsequencename.NEXTVAL哪里可以使用sequence的值?1、 查询语句的select部分,但不是在子句的select中,如select a from (select b from。),这个里面b就在查询语句的子句的select中,可以使用sequence的位置(即使用currval和nextval的地方)是在a这个部位。2、 insert语句的子句select部分中,如insert into t select a from
25、。,就是在a这个位置。3、 insert的value子句中,如insert into t values(a。),就是在a这个位置。4、 update的set子句中,如UPDATE T set a。,就是在a这个位置。哪些情况对sequence值的使用有限制,即currval和nextval不能使用的场合?1、 DELETE,SELECT,UPDATE的子句,如delete from t where a in (select a .),这个a位置不能使用。2、 在查询视图和物化视图的语句中不能使用。3、 包含DISTINCT关键字的查询语句中不能使用。4、 包含GROUP BY和ORDER BY
26、子句的查询语句中不能使用。5、 集合操作中不是第一个select语句的语句中不能使用,如SELECT a. UNION ALL SELECT b .,这里b的位置不能使用,a位置能用。6、 WHERE中的select子句,如SELECT . FROM . WHERE (SELECT a.)中a的位置。7、 在create table和alter table中,某个有default值的列上不能使用。8、 check约束中不能使用。如何使用序列值?当你建立一个序列的时候,你会指定这个序列的第一个值和增加值,当你在第一次调用这个序列的时候,你不能使用sequencename.CURRVAL来访问它的
27、当前值,因为它还没开始,而必须使用sequencename.NEXTVAL来让它开始初始化第一个值,第一次使用这个时候返回的时候是序列的第一个值。之后在时候currval是返回序列的当前值,nextval返回序列的下一个值并且导致序列增加一个值。oracle对序列的增加只是一次性的,单向的,即它只增加,不能减少,并且只能增加一次。下面给个简单的例子:SQL> create sequence seq_test start with 1 increment by 1 nomaxvalue; -创建序列,第一值1,每次增加1Sequence created.SQL> select seq
28、_test.currval from dual; -第一次必须通过nextval让序列初始化select seq_test.currval from dual *ERROR at line 1:ORA-08002: sequence SEQ_TEST.CURRVAL is not yet defined in this sessionSQL> select seq_test.nextval from dual;-第一次初始化序列,让它得到第一值1 NEXTVAL- 1SQL> select seq_test.currval from dual;-当前值 CURRVAL- 1SQL&
29、gt; select seq_test.nextval from dual;-不是第一次,nextval返回下个值,并且序列增加1 NEXTVAL- 2SQL> select seq_test.currval from dual;-经过nextval后,序列的确增加了 CURRVAL- 22. LEVEL3. ROWIDrowid顾名思义就是某条记录在数据库中的存储地址,在9i中它包括下列内容:1、 这条记录属于哪个对象的,记录了这个对象在数据库中id。2、 这条记录属于数据文件的哪个块的3、 这条记录是数据块的哪个行(这个行就记录了这条数据)4、 这条记录属于哪个数据文件,以数据文件的
30、id表示。因此rowid能够快速的定位到数据在数据库中的位置,因此通过rowid来访问数据一般都是比较快的。一般情况下,rowid具有唯一性,即一条记录一个rowid,但是在cluster中,多个表的公用部分是只存一个记录的,因此所有这些表的公用部分一个记录就一个rowid,其实那还是一个记录一个rowid。rowid伪列具有rowid类型或者是urowid类型。rowid反映的是当前这个记录在数据库中的“逻辑”位置,即它是哪个对象的在哪个数据文件的哪个块的哪个行上,所以,当使用导入导出工具进行移动数据以后,rowid会发生变化,类似发生变化的还有如oracle对物理文件进行了相关的接合整理也
31、会出现整理前后rowid发生变化等。你可以在语句的select部分以及where部分中使用rowid这个伪列。注意它是伪列,即它不在表中存储,你只能查询而不能增删改。下面给个小例子:SQL> select t.*,rowid from dept t; DEPTNO DNAME LOC ROWID- - - - 10 ACCOUNTING NEW YORK AAAMfNAAEAAAAAQAAA 20 RESEARCH DALLAS AAAMfNAAEAAAAAQAAB 30 SALES CHICAGO AAAMfNAAEAAAAAQAAC 40 OPERATIONS BOSTON AAAM
32、fNAAEAAAAAQAADSQL> select * from dept where rowid='AAAMfNAAEAAAAAQAAA' DEPTNO DNAME LOC- - - 10 ACCOUNTING NEW YORK4. ROWNUM语句查询语句所返回的每一行记录,Oracle会给其指定一个顺序的数字(rownum),用于标志顺序,第一行记录是1,第一行记录是2,依此类推。你可以通过rownum来实现限制返回的行数的目的,即在条件判断中使用rownum小于或者小于等于某个数的情况,请看下面这个例子:SQL> select rownum,empno,en
33、ame from emp where rownum<3; ROWNUM EMPNO ENAME- - - 1 7369 SMITH 2 7499 ALLENSQL> select rownum,empno,ename from emp where rownum<=3; ROWNUM EMPNO ENAME- - - 1 7369 SMITH 2 7499 ALLEN 3 7521 WARDROWNUM一般只能用于< 或<=的情况,rownum使用=的时候只能是1,不能是其他任何数,否则不会返回结果,请看一个例子:SQL> select rownum,empn
34、o,ename from emp where rownum=1; ROWNUM EMPNO ENAME- - - 1 7369 SMITHSQL> select rownum,empno,ename from emp where rownum=2;未选定行SQL> select rownum,empno,ename from emp where rownum=3;未选定行为什么呢?如果指定的条件是ROWNUM = 2的话,对于满足其他条件的第一条记录如果返回的话ROWNUM = 1, 但是这不满足ROWNUM = 2的条件,因此这条记录不会返回。找到下一条记录,这时候ROWNUM仍
35、然等于1,因为目前还没有返回1条符合的数据,同理这条记录也不会满足ROWNUM = 2的条件,也不会返回直到最后一条,都不会满足ROWNUM = 2的条件。所以指定非1的值只能返回无。rownum使用>的时候只能大于0或负数,而这没有任何意义,因此一般不会出现大于的情况。由上面的例子,可以看出rownum是出现在where子句中和select子句中的,where的执行是在order by子句执行的前面,因此当有order by的时候,rownum如果显示出来就会出现顺序错乱的现象,请看下面这个例子:SQL> select rownum,empno,ename from emp wh
36、ere rownum<=3 order by ename; ROWNUM EMPNO ENAME- - - 2 7499 ALLEN 1 7369 SMITH 3 7521 WARD由此我们可以联想到这样一类句子怎么去做,就是返回某个表的前(后,最)多少行,请看下面这个例子,返回emp表的前(后)3行:SQL> select rownum,empno,ename from emp; ROWNUM EMPNO ENAME- - - 1 7369 SMITH 2 7499 ALLEN 3 7521 WARD 4 7566 JONES 5 7654 MARTIN 6 7698 BLAKE
37、 7 7782 CLARK 8 7788 SCOTT 9 7839 KING 10 7844 TURNER 11 7876 ADAMS 12 7900 JAMES 13 7902 FORD 14 7934 MILLER已选择14行。SQL> select rownum,empno,ename from (select t.empno,t.ename from emp t order by empno) where rownum<=3; ROWNUM EMPNO ENAME- - - 1 7369 SMITH 2 7499 ALLEN 3 7521 WARDSQL> selec
38、t rownum,empno,ename from (select t.empno,t.ename from emp t order by empno desc) where rownum<=3; ROWNUM EMPNO ENAME- - - 1 7934 MILLER 2 7902 FORD 3 7900 JAMES上面这种似乎大家还是不是很满意?因为你得到的所有最多少条,是经过某个列的排序以后才得到的,那么如何得到没有经过排序的,即你们认为在表中原始存储的后10条数据呢(前10条太简单了,之间rownum<11就可以了),或者是取道中间的第2到第3条数据呢?这个时候,我们就可
39、以利用嵌套查询来实现这个操作,请看下面这个例子:SQL> select * from (select rownum as rn,t1.empno,t1.ename from emp t1) where rn>2 and rn<5; RN EMPNO ENAME- - - 3 7521 WARD 4 7566 JONESSQL> select * from (select * from (select rownum as rn,t1.empno,t1.ename from emp t1) order by rn desc) where rownum<3; RN EM
40、PNO ENAME- - - 14 7934 MILLER 13 7902 FORD5. XMLDATA第四节 注释在sql语句内部的注释不会影响到语句的执行,但是却能增加语句的可读性与可维护性。它可以出现在任何的关键字,参数和标点符号之间。有两种注释形式:1、 以“/*”开始,以“*/”结束,在这之间的所有东西都是注释部分,可以跨行,多行注释。2、 以“-”开始,此行之后的所有部分为注释,不能跨行,单行注释。第五节 数据库的对象1. 模式对象一个模式(schema)就是数据库的数据逻辑结构的集合,或称模式对象。一个模式属于一个数据库的用户,并且它的名字就是用户的名字,如在数据库中有一个tao
41、bao用户,那么在数据库中就有一个taobao模式,taobao用户的所有对象的集合就称为taobao模式。因此,很多情况下,它们两个通用。既然模式对象和某个用户是相互对应关联的,也就是说某个用户存在的时候,其相对应的模式对象才有存在的意义,因此对应的用户被删除以后,其所对应的模式对象也将全部被删除,基于这些模式对象而建立起来的其他的对象都将失效,如a用户存储过程p是中引用了b用户的表t,那么b被删除以后,t被删除,p不会被删除,但是p过程就失效了。下面列出数据库的模式对象:名称解释ClustersConstraintsDatabase linksDatabase triggersDimens
42、ionsExternal procedure librariesIndex-organized tablesIndexesIndextypesJava classesJava resourcesJava sourcesMaterialized viewsMaterialized view logsObject tablesObject typesObject viewsOperatorsPackagesSequencesStored functionsstored proceduresSynonymsTablesViews2. 非模式对象非模式对象,与模式对象进行对照,很显然,它是不会随着用户
43、的消失而离开的独立的数据库对象,它包括:名称解释ContextsDirectoriesParameter files (PFILEs) Server parameter files (SPFILEs)ProfilesRolesRollback segmentsTablespacesUsers具有讽刺意味的是user也是非模式对象,可以这样理解用户a独立于、不依赖于用户b而存在。3. 部分模式对象第六节 格式模型1. 时间格式元素表示含义-/,.;:“test”这些标点符号和具体的字符串,最终会显示出来,其实他们启到的作用就是分隔,如下面这个日期:2007-9-16这里符合 “-”就启到了分隔年
44、月日的作用。ADA.D.公元后BCB.C.公元前AMA.M.早上,上午PMP.M.下午D一周的第几天,星期天是1DAY星期几,一共用9个字符大小来显示,如果没有这么长,名称的右边用空格来填充DD一个月的第几天,【131】DDD一年的第几天,【1366】DY星期几,但是是简称,如周一可能就是MONFF0.9这个是用于timestamp类型的,用于表示将秒分成多少位数来表示,在FF后面跟上一个0到9的数字。HH小时,【112】HH12小时,【112】HH24小时,【023】MI分钟,【059】MM月份,【0112】MON月份,但是是月份的简称,如1月可能是JAN来表示MONTH月份,月份的名称,如
45、9月可能是september来表示,一共用9个字符大小来显示,如果没有这么长,名称的右边用空格来填充Q季节,【1,2,3,4】分别代表春夏秋冬SS秒,【059】SSSS从午夜0秒开始计算到现在的秒数WW一年的第几个周,【153】W一个月的第几个周,【15】Y,YYY年份,中间有个逗号YEARSYEAR年份,用字符串显示,S表示指示公元前(BC)使用“-”表示YYYYSYYY4个数字的年份,S表示指示公元前(BC)使用“-”表示YYYYYY分别表示年份的后面三个、两个、一个数字第七节 操作符1. 操作符列表2. 操作符优先级3. 连接操作符4. 集合操作符第二章 表达式第三章 条件所谓条件就是通
46、过计算指定的一个或者多个表达式和逻辑操作,而返回一个布尔值TRUE、FALSE或者UNKNOWN。条件可以分为很多种类型,有以下几类:那么条件在一个语句中的哪些位置可以放置呢?可以在下列位置放置:1、 WHERE子句中2、 START WITH子句中(大家很少用到)3、 CONNECT BY子句中(大家也很少用到)4、 HAVING子句中另外简单的条件是可以相互组合成一个复杂的条件,如(1=1) AND (5=7)。第一节 条件的优先级那么当许多条件在一起的时候,哪个先执行,哪个后执行呢,即条件的优先级是什么呢?下面以优先级从高到低的顺序来列出条件的优先级:条件类型说明SQL操作符如加减乘除,
47、请参考操作符的优先级= != < > <= >=比较IS NOT NULLLIKENOT BETWEENNOT INEXISTSIS OF type比较NOT求幂、逻辑否定AND连接,逻辑与OR分离,逻辑或第二节 比较条件比较条件,顾名思义,它就是比较两个表达式的,它的结构返回一个布尔类型的值TRUE,FALSE或UNKNOWN。下面是比较条件的列表:比较条件说明=相等的比较!= , = , <>不等的比较,有些平台不能使用某些符号> , <大于 ,小于>= , <=大于或等于,小于或等于ANYSOME它的左边是一个值,它的右边是一系
48、列值或者一个查询子句(它返回一个或者多个值),它的功能就是比较左边的是否在右边之中。如果它右边是一个查询子句,当这个查询子句无返回值的时候,那么整个比较条件返回FALSE。这两个比较操作必须跟在=, !=, >, <, >=, <=的后面。ALL和some,any的要求一样,只不过它的功能是比较它左边的值对右边值的比较必须所有的都正确结果才为TRUE,否则为FALSE。如果它右边是一个查询子句,当这个查询子句无返回值的时候,那么整个比较条件返回TRUE。它必须跟在=, !=, >, <, >=, <=的后面。关于any和some以及all,我想来
49、做个实验,说明它们的作用。首先请看下面的数据分布情况:SQL> select * from dept; DEPTNO DNAME LOC- - - 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON对any、some进行一个正确的等值判断,请看结果:SQL> select deptno,dname from dept where 'BOSTON'=any(select loc from dept); DEPTNO DNAME- - 10 ACCOUNTING 20 RESEARCH 30 SALES 40 OPERATIONSSQL> select deptno,dname from d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027届甘肃省定西市高考物理倒计时模拟卷(含答案解析)
- 2026年德育处上半年学生管理总结
- 工厂能耗节能专员2026年二季度厂区节能优化总结
- 2026年秋季幼儿园开学第一课 交通安全知识
- 四川省广安市2026年中考物理试卷附同步解析
- 2026年农业旅游消费者的决策影响因素
- 广东省广州市荔湾区西关外国语学校2024-2025学年九年级11月月考历史试题(含答案)
- 人文关怀在儿科护理中的应用
- lecture03f连续基础课堂练习题
- DNA分子的双螺旋结构模型
- 2026广西正远监理咨询有限公司第二批项目制用工招聘47人笔试模拟试题及答案详解
- 2027届高三启航学生动员大会上校长讲话:把极限刻在 2027 的坐标上
- 2026年湖北省综合评标评审专家库专家考试在线题库及答案
- 2025年芜湖市繁昌区区属国有企业招聘考试试卷真题
- 设备购买意向性合同
- 正确刷牙方法指导
- 设计图纸审批制度
- 铁路信号工考试题库(附答案)
- 博睿测控 B系列智能型电动执行器安装使用手册D21A-211213
- 2025年青海省格尔木市检察官、法官入员额考试真题(附答案)
- 物流公司总经理责任制度
评论
0/150
提交评论