关于exists的理解(一)

现在有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的用法

猜你喜欢

转载自blog.csdn.net/weixin_39428938/article/details/79697087