[英]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.