SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)
--->SELECT * FROM B WHERE B.AID=1有值返回真所以有数据===SELECT ID,NAME FROM A WHERE true
不就是选择全部吗》??
矢志不渝 11:53:59
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)
--->SELECT * FROM B WHERE B.AID=1有值返回真所以有数据
不懂
表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.AIDSELECT ID,NAME FROM A WHERE EXIST (SELECT * FROM B WHERE A.ID=B.AID)
执行结果为
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有值返回真所以有数据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无值返回真所以没有数据
大师 11:54:48
(SELECT * FROM B WHERE B.AID=1) 这个为真
大师 11:54:59
那么where为真
大师 11:55:03
那么 有数据
矢志不渝 11:55:15
SELECT ID,NAME FROM A WHERE EXISTS (true)
矢志不渝 11:55:20
不就是全部吗?
大师 11:55:27
是的呀
矢志不渝 11:55:39
SELECT ID,NAME FROM A
矢志不渝 11:55:48
不就是三条数据吗?
大师 11:56:11SELECT ID,NAME FROM A WHERE EXIST (SELECT * FROM B WHERE A.ID=B.AID)
执行结果为
1 A1
2 A2这个是这个
大师 11:56:14
不一样的
矢志不渝 11:56:41
那上面的解释就有问题了
大师 11:56:54
。。哪里有问题了
大师 11:57:07
哪句话
矢志不渝 11:57:36
(SELECT * FROM B WHERE B.AID=1) 这个为真SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)
等于 SELECT ID,NAME FROM A WHERE EXISTS (true)
矢志不渝 11:57:47
肯定三行
大师 11:57:55
。。本来就是三行啊
大师 11:58:23
可是问题不是 和你描述的一样
大师 11:58:38SELECT ID,NAME FROM A WHERE EXIST (SELECT * FROM B WHERE A.ID=B.AID)
执行结果为
1 A1
2 A2这里本来就是2行
大师 11:58:47
你没理解。。
矢志不渝 11:58:51
您学一下计算机的执行
矢志不渝 11:59:01
step1
矢志不渝 11:59:06
step2
矢志不渝 11:59:08
..
大师 11:59:17
他是2个表关系的
大师 11:59:22
不是你这么单独看的
大师 11:59:35
(SELECT * FROM B WHERE A.ID=B.AID)
大师 11:59:37
看这句
大师 12:00:06
是从外面的表里 取出 A.ID 放进去 和B表比 如果有 说明 A表这条记录是对的 就取出来
大师 12:00:14
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)
--->SELECT * FROM B WHERE B.AID=1有值返回真所以有数据
大师 12:00:17
也就是这句
大师 12:00:33
然后 再从A表 拿第二条 A.AID=2的
大师 12:00:43
不是这么单纯看的 是有联系的
矢志不渝 12:00:46
计算机如何扫描的
大师 12:01:21
从A表取一条记录 遍历B表 对比B,AID和A.AID
大师 12:01:26
找到了 就返回真
大师 12:02:54
比较的方法就是 通过A.ID 和B.AID
大师 12:03:00
OK?
矢志不渝 12:03:17
哦,a是外层b是内层吧
大师 12:04:59
找到了 就返回真
矢志不渝 12:01:58
哦,a是外层b是内层吧
别睡了可以么 12:02:08
。。也可以这么说
矢志不渝 12:05:22
哦,a是外层b是内层吧
矢志不渝 12:05:34
我这边网络太差
大师 12:05:37
我说了 可以这么理解 你问N次了。。
矢志不渝 12:05:41
ok
大师 12:02:08
。。也可以这么说
大师 12:02:33
然后继续从A表下一条记录
大师 12:03:31
这句话 等价于
select a.* from a join b on a.id=b.aid
大师 12:02:54
比较的方法就是 通过A.ID 和B.AID
大师 12:02:23
从A拿条记录 再去跟B比 比好了 返回真假
大师 12:04:40
你可以这么理解
大师 12:04:44
我不是 早回答你了么
矢志不渝 12:06:13
ok
矢志不渝 12:06:27
现在我这边网络太差了e
大师 12:06:33
哦
矢志不渝 12:07:06
上帝说,您应该知道真相,真相使您自由
矢志不渝 12:07:08
ths
大师 12:07:15
。不客气
矢志不渝 12:07:54
吃完饭再欣赏一下估计就真ok了
大师 12:08:00
恩
矢志不渝 12:56:03
终于懂了
矢志不渝 12:57:46
终于懂了
等下散个分
大师 12:58:16
恩
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)
--->SELECT * FROM B WHERE B.AID=1有值返回真所以有数据===SELECT ID,NAME FROM A WHERE true
不就是选择全部吗》??矢志不渝 11:53:59
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)
--->SELECT * FROM B WHERE B.AID=1有值返回真所以有数据
不懂
表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.AIDSELECT ID,NAME FROM A WHERE EXIST (SELECT * FROM B WHERE A.ID=B.AID)
执行结果为
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有值返回真所以有数据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无值返回真所以没有数据 大师 11:54:48
(SELECT * FROM B WHERE B.AID=1) 这个为真
大师 11:54:59
那么where为真
大师 11:55:03
那么 有数据
矢志不渝 11:55:15
SELECT ID,NAME FROM A WHERE EXISTS (true)
矢志不渝 11:55:20
不就是全部吗?大师 11:55:27
是的呀
矢志不渝 11:55:39
SELECT ID,NAME FROM A 矢志不渝 11:55:48
不就是三条数据吗?大师 11:56:11SELECT ID,NAME FROM A WHERE EXIST (SELECT * FROM B WHERE A.ID=B.AID)
执行结果为
1 A1
2 A2这个是这个
大师 11:56:14
不一样的
矢志不渝 11:56:41
那上面的解释就有问题了大师 11:56:54
。。哪里有问题了
大师 11:57:07
哪句话
矢志不渝 11:57:36
(SELECT * FROM B WHERE B.AID=1) 这个为真SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)
等于 SELECT ID,NAME FROM A WHERE EXISTS (true)矢志不渝 11:57:47
肯定三行大师 11:57:55
。。本来就是三行啊
大师 11:58:23
可是问题不是 和你描述的一样
大师 11:58:38SELECT ID,NAME FROM A WHERE EXIST (SELECT * FROM B WHERE A.ID=B.AID)
执行结果为
1 A1
2 A2这里本来就是2行
大师 11:58:47
你没理解。。
矢志不渝 11:58:51
您学一下计算机的执行矢志不渝 11:59:01
step1
矢志不渝 11:59:06
step2
矢志不渝 11:59:08
..大师 11:59:17
他是2个表关系的
大师 11:59:22
不是你这么单独看的
大师 11:59:35
(SELECT * FROM B WHERE A.ID=B.AID)
大师 11:59:37
看这句
大师 12:00:06
是从外面的表里 取出 A.ID 放进去 和B表比 如果有 说明 A表这条记录是对的 就取出来
大师 12:00:14
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)
--->SELECT * FROM B WHERE B.AID=1有值返回真所以有数据
大师 12:00:17
也就是这句
大师 12:00:33
然后 再从A表 拿第二条 A.AID=2的
大师 12:00:43
不是这么单纯看的 是有联系的
矢志不渝 12:00:46
计算机如何扫描的大师 12:01:21
从A表取一条记录 遍历B表 对比B,AID和A.AID
大师 12:01:26
找到了 就返回真
大师 12:02:54
比较的方法就是 通过A.ID 和B.AID
大师 12:03:00
OK?
矢志不渝 12:03:17
哦,a是外层b是内层吧大师 12:04:59
找到了 就返回真
矢志不渝 12:01:58
哦,a是外层b是内层吧
别睡了可以么 12:02:08
。。也可以这么说
矢志不渝 12:05:22
哦,a是外层b是内层吧矢志不渝 12:05:34
我这边网络太差大师 12:05:37
我说了 可以这么理解 你问N次了。。
矢志不渝 12:05:41
ok大师 12:02:08
。。也可以这么说
大师 12:02:33
然后继续从A表下一条记录
大师 12:03:31
这句话 等价于
select a.* from a join b on a.id=b.aid
大师 12:02:54
比较的方法就是 通过A.ID 和B.AID
大师 12:02:23
从A拿条记录 再去跟B比 比好了 返回真假
大师 12:04:40
你可以这么理解
大师 12:04:44
我不是 早回答你了么
矢志不渝 12:06:13
ok矢志不渝 12:06:27
现在我这边网络太差了e大师 12:06:33
哦
矢志不渝 12:07:06
上帝说,您应该知道真相,真相使您自由矢志不渝 12:07:08
ths大师 12:07:15
。不客气
矢志不渝 12:07:54
吃完饭再欣赏一下估计就真ok了大师 12:08:00
恩
矢志不渝 12:56:03
终于懂了矢志不渝 12:57:46
终于懂了
等下散个分大师 12:58:16
恩