相关子查询中exists后select 加数字的理解
来源:互联网 发布:魔兽2.43数据库 编辑:程序博客网 时间:2024/05/12 15:15
前提:两个基础表
SQL> select * from courses;
COURSE_ID COURSE_NAME CREDIT_HOUR
---------- ------------------------------ -----------
10101 计算机组成原理 4
10201 自动化控制原理 4
10301 工程制图 3
10102 c++程序设计 3
10202 模拟电子技术 4
10302 理论力学 3
10103 离散数学 3
10203 数字电子技术 4
10303 材料力学 3
已选择9行。
SQL> select * from students_grade;
STUDENT_ID COURSE_ID SCORE
---------- ---------- ----------
10101 10101 87
10101 10301 79
10101 10201 100
10101 10201 100
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
下面执行相关子查询:
SQL> select course_id ,course_name from courses c
where exists
(select 2 from students_grade sg
where sg.course_id =c.course_id);
分析执行步骤:
1) 先执行外部查询
SQL> select course_id ,course_name from courses c;
COURSE_ID COURSE_NAME
---------- ------------------------------
10101 计算机组成原理
10201 自动化控制原理
10301 工程制图
10102 c++程序设计
10202 模拟电子技术
10302 理论力学
10103 离散数学
10203 数字电子技术
10303 材料力学
2) 外部查询的每一条数据对比一次子查询
第一次比较
10101 计算机组成原理 只要exists 后对比的结果返回true 则列出:
10101 计算机组成原理
同理外部查询的COURSE_ID COURSE_NAME 还剩下8项一一和内部查询的
STUDENT_ID COURSE_ID SCORE比较最后得出结果
COURSE_ID COURSE_NAME
---------- ------------------------------
10101 计算机组成原理
10201 自动化控制原理
10301 工程制图
很多人会被查询语句中的
(select 2 from students_grade sg
where sg.course_id =c.course_id);的2迷惑,不管你这里用*号 还是
students_grade中的(STUDENT_ID 、COURSE_ID 、SCORE)项,最后都不会影响整个相关查询的结果,这是因为,外部查询的项和内部查询项对比时只会看是否为ture,如果为ture则列出结果,所以这里根本不会理会select 2 from students_grade sg
where sg.course_id =c.course_id中select的结果,那你一定会问为什么用select 2 不用select * 呢
我上网查了下 听说 如果用select * 要查数据字典所以会慢点 呵呵 还不知道是不是真的!
- 相关子查询中exists后select 加数字的理解
- exist后select加数字的理解
- 理解 sql 中exists 子查询
- 理解exists子查询
- [每日一题] OCP1z0-047 :2013-08-08 相关子查询中EXISTS的使用.....................................28
- SQL关于相关子查询与EXISTS的简单总结
- mysql中exists子查询
- Select语句查询中in和exists的区别
- NOT IN、NOT EXISTS的相关子查询改用LEFT JOIN--sql2000性能优化
- IN、EXISTS的相关子查询用INNER JOIN 代替--sql2000性能优化
- IN的相关子查询用EXISTS代替--sql2000性能优化
- 子查询(exists子查询)
- 带有EXISTS谓词的子查询
- 带有EXISTS谓词的子查询
- 带有EXISTS谓词的子查询
- MySQL带EXISTS关键字的子查询
- in子查询、exists子查询、连接,效率的探讨
- in子查询、exists子查询、连接,效率的探讨
- dfdsfdsfds
- MS Sqlserver优化实战(解决CPU利用率高及查询操作速度慢)
- QT中如何使用cout cin cerr 进行输入和输出
- pku 2538 WERTYU
- 在播放音乐时报PVMFErrNotSupported Prepare failed的解决方法
- 相关子查询中exists后select 加数字的理解
- Jstl 使用简介
- (zt)关于终端和控制台的一些解释
- BMP文件分析
- domain create分析
- pku 3737 UmBasketella
- SATA与PATA接口硬盘的区别
- 如何:将 System::String 转换为标准字符串
- 学习经典 Spring jdbc template