sql语句中where条件的嵌套子查询性能

select * from table1 where ID in (select ID from table2 where ID is not null)
table1中有10行数据
上面的语句被执行时.嵌套子语句被执行10次还是1次?

这取决于table2中不为空的ID的个数K。
查询时,table1表中的每个元组会依次跟table2中的满足条件的元组进行比较,所以嵌套子语句被执行的次数为10K次。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-10
10次!
嵌套子语句 是 被 主语句调用 而筛选 满足条件
所以 嵌套子语句 是被调用了10次 !本回答被提问者采纳
第2个回答  2011-05-09
子查询:
使用子查询的原则
1.一个子查询必须放在圆括号中。
2.将子查询放在比较条件的右边以增加可读性。
子查询不包含 ORDER BY 子句。对一个 SELECT 语句只能用一个 ORDER BY 子句,
并且如果指定了它就必须放在主 SELECT 语句的最后。
ORDER BY 子句可以使用,并且在进行 Top-N 分析时是必须的。
3.在子查询中可以使用两种比较条件:单行运算符和多行运算符。

子查询的类型
单行子查询:从内 SELECT 语句只返回一行的查询
多行子查询:从内 SELECT 语句返回多行的查询

单行子查询
单行子查询是从内查询返回一行的查询。在该子查询类型中用一个单行操作符。幻灯片中列出了单行操作符。


显示那些 job ID 与雇员 141 相同的雇员。
SELECT last_name, job_id
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE employee_id = 141);

SELECT last_name, job_id, salary
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE employee_id = 141)
AND salary >
(SELECT salary
FROM employees
WHERE employee_id = 143);
显示 job ID 与雇员 141 相同,并且薪水 高于雇员 143 的那些雇员。

注:外和内查询可以从不同的表中取得数据。

SELECT last_name, job_id, salary
FROM employees
WHERE salary =
(SELECT MIN(salary)
FROM employees);
求所有人谁的工资最小。

SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary) >
(SELECT MIN(salary)
FROM employees
WHERE department_id = 50);
求每个部门的最小工资,但是要高于50号部门的工资。

SELECT employee_id, last_name
FROM employees
WHERE salary =
(SELECT MIN(salary)
FROM employees
GROUP BY department_id);
问题出现在:单行子查询返回了多个查询值;
应改为:
SELECT employee_id, last_name
FROM employees
WHERE salary in
(SELECT MIN(salary)
FROM employees
GROUP BY department_id);

SELECT last_name, job_id
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE last_name = 'Haas');
如果子查询返回的是零值,不会对主程序造成影响;
如果子查询返回的是空值,那么会影响主程序的返回值;
SELECT employee_id,
last_name
FROM employees
WHERE employee_id NOT IN
(SELECT manager_id
FROM employees)

SELECT employee_id,
last_name
FROM employees
WHERE employee_id NOT IN
(SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL)
放在select下的子查询的返回值必须是一个具体值,
from后面也可以加子查询;
having后面也可以加子查询;
order by后面也可以;

多列子查询适应于:成对比较;非成对比较。

SELECT employee_id, manager_id, department_id
FROM employees
WHERE (manager_id, department_id) IN
(SELECT manager_id, department_id
FROM employees
WHERE employee_id IN (178,174))
AND employee_id NOT IN (178,174);

输出:176 149 80

只有要查询的东西和你子查询返回的东西一一对应上了,你的查询才能成功。
如果有一个 对应不上那么你的查询不会成功。

非成对的子查询:
SELECT employee_id, manager_id, department_id
FROM employees
WHERE manager_id IN (SELECT manager_id
FROM employees
WHERE employee_id IN (174,141))
AND department_id IN (SELECT department_id
FROM employees
WHERE employee_id IN (174,141))
AND employee_id NOT IN(174,141);
输出:144 124 50
143 124 50
142 124 50
176 149 80
上面两个程序就是成对子查询和非成对子查询两者之间的区别。

如果我想去显示员工信息,要求:员工的工资高于本部门的平均工资。
SELECT a.last_name,
a.salary,
a.department_id
FROM employees a
WHERE a.salary >
(SELECT AVG(salary)
FROM employees b
WHERE b.department_id = a.department_id);

in line view(内联视图)

SELECT a.last_name, a.salary,
a.department_id, b.salavg
FROM employees a, (SELECT department_id,
AVG(salary) salavg
FROM employees
GROUP BY department_id) b
WHERE a.department_id = b.department_id
AND a.salary > b.salavg;
第3个回答  2011-05-08
1次

sql语句中where条件的嵌套子查询性能
查询时,table1表中的每个元组会依次跟table2中的满足条件的元组进行比较,所以嵌套子语句被执行的次数为10K次。

第八十八章 SQL命令 WHERE(一)
WHERE子句的核心功能是根据逻辑测试(谓词)来过滤数据,这些测试可以是单个条件或多个条件的组合,通过AND或OR操作符链接。在处理除法时,应避免潜在的被零除问题,通过CASE语句来规避风险。在条件表达式中,可以嵌套子查询,但必须使用圆括号明确括起来。指定字段时,WHERE子句可以比较字段值与特定值,使用列...

where条件放在子SQL语句中是不是查询速度更快?
1、具体的语句得具体分析 2、总体你的想法是对的 3、跟开发是一样的。4、直接的相当于全局,子句可以理解为局部 这相当于全局变量和局部变量一样,局部的(子句),比较省内存;如果全局的使用比较多,那全局的会好一点。海枫科技

SQL基础(三)进阶操作【子查询、嵌套查询】
子查询通常不使用ORDER BY,只影响查询结果的最终呈现。它有多种定义方式:一是作为WHERE或HAVING子句中的嵌套SELECT语句;二是根据查询结果的行数分类,单行子查询对应单一条件比较,如等于(=)、大于(>)等;多行子查询则通过IN、ALL、ANY操作符处理多行数据比较。例如,单行子查询如查询所有选修了Ron...

SQL嵌套查询
嵌套查询在SQL中是一种重要的查询手段,它允许在查询的条件部分嵌套另一个查询。简单来说,一个SELECT语句嵌套在另一个SELECT语句的WHERE或HAVING条件中,就构成了嵌套查询。这种结构体现了SQL语言的层次性和灵活性。嵌套查询有其限制,其中最显著的是不能在子查询中使用ORDER BY子句。有些情况下,通过...

SQL 中 where 后面可不可以跟上子查询
可以用in,也可以用exists,但推荐用inner join,inner join效率会更好 in:select 编号,姓名 from 学生信息表 where 编号 in (select 编号 from 学生成绩表)exists:select 编号,姓名 from 学生信息表 as a where exists (select 1 from 学生成绩表.编号=a.编号)inner join:select 编号,姓名 from...

什么是子查询?
子查询就是查询语句的嵌套,即在外部查询中还包含一个内部查询。当一个查询是另一个查询的条件时,称之为子查询。子查询可以使用几个简单命令构造功能强大的复合命令,子查询最常用于SELECT语句的where子句中。另外,子查询可作为一个临时表来使用,完成更为复杂表联结数据的检索功能。子查询类型1.SOHSOH...

一文讲懂SQL子查询
SQL语句可以嵌套,最常见的就是查询语句的嵌套。基本语法:我们一般称外面嵌套的语句为主查询,里面被嵌套的语句为子查询。子查询要用括号括起来。子查询+WHERE子句:子查询的结果作为WHERE子句的筛选条件,完成更复杂的数据检索。实例:在Students表中,找出所有在"宁一"后面出生的学生。实例解析:需要先...

子查询(嵌套子查询)
1.查询基本工资比ALLEN低的全部雇员信息 a.找到ALLEN的工资,返回一个 单行单列 的数据 b. 在where子句中里面使用子查询 2.查询与雇员7566从事统一工作且领导相同的的全部雇员信息 a.找到7566的工作和领导,返回 单行多列 的数据 b.在where子句中里面使用子查询 3.查询工资与每个部门中...

数据库的SQL语句中,嵌套查询和连接查询有什么区别,说的详细的
嵌套就是类似IN语句,比如select * from table1 where id in (select id from table2),连接就是用JOIN把2表根据一个字段进行数据连接,区别就是连接查询效率比嵌套高,而且JOIN可以通过改变JOIN先后顺序,先扫描记录少的表,从而提高速度,如果嵌套会固定先搜索子查询 ...

相似回答