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

python进阶09 MySQL高级查询的更多相关文章

  1. MySQL 高级查询操作

    目录 MySQL 高级查询操作 一.预告 二.简单查询 三.显示筛选 四.存储过程 五.查询语句 1.作为变量 2.函数调用 3.写入数据表 备注 附表一 附表二 相关文献 博客提示 MySQL 高级 ...

  2. python进阶10 MySQL补充 编码、别名、视图、数据库修改

    python进阶10 MySQL补充    编码.别名.视图.数据库修改 一.编码问题 #MySQL级别编码 #修改位置: /etc/mysql/mysql.conf.d/mysqld.cnf def ...

  3. python进阶08 MySQL基础补充

    python进阶08 MySQL基础补充 本次课程都是基于三张表格的使用 一.子查询 #如何找到‘张三’的成绩 #思路:先找到张三的学号,在拿这个张三的学号到成绩表里面去匹配,得出成绩 #如何用一条查 ...

  4. python进阶07 MySQL

    python进阶07 MySQL 一.MySQL基本结构 1.认识MySQL #MySQL不是数据库,它是数据库管理软件 #MySQL如何组织数据 #如何进入MySQL数据库 #其他注意事项 #以表格 ...

  5. 第四章 MySQL高级查询(二)

    第四章 MySQL高级查询(二) 一.EXISTS子查询 在执行create 或drop语句之前,可以使用exists语句判断该数据库对像是否存在,返回值是true或false.除此之外,exists ...

  6. 第三章 MySQL高级查询(一)

    第三章 MySQL高级查询(一) 一.SQL语言的四个分类 1.       DML(Data Manipulation Language)(数据操作语言):用来插入,修改和删除表中的数据,如INSE ...

  7. MySQL高级查询与编程作业目录 (作业笔记)

    MySQL高级查询与编程笔记 • [目录] 第1章 数据库设计原理与实战 >>> 第2章 数据定义和操作 >>> 2.1.4 使用 DDL 语句分别创建仓库表.供应 ...

  8. MySQL高级查询与编程笔记 • 【目录】

    章节 内容 实践练习 MySQL高级查询与编程作业目录(作业笔记) 第1章 MySQL高级查询与编程笔记 • [第1章 数据库设计原理与实战] 第2章 MySQL高级查询与编程笔记 • [第2章 数据 ...

  9. 2.mysql高级查询

    01.SQL高级查询_排序     1.排序语句:order by 排序字段名  asc(默认的-升序) / desc(降序);     2.例如:查询所有服装类商品,将查询结果以价格升序排序:   ...

随机推荐

  1. Contiki Ctimer模块

    Ctimer 提供和Etimer类似的功能,只是Ctimer是在一段时间后调用回调函数,没有和特定进程相关联. 而Etimer是在一段时间后发送PROCESS_EVENT_TIMER事件给特定的进程. ...

  2. deepin 安装微信与QQ

    安装QQ sudo apt-get install deepin.com.qq.im 安装微信 sudo apt-get install deepin.com.wechat 附录 其他安装包 http ...

  3. python读取文件后切片

    from itertools import islice with open(“1.txt") as f: for a in islice(f,0,2): print(a)

  4. javascript(9)

    js中访问函数 p1.abc() p1["abc"]; js中基于对象 == js面向对象

  5. LoadRunner中的函数

    函数是LoadRunner提供给性能测试工程师的利器,有了它,性能测试工程师可以对脚本进行更为自由的开发,更适应实际测试的需求,进一步扩展脚本的功能. LoadRunner函数的格式: 返回值  函数 ...

  6. java 基础 - 反转字符串

    反转字符串 public class Main { public static void main(String[] args) { String newStr= strReverseWithArra ...

  7. python 之深浅拷贝

    浅拷贝: 深拷贝:

  8. BZOJ4088: [Sdoi2015]立体图

    高一联赛之后不久写的.当时看到这题就感觉特别优美.那个时候啥都不会,就只会这种模拟题,还只会最暴力的方法.对于每个方向的灯,枚举每个位置,手动枚举所有遮挡效果,并在枚举位置过程中传递遮挡效果. con ...

  9. 普通项目转为maven项目及相关操作说明

    普通项目转为maven项目及相关操作说明 1 原项目简述 如图,一般的项目大致包括三类路径:src,源码路径:test,单元测试路径:lib第三方类包路径. 示例项目中,BaseDao类依赖于mysq ...

  10. WPF Background的设置有坑

    今天帮忙同事解决在后台绑定时,动态更改控件(Grid)的Background. 有个陷阱,C#有2个命名空间有Brush和Color, 分别为System.Drawing和System.Window. ...