暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

梧桐数据库(WuTongDB):DML之WHERE子句

原创 鲁鲁 2024-06-15
395

WHERE子句

WHERE 子句的语法是:

WHERE search_condition

这里的search_condition是任意返回类型为 boolean 的值表达式(参阅 值表达式 )。

在完成对FROM子句的处理之后,生成的每一行都会按照搜索条件进行检查。 如果结果是真,那么该行保留在输出表中,否则(也就是结果是假或NULL)就把它抛弃。 搜索条件通常至少要引用一列在FROM子句里生成的列,这不是必须的, 但如果不这样的话,WHERE子句就没什么意义了。

备注

内连接的连接条件既可以写在WHERE子句里也可以写在JOIN子句里。 比如,下面的表表达式是等效的:

FROM a, b WHERE a.id = b.id AND b.val > 5

和:

FROM a INNER JOIN b ON (a.id = b.id) WHERE b.val > 5

或者可能还有:

FROM a NATURAL JOIN b WHERE b.val > 5

你想用哪个只是风格问题。FROM子句里的JOIN 语法可能不那么容易移植到其它产品中。对于其他连接,它们没有其他选择:必须在FROM子句中, 外连接的ON或USING子句 不等于 WHERE条件, 因为它导致最终结果中行的增(那些不匹配的输入行)和删。

这里是一些WHERE子句的例子:

SELECT ... FROM fdt WHERE c1 > 5

SELECT ... FROM fdt WHERE c1 IN (1, 2, 3)

SELECT ... FROM fdt WHERE c1 IN (SELECT c1 FROM t2)

SELECT ... FROM fdt WHERE c1 IN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10)

SELECT ... FROM fdt WHERE c1 BETWEEN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10) AND 100

SELECT ... FROM fdt WHERE EXISTS (SELECT c1 FROM t2 WHERE c2 > fdt.c1)

那些不符合WHERE子句的搜索条件的行将从fdt中删除。请注意我们把标量子查询当做一个值表达式来用。就像其它查询一样, 子查询里也可以使用复杂的表表达式。把c1修饰成fdt.c1 只有在c1是该子查询生成的列名字时才是必须的, 但修饰列名字可以增加语句的准确性(即使有时不是必须的)。 这个例子就演示了列名字范围如何从外层查询扩展到它的内层查询。

最后修改时间:2024-08-05 09:12:12
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论