子查询及exists

子查询分为无关子查询和相关子查询

无关子查询,只查询一次,与外查询无关,可作为查询条件:

select * from student where sno in (select sno from student where class = 98789);

  也可作为一个虚拟表使用。

相关子查询,查询多次,依赖外部查询:

select * from student  where exists (select * from Student);--只要存在条件满足,就查询

在这里引申出一个exists,它和in的区别是:

使用EXISTS,Oracle会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。Oracle在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用EXISTS比使用IN通常查询速度快的原因

(转自 http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html)

时间: 2024-10-12 02:01:33

子查询及exists的相关文章

mysql---where子查询、form子查询、exists子查询

1.什么是子查询? 当一个查询是另一个查询的条件时,称之为子查询. 2.子查询有什么好处? 子查询可以使用几个简单命令构造功能强大的复合命令. 那么,现在让我们一起来学习子查询. 3.where型的子查询 给它个定义吧:where型的子查询就是把内层查询的结果当作外层查询的条件. 现在,我们来查询文章表里每组主题分类下评论最多的文章. 给定表如下: create table article(article_id int(3),article_title varchar(50),article_c

mysql优化---in型子查询,exists子查询,from 型子查询

in型子查询引出的陷阱:(扫更少的行,不要临时表,不要文件排序就快) 题: 在ecshop商城表中,查询6号栏目的商品, (注,6号是一个大栏目) 最直观的: mysql> select goods_id,cat_id,goods_name from goods where cat_id in (select cat_id from category where parent_id=6); 误区: 给我们的感觉是, 先查到内层的6号栏目的子栏目,如7,8,9,11 然后外层, cat_id in

Mysql——子查询

子查询的位置: select 中.from 后.where 中.group by 和order by 中无实用意义. 子查询分为如下几类: 1,标量子查询:返回单一值的标量,最简单的形式. 2,列子查询:返回的结果集是 N 行一列. 3,行子查询:返回的结果集是一行 N 列. 4,表子查询:返回的结果集是 N 行 N 列. 可以使用的操作符:= > < >= <= <> ANY IN SOME ALL EXISTS 标量子查询:是指子查询返回的是单一值的标量,如一个数字

高级数据操作--子查询

一.子查询——标量子查询 子查询的概念 思考: 如何得到php_student表中成绩最高的学生的记录? 1 select * from php_student order by score desc limit 1; 但是,存在一个逻辑问题,如果最高分有很多人,怎么办! 1 insert into php_student values 2 (null,'观世音','female',17,5000,'南海',100), 3 (null,'如来','male',17,6000,'西天',100);

SQL编程之高级查询(子查询)以及注意事项

1.什么是子查询? 当一个查询是另一个查询的条件时,称之为子查询.子查询可以使用几个简单命令构造功能强大的复合命令.子查询最常用于SELECT-SQL命令的WHERE子句中.子查询是一个 SELECT 语句,它嵌套在一个 SELECT.SELECT...INTO 语句.INSERT...INTO 语句.DELETE 语句.或 UPDATE 语句或嵌套在另一子查询中. 语法:select ....from  表1  where  列1  > (子查询) 外面的查询成为父查询,圆括号嵌入的查询成为称

mysql之子查询

所谓子查询,就是指在一个查询之中嵌套了其他的若干查询,通过子查询可以实现多表查询,该查询语句中可能包含IN,ANY,ALL和EXISTS等关键字,除此之外还可以包含比较运算符,子查询经常出现在WHERE和FROM字句中. WHERE字句中的子查询:该位置处的子查询一般返回单行单列,多行单列,单行多列数据记录. FROM字句中的子查询:该位置处的子查询一般返回多行多列数据记录,可以当作一张临时表. 1. 返回结果为单行单列和单行多列子查询 当子查询的返回结果为单行单列数据记录时,该子查询语句一般在

Oracle基本语法&amp;&amp;函数&amp;&amp;子查询&amp;&amp;分页查询&amp;&amp;排序&amp;&amp;集合操作&amp;&amp;高级分组函数

一.  数据库 手工---文件管理---数据库 DB:Database 数据库. DBMS:管理数据库的软件.(oracle) 主流关系数据库: 1.      Oracle 2.      DB2 3.      SQL Server 基本没人使 4.      MySQL  基本没人用,免费 Linux 开源,可以发现漏洞补上 Windows服务器会有补丁,数据易泄漏 eclipse 日食 数据表(Table): 表的行(Row):记录 表的列(Column):字段 二.  关系型数据库 一

MySQL里面的子查询

一.子查询定义 定义: 子查询允许把一个查询嵌套在另一个查询当中. 子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询. 子查询可以包含普通select可以包括的任何子句,比如:distinct. group by.order by.limit.join和union等:但是对应的外部查询必须是以下语句之一:select.insert.update.delete.set或 者do. 子查询的位置: select 中.from 后.where 中.group by 和order by

SQL中的子查询

目录 WHERE子查询 HAVING子查询 FROM子查询 SELECT子查询 EXISIT子查询 查询薪资排名的员工信息(面试) z子查询就是将一个查询(子查询)的结果作为另一个查询(主查询)的数据来源或判断条件的查询.常见的子查询有WHERE子查询,HAVING子查询,FROM子查询,SELECT子查询,EXISTS子查询,子查询要使用小括号(): WHERE子查询 在WHERE子句中进行使用查询 SELECT * FROM EMP WHERE SAL < (SELECT AVG(SAL)