SQL查询语句看不懂阿?
一个数据库3个表格:
ktab客户信息表,主键khh客户号
stab商品信息表,主键sph商品号
kstab订货表,主键khh和sph,属性dhl订货量
查询没有订货的客户的个人信息:
select * from ktab
where not exists (select * from kstab where khh=ktab.khh)
go
查询所用客户都订购了的商品的商品信息:
select * from stab
where not exists (select * from ktab
where not exists (select * from kstab
where sph=stab.sph and khh=ktab.khh ))
go
上面的语句怎么理解呢?假如把它们转化成类C语言的算法描述,大概的嵌套和步骤是怎样的?我只有对具体的算法描述才能理解一些,SQL前面章节较简单的语句能理解,发现这一节不好理解,大脑无法思考。
[解决办法]
先查询最里层的数据,然后和第二层匹配,得到的结果集再和最外层匹配,最后显示数据
[解决办法]
EXISTS表示存在 NOT EXISTS就表示不存在了
select * from ktab
where not exists (select * from kstab where khh=ktab.khh)
表示ktab表中的不存在于kstab 表的记录
下面的同理
[解决办法]
一般情况下,你完全可以把查询理解为2层的for循环。
比如第一个:
select * from ktab
where not exists (select * from kstab where khh=ktab.khh)
go
就是对于外层循环ktab的没一条记录,用这个记录的khh字段,放到not exists中,与里面的kstab的khh关联,
如果能连接上,那么就不返回外层的ktab的这条记录,如果在内层没有这条记录,那么就返回这条记录。
第二个也是一样,可以了解为3层for循环。
[解决办法]
根据字面理解 not exists 就是不存在,exists 就是存在
[解决办法]