第一次把二者关联起来, 仍是在背 sql 优化方面的面试题时。 有一条是这么说的: 当 sql 语句中出现 in 或 not in 时, 用 exists 或 not exists 代替。然而我在实际开发中,仍是习惯使用 in 关键字,就在最近一次开发中,忽然想试试 exist ,可是替换以后运行的结果出乎个人意料。面试
selec realname from student where id in (1, 2, 3); # 从学生表中查出来 id 为 1 或 2 或 3的学生姓名。
sql
select realname from student where id exists in (1, 2, 3);
优化
控制台提示了一条错误信息 “exists 关键字附近出现了语法错误”
code
懵圈了片刻以后, 便开始了个人探索之旅。 最终的结果以下:exits 的用法是 select 字段1,字段2 from TableA where exits (select 字段 from TableB where 条件) exits 后面的语句返回的是一个 Boolean 类型的数据。若是exits 返回 true, 那么就从 TableA 查出符合条件的数据。开发
`表A ID NAME 1 A1 2 A2 3 A3 表B ID AID NAME 1 1 B1 2 2 B2 3 2 B3 `
表A和表B是1对多的关系 A.ID => B.AIDit
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE A.ID=B.AID)
select
`1 A1 2 A2`
缘由能够按照以下分析语法
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)数据
--->SELECT * FROM B WHERE B.AID=1有值返回真因此有数据co
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=2)
--->SELECT * FROM B WHERE B.AID=2有值返回真因此有数据
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=3)
--->SELECT * FROM B WHERE B.AID=3无值返回真因此没有数据