数据库单表多表查询及优先级

本文详细介绍了数据库中的单表查询,包括where、group by、having、distinct、order by和limit等操作的语法顺序、执行优先级及实际运用。同时,探讨了多表连接查询,如内连接、左连接、右连接和全连接,以及子查询在多表连接中的应用,帮助理解数据库查询的高级技巧。
摘要由CSDN通过智能技术生成

单表查询

一、语法顺序

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值