单表查询
一、语法顺序
select distinct 查询字段1,查询字段2,。。。 from 库名.表名 #distinct是去重
where 分组之前的过滤条件
group by 分组依据
having 分组之后的过滤条件
order by 排序字段
limit 显示的条数;
二、执行顺序
def from(dir,file):
open('%s\%s' %(dir,file),'r')
return f
def where(f,pattern):
for line in f:
if pattern:
yield line
def group by():
pass
def having():
pass
def distinct():
pass
def order_by():
pass
def limit():
pass
def select():
res1=from() #在硬盘中找到表
res2=where(res1,pattern) #拿着where指定的约束条件,去文件/表中取出一条条记录,在内存中得到一张虚拟的表, 如果没有where,默认全True
res3=group by(res2,) #将取出的一条条记录进行分组group by,如果没有group by,默认整体作为一组
res4=having(res3) #将分组的结果进行having过滤,如果没有having,默认全True
res5=distinct(res4) #去重, 如果没有distinct,默认不去重
res6=order_by(res5) #将结果按条件排序
limit(res6) #限制结果的显示条数
三、按照优先级的级别写SQL语句
a、先确定是哪张表 from db39.emp
b、是否有过滤条件 where name like '%i%'
。。。(其他操作)
z、放功能 select
四、where(分组前)过滤
where字句中可以使用:(分组之前做了一次这个整体性筛选)
# 注意:分组是在where之后发生的,分组之前where不能用分组依据和聚合函数!!
mysql> select * from emp where max(salary) > 3000;
ERROR 1111 (HY000): Invalid use of group function # 报错!!
1. 比较运算符:> < >= <= <&g