oracle-in/exists
oracle-in/exists
-- 非相关子查询(Uncorrelated Sub-Query)
SELECT * FROM STAFF WHERE COMPANYID IN
(
SELECT COMPANYID FROM COMPANY WHERE TELNO='88888888'
);-- 相关子查询(Correlated Sub-Query)
SELECT * FROM STAFF U WHERE EXISTS
(
SELECT * FROM COMPANY C WHERE TELNO='88888888' AND U.COMPANYID=C.COMPANYID
);SELECT * FROM COMPANY
-- 这个是MySQL的语法
INSERT INTO COMPANY(COMPANYID,TELNO) VALUES(1,'88888888'),(2,'88888888')
-- 在Oracle中运行后会出现错误
-- > ORA-00933: SQL 命令未正确结束
-- 插入多条需要使用insert all以及多条into tablename(col,col,...) values(value,value,...)
-- 最后需要加上select语句,如果values中的值跟选择的表没有关系的话,随便写一个dual就可以了
-- 可以使用该语句插入从select语句中选择的列
/*
create table sales_input_table (
prod_id number(9,0),
amt_mon number(9,6),
amt_tue number(9,6),
amt_wed number(9,6),
amt_thu number(9,6),
amt_fri number(9,6)
);
insert into sales_input_table values (1, 100.0, 200.0, 300.0, 400.0, 500.0);CREATE TABLE sales (
prod_id number(9,0),
time_id date,
amount number(9,0)
);INSERT ALL
INTO sales (prod_id, time_id, amount) VALUES (prod_id, CURRENT_DATE, amt_mon)
INTO sales (prod_id, time_id, amount) VALUES (prod_id, CURRENT_DATE + 1, amt_tue)
INTO sales (prod_id, time_id, amount) VALUES (prod_id, CURRENT_DATE + 2, amt_wed)
INTO sales (prod_id, time_id, amount) VALUES (prod_id, CURRENT_DATE + 3, amt_thu)
INTO sales (prod_id, time_id, amount) VALUES (prod_id, CURRENT_DATE + 4, amt_fri)
SELECT prod_id, amt_mon, amt_tue, amt_wed, amt_thu, amt_fri FROM sales_input_table;
*/
INSERT ALL INTO COMPANY(COMPANYID,TELNO) VALUES(1,'88888888')
INTO COMPANY(COMPANYID,TELNO) VALUES(2,'88888888')
SELECT 1 FROM DUAL;SELECT * FROM STAFF;INSERT ALL INTO STAFF(USERID,COMPANYID,TELNO) VALUES(1,1,'11110000')
INTO STAFF(USERID,COMPANYID,TELNO) VALUES(2,1,'00002222')
SELECT 1 FROM DUAL;
/*
select * from T1 where exists(select b from T2 where T1.a = T2.a);
【当T1数据量小而T2数据量非常大的时候,此句效率高】
exists中数据存在则说明where条件成立; 不存在或报语法错误,则where不成立,相当于执行了select * from T1select * from T1 where T1.a in(select T2.a from T2);
【当T1数据量非常大而T2数据量小时,此句效率高】
in后面搜索出来的字段内容要与T1相对应,T1和T2两个表中的a字段表达意义应是一样的才行,否则没意义。select name from employee where name not in (select name from student);
select name from employee where not exists (select name from student);
第二句的sql效率要高于第一句;
通过使用EXISTS,Oracle会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。Oracle在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用EXISTS比使用IN通常查询速度快的原因。
当前这一小段注释来自
作者:Advancer-lbh
原文:https://blog.csdn.net/u013709087/article/details/72870013
*/
-- Oracle 多字段查询
SELECT * FROM STAFF WHERE (USERID,COMPANYID) IN (
SELECT USERID,COMPANYID FROM STAFF
);
/*
这里可以从其他表选择多个条件,然后使用in进行条件where进行判断选择
*/-- Oracle 多字段更新
UPDATE EMPLOYEE SET (BIRTHDAY,DEGREE)=
(
-- 此处是相关子查询
)
WHERE 条件;
oracle-in/exists相关推荐
- ORACLE NOT EXISTS不等值 改写成hive
ORACLE NOT EXISTS不等值 改写成hive SELECT A.A1, A.A2,A.A3,A.A4FROM ALEFT JOIN C ON A.A6= C.C6WHERE NOT EXI ...
- oracle数据库or exists,Oracle Not Exists运算符
本篇文章帮大家学习Oracle Not Exists运算符,包含了Oracle Not Exists运算符使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 在本教程中,您将 ...
- Oracle执行exists优化,PHP_解决Oracle性能优化中的问题, 在Oracle性能优化时,用exists - phpStudy...
在Oracle性能优化时,用exists替代in,用表链接替代exists,关于前者,一般效果比较明显,exists效率明显比in高,但是如果要想表连接的效率比exists高,必须在from子句中,将 ...
- oracle中exists连接两个表,IN、EXISTS、多表连接,哪个速度更快
本帖最后由 ghsau 于 2011-10-11 23:39 编辑 请看下面三个执行计划(Oracle10g) 1. 用IN SQL> select ename from emp e wher ...
- oracle中exists和not exists用法(包含经典例题:查看学了所有课程的同学的信息的通俗易懂解释)
1.基本概念: select * from A where not exists(select * from B where A.id = B.id); select * from A where e ...
- oracle的exists用法总结
exists含义 exists表示()内子查询语句返回结果不为空说明where条件成立就会执行主sql语句,如果为空就表示where条件不成立,sql语句就不会执行.not exists和exists ...
- Oracle中exists与in的效率探讨
in 与 exist 的语法比较: select × from 数据表 t where t.x in (...) 括号内可以是符合t.x字段类型的值集合,如('1',' ...
- ORACLE中exists与in的区别
--exists支持字段为空 select * from t_flight_info a where not exists (select * from M_CITY_PAIR where a.ade ...
- oracle中exists ,not exists用法
sql: SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS(SELECT OrderID FROM Orders o WHER ...
- Oracle 11g服务器与客户端卸载、安装
Oracle 11g服务器与客户端的完全卸载方式与前些版本有了改变: 一.卸载前准备: 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务. 二.批处理卸载 ...
最新文章
- 代码规范指南:怎样写才能干净整洁
- struts2学习笔记(二):Struts2配置
- Python 的闭包和装饰器
- Codeforces Round #496 (Div. 3)【未完结】
- 每日一shell(八)nginx日志切割
- 如果你想写自己的Benchmark框架
- 95-290-050-源码-内存管理-堆外内存与堆内内存概述
- python等待用户输入指定秒_如何在10秒后强制用户输入
- QT_Astyle 代码管理工具
- Android学习小Demo(12)TodoList实现ListView的分组实现
- http: s18.me/ios.html,Public Key Infrastructure Configuration Guide, Cisco IOS XE Release 3S
- nginx 配置静态网页
- DELL新版BIOS重装系统win10
- 基于Xposed开发微信云客服笔记
- 用c语言实现字母排列组合,C语言字母排列组合的实现.pdf
- HiveHive创建数据库与创建数据库表
- java网课|Map线程
- 初识机器阅读理解(Machine Reading Comprehension)
- ramdump,QPST
- JS Boolean 初始值
热门文章
- 谢辉吉林大学计算机学院,【大科·数院】佳绩频传,成果丰硕——第12届中国大学生计算机设计大赛吉大赛区数院学子成绩斐然...
- Win10查看电脑的开机时间和关机时间记录
- 年薪60w的程序员与年薪6w的极品程序员,差距怎么这么大呢?
- layout 工程师如何提升自己? 2020-3-27
- 关于提问的一些书籍及文章
- [译]AngularJS1.3.0 开发者指南(四) -- 控制器
- mantis 邮件配置 linux,mantis安装与配置(Windows+Mysql+PHP+IIS)
- 读《大秦帝国》第三部
- 优秀员工评审表 模板
- android实现qq邮箱多个图标效果