前段时间有一个
相关子查询
的
SQL
语句,看不太懂他是如何
执行
的,为什么会出现那个结果。着实纠结了一把。下面来讲一下非
相关子查询
和
相关子查询
的
执行
过程
是怎样的。
非
相关子查询
先看一个非
相关子查询
到
sql
语句。
需求:查询学生表student和学生成绩表grade中成绩为70分的学生的基本信息。
select t.sno,t.sname,t.sage,t.sgentle,t.sbirth,
主要参考博客:
https://blog.csdn.net/yellowelephant/article/details/88064645?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-3&spm=1001.2101.3001.4242
##创建员工信息表
create table emp(
empno int(4) primary key,
ename varchar(20),
job varchar(
SQL
Server
子查询
可以分为
相关子查询
和
嵌套
子查询
两类。前提,假设Books表如下:类编号 图书名 出版社 价格
--------------------------------------------------------
2 c#高级应用 圣通出版 23.00
2 Jsp开发应用 机
CREATE TABLE Product
(product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
sale_price INTEGER ,
purchase_price INTEGER ,
当使用IN
嵌套
子查询
时,可能会导致查询变慢,这是因为每次
执行
子查询
时,都会扫描整个表来匹配条件。这种情况下可以考虑使用连接查询(JOIN)来优化查询。
另外,可以考虑对
子查询
的结果进行缓存,避免重复扫描表,从而提高查询效率。还可以通过使用索引来加快查询速度,特别是使用覆盖索引(Covering Index),能够减少不必要的I/O操作,从而提高查询性能。
还有一种情况是,当
子查询
返回的结果集很大时,IN
嵌套
子查询
的性能也会受到影响。这种情况下可以考虑使用EXISTS
子查询
来代替IN
嵌套
子查询
,因为EXISTS
子查询
只需要判断是否存在符合条件的记录,而不需要返回所有符合条件的记录,因此可以提高查询效率。