SQL 中关于通配符的问题

Questions on wildcards in SQL

Sample 'gov_form' The correct query The question

我正在研究一个问题,该问题要求我前往 select 政府形式不是 'Constitutional Monarchy' 或 'Republic' 的国家/地区。

给出的答案是 WHERE (gov_form = 'Constitutional Monarchy' OR gov_form LIKE '%Republic%') 。我试图将它们关闭为 (gov_form LIKE 'Constitutional Monarchy%' OR gov_form = 'Republic') 但这是错误的,显然行数不同。

我很困惑,因为还有另外两个字段包含“君主立宪制(酋长国)”和 'Constitutional Monarchy,Federation' 那么为什么我不能使用通配符“%”???

还有'Republic'中的'variations'对table中的'People'sRepublic'、'Socialist Republic'、'Federal Republic'等'Constitutional Monarchy'!!但考虑到问题是要求不包括 'Republic',为什么我要使用 '%' 来免除 'Republic' 的所有 'variations'???

谁能帮帮我?

其中 gov_form 不喜欢 '%Constitutional Monarchy%' AND gov_form NOT LIKE '%Republic%'

对我来说

Countries that do not have gov_form of Constitutional Monarchy

(要点 1)

表示

countries where gov_form <> (not equal) 'Constitutional Monarchy'

countries that do not have republic in their gov form

(要点 2)

表示

Countries where gov_form does not contain the text "republic"

这将是

WHERE gov_form <> 'Constitutional Monarchy' AND gov_form NOT LIKE '%Republic%'

子查询希望将其转变为因为它使用 NOT IN,所以在子查询中,我们基本上是说

Show me those where gov_frm IS EQUAL TO 'Constitutional Monarchy' and gov_form IS LIKE '%republic%'

哪些是我们不想查看的记录,外部查询使用NOT IN

排除了这些记录

在我看来,这个问题写得和布局都不好,绝对可以解释。根据对问题的三种不同理解,我已经将这个答案重写了三次。此外,我会说使用常规 JOIN

可以更好地解决这个问题并且更容易阅读

任何编程任务的最大挑战是用人类语言理解需要什么。一旦完成,剩下的就“简单”了

如果要排除政府类型包含 Constitutional MonarchyRepublic 的记录,则可以使用 NOT,如下所示:

WHERE not (gov_form like '%Constitutional Monarchy%'
           OR gov_form LIKE '%Republic%')