繁体   English   中英

SQL代码需要帮助的理解

[英]SQL code need help understanding

我正在研究电影数据库,我认为为将来使用某种类型的父母控制可能是一个好主意。 我写了一些SQL代码,它在大多数情况下都有效,但是我不知道为什么。

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

这是我使用的SQL代码

Select title
From movies
Where rating < "r";

我的作品虽然仍然显示NC-17节目。 如果将r额定值更改为NC-17,则仅显示g额定值显示。

我知道我可以输入更长的SQL来给我想要的匹配项,但是我想了解为什么这段代码按原样执行。

谢谢您的帮助。

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

例如:

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

不是给每部电影评级的数值(或用连接) ,然后排序。

SQL不了解电影分级系统。 <运算符按字母顺序查看字符串。 因此,当您说< 'R' ,它将寻找字母中R之前字母开头的所有等级。 由于评分的选项数量有限,因此最好按照以下方式进行操作:

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

如果要对它们进行排名,以下查询可能对您有用:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM