我喜欢大卫·芬奇(David Fincher)拍的电影《龙纹身女孩》,他成功的把小说《龙纹身女孩》搬上了荧幕,超出了我的预期。我本以为这又是一部肤浅的、愤世嫉俗的用来敛钱的好莱坞电影,事实情况却是,这是一部情节紧张,能引起共鸣的电影,只是里面的淫杀犯罪让人毛骨悚然。我最喜欢的一个情节是龙纹身女孩用SQL来查找40年前的凶杀案的过程。
我们从电影里可以看到她使用笔记本电脑,轻而易举的进入瑞典警察局数据库,当她敲入像‘unsolved(未破案)’和‘decapitation(斩首)’等关键词时,屏幕上翻滚着绿色的检索出的信息,虽然我们看不清她使用的完整的查询语句:
处于一种天生的好奇,我忍不住截取了这些镜头画面,用Photoshop拼接了一下,下面是我得到的结果:
你马上能发现,这不是Oracle SQL——很显然 AS
关键字在Oracle里不能用在表假名上。事实上,如果我们回去看看她那个令人兴奋的查询结果输出时,你会看到 mysql
的提示符,而且还有 use [dbname]
连接数据库的语法,下面是一个更详细的画面:
我们实际上可以把她用的left join关键词表的SQL语句整理出来。
最终我们获得了一个全屏的输出结果信息:
下面就是我们Oracle“WTF研究会”部门重新构造出的她使用的SQL:
SELECT DISTINCT v.fname, v.lname, i.year, i.location, i.report_file FROM Incident AS i LEFT JOIN V(ictim?)... -- presumably v.incident_id = i.id LEFT JOIN Keyword AS k ON k.incident_id = i.id WHERE i.year BETWEEN 1947 AND 1966 AND i.type = 'HOMICIDE' AND v.sex = 'F' AND i.status = 'UNSOLVED' AND ... OR v.fname IN ('Mari', 'Magda') OR SUBSTR ... AND (k.keyword IN ('rape', 'decapitation', 'dismemberment', 'fire', 'altar', 'priest', 'prostitute') ... AND SUBSTR(v.fname, 1, 1) = 'R' AND SUBSTR(v.lname, 1, 1) = 'L'); +--------+---------+------+-----------+----------------------------------+ | fname | name | year | location | report_file | +--------+---------+------+-----------+----------------------------------+ | Anna | Wedin | 1956 | Mark | FULL POLICE REPORT NOT DIGITIZED | | Linda | Janson | 1955 | Mariestad | FULL POLICE REPORT NOT DIGITIZED | | Simone | Grau | 1958 | Goteborg | FULL POLICE REPORT NOT DIGITIZED | | Lea | Persson | 1962 | Uddevalla | FULL POLICE REPORT NOT DIGITIZED | | Kajsa | Severin | 1962 | Dals-Ed | FULL POLICE REPORT NOT DIGITIZED | +--------+---------+------+-----------+----------------------------------+
你也许会很惊讶,很奇怪,这样一个顶级的黑客为什么要outer-join的方式连接Victims(被害人)表和Keywords(关键词)表呢,还使用这样的文字过滤方式,岂不知MySQL里是有 like
语法的,更奇怪的是输出结果里根本没有姓和名分别以’R L’打头的受害人。
导演也只是想混口饭吃而已,别那么较真O(∩_∩)O
这仅仅是电影,不是真正的黑客,是给普通人看的,不是拿来研究sql的
因为使用 OUTTER-JOIN 可以写出更多的SQL语句, 给电影带来更强烈的视觉效果….
我觉得不出现word里面聊QQ的事情导演就算很厚道了
没有出现打魔兽抓黑客就不错了…
说到word,我想起以前看到的一个电视剧,类似《重案X组》这样的,其中有一个破译磁盘密码的情节,让我抓狂不已是破密码的过程就是在word中按住回车键,弄出几页空白页,然后在最后空白页上显示一串字符,刑警兴奋的说“破译了”的一刹那,我不禁仰天长叹,这是我见过的最牛13的破译密码方法。
哈哈哈!
奇葩的国产电视剧
当时看的时候就在想评起来了,可惜没做啊
经过作者这么一分析,觉得这个电影挺有意思了
混口饭吃啦,有必要吗- –
超级无聊的事情。
我决定下载清晰版再看一遍。。。
我决定下载清晰版看一遍
别像某些国产电影拼命在DOS命令行里打dir就成。
非也非也,都是混饭吃。
“Jan S. said…
I hope for a next film remake they hire a senior database expert to help them designing a better data model and also rewrite SQL for more accurate semantic and also better performance.”
外国人的较真劲儿值得国人学习啊……
p.s. 下一次拍电影要是像评论的说的那样部署Oracle SQL而不是MySQL的话电影公司又有一大票钱要花出去了
老外的想法太不可思议了
更有可能是 oracle 得知此事后免费让下一部电影用 oracle 的数据库然后再在媒体上吹嘘一番来炒作
哈哈,说不定是先付了钱的
认真了就不好玩了。当然作者玩的很happy.