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;
View Code

相关文章: