PHP程序员站--PHP编程开发平台
 当前位置:主页 >> 数据库 >> MySQL >> 

龙纹身女孩和 SQL

龙纹身女孩和 SQL

来源:PHP程序员站  作者:会员投稿  发布时间:2012-06-07
我喜欢大卫芬奇(David Fincher)拍得电影《龙纹身女孩》,他成功得把小说《龙纹身女孩》搬上了荧幕,超出了我得预期。我本以为这又是一部肤浅得、愤世嫉俗得用来敛钱得好莱坞电影,事实情况却是,这是一部情节紧张,能引起共鸣得电影,只是里面得淫杀犯罪让人毛骨悚然。

我喜欢大卫·芬奇(David Fincher)拍得电影《龙纹身女孩》,他成功得把小说《龙纹身女孩》搬上了荧幕,超出了我得预期。我本以为这又是一部肤浅得、愤世嫉俗得用来敛钱得好莱坞电影,事实情况却是,这是一部情节紧张,能引起共鸣得电影,只是里面得淫杀犯罪让人毛骨悚然。我最喜欢得一个情节是龙纹身女孩用SQL来查找40年前得凶杀案得过程。

龙纹身女孩

我们从电影里可以看到她使用笔记本电脑,轻而易举得进入瑞典警察局数据库,当她敲入像‘unsolved(未破案)’和‘decapitation(斩首)’等关键词时,屏幕上翻滚着绿色得检索出得信息,虽然我们看不清她使用得完整得查询语句:

sql2sql2

处于一种天生得好奇,我忍不住截取了这些镜头画面,用Photoshop拼接了一下,下面是我的到得结果:

完整sql

你马上能发现,这不是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’打头得受害人。

[本文英文原文链接:The Girl With The ANSI Tattoo ]

Tags:
最新文章
推荐阅读
月点击排行榜
PHP程序员站 Copyright © 2007-2010,PHPERZ.COM All Rights Reserved 粤ICP备07503606号