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相关推荐

  1. 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 ...

  2. oracle数据库or exists,Oracle Not Exists运算符

    本篇文章帮大家学习Oracle Not Exists运算符,包含了Oracle Not Exists运算符使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 在本教程中,您将 ...

  3. Oracle执行exists优化,PHP_解决Oracle性能优化中的问题, 在Oracle性能优化时,用exists - phpStudy...

    在Oracle性能优化时,用exists替代in,用表链接替代exists,关于前者,一般效果比较明显,exists效率明显比in高,但是如果要想表连接的效率比exists高,必须在from子句中,将 ...

  4. oracle中exists连接两个表,IN、EXISTS、多表连接,哪个速度更快

    本帖最后由 ghsau 于 2011-10-11 23:39 编辑 请看下面三个执行计划(Oracle10g) 1.  用IN SQL> select ename from emp e wher ...

  5. oracle中exists和not exists用法(包含经典例题:查看学了所有课程的同学的信息的通俗易懂解释)

    1.基本概念: select * from A where not exists(select * from B where A.id = B.id); select * from A where e ...

  6. oracle的exists用法总结

    exists含义 exists表示()内子查询语句返回结果不为空说明where条件成立就会执行主sql语句,如果为空就表示where条件不成立,sql语句就不会执行.not exists和exists ...

  7. Oracle中exists与in的效率探讨

    in 与 exist 的语法比较:           select × from 数据表 t where t.x in (...)       括号内可以是符合t.x字段类型的值集合,如('1',' ...

  8. ORACLE中exists与in的区别

    --exists支持字段为空 select * from t_flight_info a where not exists (select * from M_CITY_PAIR where a.ade ...

  9. oracle中exists ,not exists用法

    sql: SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS(SELECT OrderID FROM Orders o WHER ...

  10. Oracle 11g服务器与客户端卸载、安装

    Oracle 11g服务器与客户端的完全卸载方式与前些版本有了改变: 一.卸载前准备: 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务. 二.批处理卸载 ...

最新文章

  1. 代码规范指南:怎样写才能干净整洁
  2. struts2学习笔记(二):Struts2配置
  3. Python 的闭包和装饰器
  4. Codeforces Round #496 (Div. 3)【未完结】
  5. 每日一shell(八)nginx日志切割
  6. 如果你想写自己的Benchmark框架
  7. 95-290-050-源码-内存管理-堆外内存与堆内内存概述
  8. python等待用户输入指定秒_如何在10秒后强制用户输入
  9. QT_Astyle 代码管理工具
  10. Android学习小Demo(12)TodoList实现ListView的分组实现
  11. http: s18.me/ios.html,Public Key Infrastructure Configuration Guide, Cisco IOS XE Release 3S
  12. nginx 配置静态网页
  13. DELL新版BIOS重装系统win10
  14. 基于Xposed开发微信云客服笔记
  15. 用c语言实现字母排列组合,C语言字母排列组合的实现.pdf
  16. HiveHive创建数据库与创建数据库表
  17. java网课|Map线程
  18. 初识机器阅读理解(Machine Reading Comprehension)
  19. ramdump,QPST
  20. JS Boolean 初始值

热门文章

  1. 谢辉吉林大学计算机学院,【大科·数院】佳绩频传,成果丰硕——第12届中国大学生计算机设计大赛吉大赛区数院学子成绩斐然...
  2. Win10查看电脑的开机时间和关机时间记录
  3. 年薪60w的程序员与年薪6w的极品程序员,差距怎么这么大呢?
  4. layout 工程师如何提升自己? 2020-3-27
  5. 关于提问的一些书籍及文章
  6. [译]AngularJS1.3.0 开发者指南(四) -- 控制器
  7. mantis 邮件配置 linux,mantis安装与配置(Windows+Mysql+PHP+IIS)
  8. 读《大秦帝国》第三部
  9. 优秀员工评审表 模板
  10. android实现qq邮箱多个图标效果