egon笔记:
1 单表查询 select distinct 字段1,字段2,字段3 from 表 where 约束条件 group by 分组字段 having 过滤条件 order by 排序字段 limit n; def from(file): f=open(file) return f def where(f,条件): lines=[] for line in f: if 条件: lines.append(line) def group(): dic={ 'male':迭代器, 'female':迭代器 } return dic def having(): pass def select(): res1=distinct(having_res) res2=order(res1) limit(res2) def distinct(): pass def order(): pass def limit(): pass f=from('emp') lines=where(f,条件) group_res=group(lines,字段) having_res=having(group_res,条件) select(having_res) 2 多表查询 select distinct 字段1,字段2,字段3 from 左表 left join 右表 on 链表条件 where 约束条件 group by 分组字段 having 过滤条件 order by 排序字段 limit n; #示例1:找出年龄大于25岁的员工以及员工部门名, select emp.name emp_name,dep.name dep_name from emp inner join dep on emp.dep_id = dep.id where age > 25; #查询平均年龄在25岁以上的部门名 select dep.name from emp inner join dep on emp.dep_id = dep.id group by dep_id having avg(age) > 25 ; select name from dep where id in (select dep_id from emp group by dep_id having avg(age) > 25); #查看技术部员工姓名 select emp.name from dep inner join emp on emp.dep_id = dep.id where dep.name = '技术' ; #查看>1人的部门名 select dep.name from emp inner join dep on emp.dep_id = dep.id group by dep_id having count(*) > 1; select t1.id,t1.name,t1.age,t1.hire_date,t1.post,t2.* from emp_old as t1 inner join (select post,max(hire_date) max_hire_date from emp_old group by post) as t2 on t1.post = t2.post where t1.hire_date = t2.max_hire_date ; id province city commit_time x y z 1 山东省 烟台市 2017-01-01 11:11:11 1 2 3 2 山东省 烟台市 2017-01-01 12:11:11 1 2 3 3 山东省 烟台市 2017-01-03 12:11:11 1 2 3 create view emp2dep as select emp.*,dep.name as dname from emp inner join dep on emp.dep_id = dep.id;