龍紋身女孩和 SQL

openkk 12年前發布 | 11K 次閱讀 程序員

我喜歡大衛·芬奇(David Fincher)拍的電影《龍紋身女孩》,他成功的把小說《龍紋身女孩》搬上了熒幕,超出了我的預期。我本以為這又是一部膚淺的、憤世嫉俗的用來斂錢的好萊塢電影,事實情況卻是,這是一部情節緊張,能引起共鳴的電影,只是里面的淫殺犯罪讓人毛骨悚然。我最喜歡的一個情節是龍紋身女孩用SQL來查找40年前的兇殺案的過程。

龍紋身女孩和 SQL

我們從電影里可以看到她使用筆記本電腦,輕而易舉的進入瑞典警察局數據庫,當她敲入像‘unsolved(未破案)’和‘decapitation(斬首)’等關鍵詞時,屏幕上翻滾著綠色的檢索出的信息,雖然我們看不清她使用的完整的查詢語句:

龍紋身女孩和 SQL龍紋身女孩和 SQL

處于一種天生的好奇,我忍不住截取了這些鏡頭畫面,用Photoshop拼接了一下,下面是我得到的結果:

龍紋身女孩和 SQL

你馬上能發現,這不是Oracle SQL——很顯然 AS 關鍵字在Oracle里不能用在表假名上。事實上,如果我們回去看看她那個令人興奮的查詢結果輸出時,你會看到 mysql 的提示符,而且還有 use [dbname] 連接數據庫的語法,下面是一個更詳細的畫面:

龍紋身女孩和 SQL

我們實際上可以把她用的left join關鍵詞表的SQL語句整理出來。

最終我們獲得了一個全屏的輸出結果信息:

龍紋身女孩和 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 ]

本文轉載自: 外刊IT評論 http://www.aqee.net/

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!