SQL代码需要帮助理解

时间:2014-08-28 20:02:27

标签: mysql sql

我正在制作一个电影数据库,我认为为将来制定某种类型的家长控制可能是个好主意。我写了一些SQL代码,它大部分都有效,但我不知道为什么。

在我的主电影表中,我的电影评级为标准等级g,pg,pg-13,r和NC-17。

这是我使用的SQL代码

Select title
From movies
Where rating < "r";

我工作虽然它仍然显示NC-17节目。如果我将r等级更改为NC-17,则仅显示g等级显示。

我知道我可以输入更长的SQL来为我提供我想要的匹配,但我想了解为什么这段代码的执行方式。

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

MySQL如何知道R小于NC-17? MySQL知道如何排序数字和字母,但不知道电影评级。您必须分配评级编号并根据该编号进行排序。

例如:

Rating    Value
------------------
  G         1
  PG        10
  PG-13     20
  R         30
  NC-17     40

为每部电影提供评级的数值(或使用连接),然后对 进行排序。

答案 1 :(得分:0)

SQL并不了解电影评级系统。 <运算符按字母顺序查看字符串。因此,当您说< 'R'时,它会查找以字母表中R之前的字母开头的所有评分。由于评分选项数量有限,因此您最好按照以下方式做一些事情:

SELECT title
FROM movies
WHERE rating NOT LIKE 'R'
AND   rating NOT LIKE 'NC-17'

答案 2 :(得分:0)

如果您想对它们进行排名,这个查询可能对您有用:

SELECT m.title, m.rating
FROM 
(
  SELECT s.title, s.rating, 
         CASE WHEN s.rating = 'G' THEN 1 
              WHEN s.rating = 'PG' THEN 2
              WHEN s.rating = 'PG-13' THEN 3
              WHEN s.rating = 'R' THEN 4
              WHEN s.rating = 'NC-17' THEN 5
              ELSE 6 END AS MovieRanking
  FROM movies s
) m
WHERE m.MovieRanking < 4