使用exists的查询
形式:
where exists( 子查询 )
含义:
该子查询如果“有数据”,则exists的结果是true,否则就是false
说明:
因为,exists子查询的该含义,造成主查询往往出现这样的情形:要么全都取出,要么都不取出。
如果局限于这个含义(使用情形),其基本就失去了它的现实使用意义。
但:
实际应用中,该子查询,往往都不是独立的子查询,而是会需要跟“主查询”的数据源(表),建立某种关系——通常就是连接关系。建立的方式是“隐式的”,即没有在代码上体现关系,但却在内部有其连接的“实质”。
此隐式连接方式,通常就体现在子查询中的where条件语句中,使用了主查询表中的数据(字段);
举例:
查询商品表中其类别名称中带“电”这个字的所有商品;
结果就是我们想要的:
注意:
1,这种子查询语句,没法“独立存在(独立运行)”,而是必须跟主查询一起使用;
2,其他子查询,是可以独立运行的,而且会得到一个运行的结果。
3,该子查询中的条件,应该设定为跟主查询的某个字段有一定的关联性判断,通常该判断就是这两个表的“本来该有的连接条件”
最后一个结论:
如果一个查询需求,可以使用连接查询的,也可以使用子查询得到,则通常推荐使用连接查询,效率会更高。