sql语句的exist总结

首先借用别人的成果:http://www.cnblogs.com/jerome-rong/archive/2013/03/27/2985505.html

 exist 大多数情况下都用于与 in 进行比较,这方面的比较上面的博客讲的很清楚了。

总结就是

SELECT * FROM 数据库1 WHERE EXISTS (SELECT * FROM 数据库2 WHERE 数据库2. 列名 = 数据库1.列名)    (sql1)

EXISTS 代替 in 前提是在条件中带上两个库的相等条件

 

再来看一个sql语句,:

SELECT * FROM(SELECT * FROM 数据库1 LEFT JOIN数据库2 ON 数据库1.列名 = 数据库2. 列名WHERE 条件 UNION SELECT * FROM 数据库2 WHERE NOT EXISTS (SELECT * FROM(SELECT * FROM 数据库1 LEFT JOIN数据库2 ON 数据库1.列名 = 数据库2. 列名WHERE 条件))   (sql2)

sql2 作用是 当 数据1 查询不到 结果时 ,去数据库2 查询结果 

这时是把 not exist 内的查询语句 当成 false 和 true 进行判断 。

当 红字的sql语句能查到结果时,sql2 变为

SELECT * FROM(SELECT * FROM 数据库1 LEFT JOIN数据库2 ON 数据库1.列名 = 数据库2. 列名WHERE 条件 UNION SELECT * FROM 数据库2 WHERE false 

即 SELECT * FROM(SELECT * FROM 数据库1 LEFT JOIN数据库2 ON 数据库1.列名 = 数据库2. 列名WHERE 条件

当 红字的sql语句能查不到结果时,sql2 变为

SELECT * FROM(SELECT * FROM 数据库1 LEFT JOIN数据库2 ON 数据库1.列名 = 数据库2. 列名WHERE 条件 UNION SELECT * FROM 数据库2 WHERE true

SELECT * FROM 数据库2

 

posted @ 2017-02-27 17:01  methink静静  阅读(1395)  评论(0编辑  收藏  举报