用Python解释SQL语句执行过程
SQL 语句看上去挺酷,但在数据库内部,它是如何被解释执行的呢?
本文试图用最小的篇幅,解释这个问题.
作者水平有限,内容难免有失偏颇,望请海涵.
首先,一张学生表:
《Inside Microsoft SQL Server 2005:T-SQL Programminy》抱歉,推荐一本SQL Server的书籍。只看第一章就好。
源代码:
姓名,年龄,班级 = range(3)张三 = ('张三', 18, '软件一班')李四 = ('李四', 19, '软件一班')王五 = ('王五', 19, '软件二班')学生 = {张三, 李四, 王五}姓名,学科, 分数 = range(3)成绩1 = ('张三', '数学', 60)成绩2 = ('张三', 'C语言', 70)成绩3 = ('李四', '数学', 61)成绩4 = ('王五', '数学', 62)成绩5 = ('王五', 'C语言', 63)成绩 = {成绩1, 成绩2, 成绩3, 成绩4, 成绩5}# select 姓名, 年龄, 班级 from 学生 where 姓名 = '张三'for x in 学生: if(x[姓名] == '张三'): print(x) 结果 = [ s for s in 学生 if s[姓名] == '张三']print("简单查询结果:",结果)#select 学生.姓名, 成绩.学科, 成绩.分数 from 学生 left join 成绩 on 学生.姓名 = 成绩.姓名 where 学生.姓名 = '张三'#step one,对两个表做笛卡尔积笛卡尔积 = { (x,y) for x in 学生 for y in 成绩}print("笛卡尔积结果:",sorted(笛卡尔积))#为了显示美观,特意加了一个排序学生表,成绩表 = range(2)#step two,增加过滤条件最终结果= { (x[学生表][姓名], x[成绩表][学科], x[成绩表][分数]) for x in 笛卡尔积 if x[学生表][姓名] == x[成绩表][姓名] and x[学生表][姓名] == '张三'}print('结果:', 最终结果)