现在有A表如下:
B表如下:
现有sql:
SELECT ID,`NAME` FROM A WHERE EXISTS (SELECT * FROM B WHERE A.ID=B.AID);
显示如下:
理解如下:
-- --->SELECT * FROM B WHERE B.AID=1有值返回真所以有数据
SELECT ID,`NAME` FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1);
-- --->SELECT * FROM B WHERE B.AID=2有值返回真所以有数据
SELECT ID,`NAME` FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=2);
-- --->SELECT * FROM B WHERE B.AID=3无值返回真所以没有数据
SELECT ID,`NAME` FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=3);
not exists:
SELECT ID,`NAME` FROM A WHERE NOT EXISTS (SELECT * FROM B WHERE A.ID=B.AID);
显示如下:
-- EXISTS = IN,意思相同不过语法上有点点区别,好像使用IN效率要差点,应该是不会执行索引的原因
SELECT ID,`NAME` FROM A where ID IN (SELECT AID FROM B);
-- NOT EXISTS = NOT IN ,意思相同不过语法上有点点区别
SELECT ID,`NAME` FROM A WHERE ID NOT IN (SELECT AID FROM B);
注意:MySQL中保留字加反引号,在键盘数字1的左边``
参考:
sql中exists,not exists的用法