• python进阶09 MySQL高级查询


    python进阶09 MySQL高级查询

    一、筛选条件

    # 比较运算符
    # 等于:=     不等于:!= 或<>    大于:>  小于:<     大于等于>= 小于等于:<=
    #空:IS NULL    非空:IS NOT NULL 
    # NULL 的查询比较特殊,只有在条件里加上IS NULL 或IS NOT NULL 才能够查询出NULL
    #逻辑运算符
    #与:AND  或:OR   非:NOT 

      范围查询

    BETWEEN a AND b
    SELECT * FROM students WHERE age BETWEEN 17 AND 18;#查询students表中年龄在17和18之间(包括)的列
    
    IN 
    SELECT * FROM students WHERE age IN (16,19); #查询students表中年龄是16和19的列

      模糊查询

    LIKE 
    %   #任意多个字符
    _    #一个字符
    
    SELECT * FROM students WHERE name LIKE '%八';#查询students表中名字结尾为八的(前面可以是任何字符)的行
    
    SELECT * FROM students WHERE name LIKE '_七'#查询students表中名字结尾为七的(前面只能是一个字符)的行
    
    #% 和 _可以放前面和后面,_可以是任意个
    #原则是以“像什么样子样子”去皮费

    二、排序与去重

      排序

    ORDER BY (排序)
    SELECT columns FROM students ORDER BY ord_col_1 [asc/desc];#中括号可加可不加
    
    asc   #正序(默认)
    desc #倒序 
    
    
    SELECT * FROM students ORDER BY age  desc,number asc ;#查询students表中按年龄倒序,学号正序的顺序排序的结果;age后不加东西默认表示正序

      去重

    DISTINCT #去重关键字
    SELECT DISTINCT columns FROM tb_name
    
    SELECT DISTINCT klass,age FROM students;#将students表中klass列和age列都相同的列去重
    
    如果直接SELECT * ...是不会重复的(因为有主键的存在(唯一+非空)),所以我们要指定列查询

    三、分组和聚合

    #聚合:为了统计信息,将多个值聚在一起
    #分组对于聚合意味着可以分组统计
    
    #常用聚合函数
    COUNT(*) #统计个数
    MAX(columns) #最大值  
    MIN(columns) #最小值
    SUM(columns)#求和
    AVG(columns)#平均数
    
    
    SELECT COUNT(*) FROM students;#统计这个表中有多少行
    
    SELECT name,age(*) FROM students; #会报错,原因是永乐聚合函数就不能原来的查询方法,用子查询可以解决这个问题
    SELECT * FROM students WHERE age =(SELECT MAX(age) FROM students);#这个就可以解决想要实现的聚合函数课原来函数的方法

      聚合分组

    GROUP BY #分组
    SELECT group_columns,aggregations FROM tb_name GROUP BY group_column;
    
    SELECT * FROM students GROUP BY klass;#报错,原因是在分组的情况下,只应该出现分组列和聚合列,其他的列没有任何意义
    
    SLEECT klass,COUNT(*) FROM students GROUP BY klass;#按klass分组后,查询这两klass中各组的数量
    
    #分组的时候只应该出现分组列和聚合列 原因是获得的聚合数不属于任何一个原来的数据
    #如果不分组,如果有聚合列就只能有聚合列

      聚合筛选

    #筛选出平均年龄大于17.5的行
    SELECT klass,AVG(age) FROM students GROUP BY age HAVING AVG(age)>17.5
    
    HAVING #只有在聚合分组的时候筛选的
    
    #筛选顺序总结:
    #ON > WHERE > HAVING 

    四、限制与分页

    #一次性不需要那么多数据,如何第自定义行开始算
    
    #限制结果个数
    
    SELECT columns FROM tb_name LIMIT count; #限制为start个结果
    
    SELECT columns FROM tb_name LIMIT start,count;#从start+1行开始计算,限制count个结果
    
    #分页:必须要在python里面定义变量
    SELECT columns FROM tb_name LIMIT (n-1)*m,m
    
    sql=(SELECT * FROM students LIMIT %s%s)%((n-1)*m,m)

    五、作业

      用python实现分页查询(先input函数获取用户想看的页码,再去返回查询)

    import pymysql#导入pymysql
    
    db_config = {
        'user': 'root',
        'password': 'qwe123',
        'db': 'python3',
        'charset': 'utf8',
    }
    
    def get_page(n, m):定义获取n,m函数
        try:
            cur = conn.cursor()#连接游标
            sql='SELECT * FROM students LIMIT %s,%s' % ((n - 1) * m, m)#sql代码:按第n-1页,每m行查询
            cur.execute(sql)#执行sql代码
            for s in cur.fetchall():遍历结果集
                print(s)
        except Exception as a:#错误情况
            print(a)
            conn.rollback()
        finally:
            cur.close()#关闭游标连接
    
    try:
        conn=pymysql.connect(**db_config)#连接
        while True:#除非正确,不然不执行
            n=int(input('请输入页面号:'))#输入页码
            m=int(input('请输入行号:'))#确定行号
            get_page(n,m)#执行get_page函数
    except Exception as b:#错误情况
        print(b)
    
    #这里没有加cur.commit()的原因是没有修改数据库,只有修改了才需要commit
  • 相关阅读:
    5个示例带你学习AngularJS
    快速入门:十分钟学会Python
    Memcache知识点梳理
    用Phaser实现Flappy Bird 游戏
    7 个顶级的 HTML5 Canvas 动画赏析
    避坑宝典:如何选择HTML5游戏引擎
    电商平台10大商业与盈利模式
    【英文版本】Android开源项目分类汇总
    Android精品开源整理
    Android开源项目汇总【转】
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/8536574.html
Copyright © 2020-2023  润新知