NOT IN之后的子查询不能包含NULL值
如果空值可能是子查询结果的一部分,则不应与主查询中的NOT IN运算符一起使用。为什么呢?看下面例子就明白了。 NOT IN后面的子查询有记录为NULL,主查询查不到记录select * from emp where 3 not in (1, 2, null); 未选定行 因为这个查询可以理解为select * from emp where 3 1
区分关联子查询和非关联子查询
子查询可区分为关联子查询和非关联子查询,他们和外层查询之间的执行顺序和关系是不同的。关联子查询:在关联子查询中,对于外部查询返回的每一行数据,内部查询都要执行一次。另外,关联子查询的信息流是双向的,外部查询的每行数据传递一个值给子查询,然后子查询为每一行数据执行一次并返回它的记录,之后外部查询根据返回的记录做出决策。select * from dept d where exists(select
insert all和insert first语句的用法
insert all和insert first语句,用于按给定条件同时向多个表插入数据,以下记录了它们的用法和区别。1、无条件insert all用于不分条件的向几个表同时插入一批数据。建立测试表create table t1(a number, b varchar2(20));insert into t1 values(1, 'aaa');insert into t1 value
使用正则表达式对数字字符串字段排序
我们在给含有数字的字符串字段进行排序时,常常会遇到一个尴尬的情况,用简单的order by无法给这些字段完整的排序,如以下查询效果,不符合我们的预期:select * from tb1 order by name;怎么办呢?用正则表达式可以解决这个问题,下面给个完整例子:创建测试表create table tb1(name varchar2(50), val number);insert into
用listagg函数分组实现列转行
listagg是Oracle 11.2中新增的函数,listagg可以对order by子句中指定的每个组内的数据进行排序,然后连接这些列的值。以下是简单的应用举例: SELECT deptno, listagg(ename, ',') WITHIN GROUP(ORDER BY ename) AS employees FROM scott.emp GROUP BY de
sys_context函数的用法
sys_context函数是Oracle提供的一个获取环境上下文信息的预定义函数。该函数用来返回一个指定namespace下的parameter值。该函数可以在sql和PL/SQL语言中使用。sys_context实际上就是一个Oracle存储和传递参数的容器访问函数。我们登入Oracle服务器,是带有会话信息和其他一些属性信息的。其中,有一些是Oracle预定义的,登录系统的时候自动填入到指定的
merge into基本用法
由于merge into平时很少用,但这次用到它来给记录做插入更新,于是简单记下最基本的用法。这里的例子就是给一个表中符合条件的数据做个值计数的更新,如果找到符合ID条件的记录,那么就将其值字段加1,否则就插入这条新的记录,并初始化值。 创建测试表并插入数据:create table test1(id number, val number);insert into test1 value
关于外连接和where条件
在外连接中,where后出现的表等同于内连接,因此,如果用了where条件,就应当将left join改为inner join。以下测试验证了这点。with tab_a as(select 1 id1, 11 id2 from dual union allselect 2 id1, 22 id2 from dual union allselect 3 id1, 33 id2 from dual),
Oracle行列转换及pivot子句的用法
一、11g以前的行列转换方法 创建测试表: create tableemp_phone(name varchar2(50), type char, phone varchar2(50)); insert into emp_phonevalues('张三', '1', '1234-5678');insert into emp_phonevalues('张三', '2', '3219-6066');insert into emp_phonevalues...
Oracle分析函数与窗口函数
一、默认窗口与排名函数 最常用的分析函数是排名函数,用于返回当前记录在窗口中的位置。常用的排名函数包括rank()、dense_rank()、row_number()等。排名函数所对应的窗口函数必须指定排序规则,即必须使用order by 子句,而Oracle为每条记录提供的默认窗口为从表中第一条记录开始,直至与当前记录具有相同...
对定义者权限和调用者权限的理解
对于PL/SQL存储过程的调用来说,具有两种权限控制方式:定义者权限和调用者权限。定义者权限表示用户在执行PL/SQL代码的时候,是否有权访问代码中所涉及的对象如表等,是根据创建该PL/SQL的用户是否拥有对其访问权来决定的,而调用者权限则是根据执行该PL/SQL的用户是否具有对其中涉及的对象的访问权来决定是否可访问的。...
SQL函数
SQL函数分单行函数、多行函数(或叫组函数)。 字符函数: lower 转小写upper 转大写initcap 首字母大写,其余小写,以单词为单位initcap('we-are-chinese') We Are Chinese concat 两个字符串的连接,...
Oracle多表插入语句
多表插入语句用于一次性有选择的将数据分别插入到多张表中。多表插入包含以下几种:无条件insert all有条件insert all有条件insert first 以下用Oracle内置的示例用户scott和表emp来测试其用法:sqlplusscott/tigerselect * from emp; &nbs...
等效DESC查询
以下SQL查询等效于DESC命令col name for a20col typefor a20col nullablefor a10coldefaults for a10colcomments for a50select a.column_namename, data_type || decode(data_type, &nbs...
在PL/SQL中执行操作系统命令
首先创建java sourcecreateor replace and compile java source named execsyscmd asimport java.io.*;publicclass ExecSysCmd{ public static String exec_cmd(String args){ Runtime run = Runtime.getRuntime(); &n...
PL/SQL中绑定变量使用的简单测试
通过以下简单的实验可以理解绑定变量的作用,对比SQL语句在不使用和使用绑定变量情况下的解析执行情况。 创建测试表create table scott.t1(inumber); 查看当前会话的解析次数统计select name, value fromv$mystat natural join v$statname where name like 'parse%'; N...