SQL查询语法检查

SQL查询语法检查,sql,oracle,Sql,Oracle,有人能帮我写下这个要求吗。我似乎无法将空值与所有其他条件一起加载 -1没有一位艺术家超过80岁 -他们出生时都没有50岁或更年轻 -死了 -2没有一位艺术家的年龄分别为54岁、56岁、, -他们死的时候是71或76岁 -有些艺术家还活着 -4位德国和英国艺术家 -专门从事摄影艺术“摄影” -排除在外 -5没有一个艺术家有字母“o” -他们姓氏的任何地方 -6没有一位艺术家有自己的名字 -“汉娜”、“茱莉亚”或“弗雷泽” select artist_id, first_name, last_nam

有人能帮我写下这个要求吗。我似乎无法将空值与所有其他条件一起加载

-1没有一位艺术家超过80岁 -他们出生时都没有50岁或更年轻 -死了

-2没有一位艺术家的年龄分别为54岁、56岁、, -他们死的时候是71或76岁

-有些艺术家还活着

-4位德国和英国艺术家 -专门从事摄影艺术“摄影” -排除在外

-5没有一个艺术家有字母“o” -他们姓氏的任何地方

-6没有一位艺术家有自己的名字 -“汉娜”、“茱莉亚”或“弗雷泽”

select artist_id, first_name, last_name, died - born AS age, speciality, nationality
from simon_antiques
where Died - born Not in (54, 56, 71, 76)
  AND first_name NOT IN ('Hannah', 'Julia', 'Frasier')
  AND last_name not like '%o%'
  AND (nationality <> 'German' or speciality <> 'Photo')
  AND (died - born between 50 and 80 or died is null)
Order by last_name
这会加载所有结果,但不会加载仍然活着的艺术家。如果我把这个条件从一个括号中去掉,它会把所有活着的人带回来,不管其他条件如何

WHERE中的第一个子句只匹配不为null的行。有鉴于此,您可以对子句进行如下重新排序:

WHERE first_name NOT IN ('Hannah', 'Julia', 'Frasier')
  AND last_name NOT LIKE '%o%'
  AND (nationality <> 'German' 
    OR speciality <> 'Photo')
  AND ((died - born BETWEEN 50 AND 80 
      AND Died - born NOT IN (54, 56, 71, 76)) 
    OR died IS NULL)

这将带回那些目前还活着的人。

谢谢。我就知道是括号。