
高级SQL
事后诸葛亮
深入浅出!
展开
-
高级sql学习——with子句!!!
使用WITH AS 语句可以为一个子查询语句块定义一个名称,使用这个子查询名称可以在查询语句的很多地方引用这个子查询。Oracle 数据库像对待内联视图或临时表一样对待被引用的子查询名称,从而起到一定的优化作用。with子句是9i新增语法。你可以在任何一个顶层的SELECT 语句以及几乎所有类型的子查询语句前,使用子查询定义子句。被定义的子查询名称可以在主查询语句以及所有的子查询语句中引用,但未定义前不能引用。with子句中不能嵌套定义,但子查询中出现的“子查询定义”语句可以引用已定义的子查询名称。with原创 2010-10-13 15:40:00 · 7278 阅读 · 0 评论 -
Oracle10g新特性——记录DML错误日志(三)
当一个DML运行的时候,如果遇到了错误,则这条语句会整个回滚,就好像没有执行过。不过对于一个大的DML而言,如果个别数据错误而导致整个语句的回滚,会浪费很多的资源和运行时间,从10g开始Oracle支持记录DML语句的错误,而允许语句自动继续执行。这篇介绍DML记录语句不支持的数据类型。Oracle10g新特性——记录DML错误日志(一):http://yangtingkun.itpub.转载 2013-01-10 09:34:21 · 696 阅读 · 0 评论 -
Oracle10g新特性——记录DML错误日志(二)
当一个DML运行的时候,如果遇到了错误,则这条语句会整个回滚,就好像没有执行过。不过对于一个大的DML而言,如果个别数据错误而导致整个语句的回滚,会浪费很多的资源和运行时间,从10g开始Oracle支持记录DML语句的错误,而允许语句自动继续执行。这篇介绍DML记录语句的限制。Oracle10g新特性——记录DML错误日志(一):http://yangtingkun.itpub.net/p转载 2013-01-10 09:33:41 · 914 阅读 · 1 评论 -
Oracle10g新特性——记录DML错误日志(一)
当一个DML运行的时候,如果遇到了错误,则这条语句会整个回滚,就好像没有执行过。不过对于一个大的DML而言,如果个别数据错误而导致整个语句的回滚,会浪费很多的资源和运行时间,从10g开始Oracle支持记录DML语句的错误,而允许语句自动继续执行。这篇介绍DML记录语句的用法。看一个插入语句的简单例子:SQL> CREATE TABLE T (ID NUMBER, NAME转载 2013-01-10 09:33:11 · 1125 阅读 · 0 评论 -
高级sql学习——merge into合并资料!!!
语法:(其中as可以省略)MERGE INTO table_name AS table_aliasUSING (table|view|sub_query) AS aliasON (join condition)WHEN MATCHED THENUPDATE SETcol1 = col_val1,col2 = col2_val --9i 不可以有where条件,10g 可原创 2010-10-13 17:09:00 · 1084 阅读 · 0 评论 -
sql语句总结!!!
当和NULL进行+、-、*、/运算后的结果全是NULL。当和NULL进行||操作后的结果是它自己。别名用双引号,||字符串用单引号包围。where子句里面不可以使用别名。order by子句里面可以使用别名。--------------------------------------------------------select 列1 from 表 where 列2 like '%a%'; --包含"a"字母的。select 列1 from 表 where 列2 like '%a';原创 2011-05-23 10:02:00 · 738 阅读 · 0 评论 -
高级sql学习--扩展DDL和DML!!!
<br />--直接创建表并且插入数据,依赖于后面的select语句的结果create table test11 as select * from test1;--只复制表结构,约束不赋值。1=0不查询记录,只复制基本结构。create table test12 as select * from test1 where 1=0;--通过select语句查询的记录插入到指定表的所有列或者指定列中。insert into test12(a,b) select teset11.原创 2010-10-15 22:13:00 · 752 阅读 · 0 评论 -
高级sql学习--增强group by!!!
<br />总结:<br />1.提示当使用group by时,未在group by部分用到的表列在select部分出现时必须使用分组函数。<br />2.having子句允许用户指定对一个记录组的搜索条件。而通常的where查询条件只针对单记录,不针对记录组。<br />3.在Group By子句中,必须采用表达式的全称,而不能够采用其别名.<br />4.采用Group语句会自动对纪录进行排序。在使用Order By排序子句对统计结果进行重新排序的时候,要慎重。<br />5.如果想把某个字段当作第一顺原创 2010-10-15 22:12:00 · 2051 阅读 · 0 评论 -
高级sql学习——相关子查询和非相关子查询!!!
<br />子查询:嵌套在其他查询中的查询称之。<br />子查询又称内部,而包含子查询的语句称之外部查询(又称主查询)。<br />所有的子查询可以分为两类,即相关子查询和非相关子查询 <br />1>非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。 <br />2>相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。<br />故非相关子查询比相关子查询效率高<br /> <br />非相关子查:<br />select t1.ename,t原创 2010-10-14 15:26:00 · 6458 阅读 · 0 评论 -
高级sql学习——rownum—top-N分析!!!
<br />Rownum是oracle中的一个伪列,其目的就是给查询的行标注行号。可以实现查询前n行,中间几行,最后几行的功能。<br />注意点:<br />1.rownum不可以直接在前面加上表名或别名等。<br />2.rownum 和where 在同一层查询中,where 条件之后使用rownum 比较,只能使用<=,<,!=,<>。不能使用>,>=,=(使用=,只能是where rownum=1才可以)。否则不返回任何数据。如果使用!=或<>,那么只是返回前n-1行。<br />3.当rownum原创 2010-10-14 15:14:00 · 1928 阅读 · 0 评论 -
高级sql学习——null详解,字符格式详解,随机值查询!!!
<br />一。null详解<br />null 是oracle 中一个特殊的值,它的含义是”unknown”。如果一个列的内容是null,则说这个列是空值。截止到oracle最新版本,oracle一直将null和空字符串’’<长度为0>同等对待<如’’ is null是true,’’=null为false,如果声明a varchar2:=’’,那么a is null为true,a=’’为false>。<br /> <br />null基本知识:<br />1.限制一个列不能是null 值,可以通过not原创 2010-10-14 16:41:00 · 1431 阅读 · 0 评论 -
高级sql学习——decode函数和case表达式!!!
<br />1.decode函数<br />Decode函数的语法结构如下:<br />decode (expression, search_1, result_1)decode (expression, search_1, result_1, search_2, result_2)decode (expression, search_1, result_1, search_2, result_2, ....,search_n, result_n)decode (expression, sear原创 2010-10-14 14:10:00 · 1521 阅读 · 0 评论 -
高级sql学习——层次查询(Hierarical Retrival)!!!
语法:SELECT [LEVEL],column,expr...FROM table[WHERE condition(s)][START WITH condition(s)][CONNECT BY PRIOR condition(s)];总结:1.其中level关键字是可选的,level是层次查询的一个伪列,如果有level,必须有connect by,start with可以没有,level不可以前面加表名。2.From之后可以是table,view但是只能是一个table。3.Where原创 2010-10-14 11:01:00 · 4526 阅读 · 0 评论 -
高级sql学习——exists和not exists的使用!!!
<br />1. exists的使用<br />Exists 用于只能用于子查询,可以替代in,若匹配到结果,则退出内部查询,并将条件标志为true,传回全部结果资料。in 不管匹配到匹配不到都全部匹配完毕,使用exists 可以将子查询结果定为常量,不影响查询效果,而且效率高。<br />In和exists对比:若子查询结果集比较小,优先使用in,若外层查询比子查询小,优先使用exists。因为若用in,则oracle 会优先查询子查询,然后匹配外层查询,若使用exists,则oracle 会优先查询外层原创 2010-10-13 11:25:00 · 1454 阅读 · 0 评论 -
高级sql学习——集合操作!!!
<br />UNION 由每个查询选择的所有不重复的行 并集不包含重复值,默认按第1个查询的第1列升序排列<br />UNION ALL 由每个查询选择的所有的行,包括所有重复的行 包括所有重复的行 完全并集包含重复值,不排序<br />INTERSECT 由每个查询选择的所有不重复的相交行 交集,不包含重复行,按第1个查询的第1列升序排列<br />MINUS 在第原创 2010-10-13 10:49:00 · 838 阅读 · 0 评论 -
高级sql学习--sql性能优化!!!
1.sql语句用大写的;因为oracle总是先解析sql语句,把小写的字母转换成大写的再执行 在java代码中用到preparedStatement的時候尽量少用连接符“+”连接字符串!2. 使用表的别名(Alias) 当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.3.原创 2010-10-15 22:14:00 · 1022 阅读 · 0 评论