今日内容:
1.子查询补充
2.正则表达式
3.pymysql
1.子查询补充
什么是子查询?
将上一次查询的结果作为下一次查询的条件或原数据
又称为内查询
作用:当你的需求,一次查询无法满足的时候(也就是一次select找不到你要的数据)
注:子查询能实现的效果,多表联查也可以是实现
实例演示:
准备数据
员工表: create table emp (id int,name char(10),sex char,age int,dept_id int,job char(10),salary double); insert into emp values (1,"刘备","男",26,1,"总监",5800), (2,"张飞","男",24,1,"员工",3000), (3,"关羽","男",30,1,"员工",4000), (4,"孙权","男",25,2,"总监",6000), (10,"刘备2","男",26,2,"总监",5800), (5,"周瑜","男",22,2,"员工",5000), (6,"小乔","女",31,2,"员工",4000), (7,"曹操","男",19,3,"总监",10000), (8,"司马懿","男",24,3,"员工",6000); 部门表: create table dept(id int primary key,name char(10)); insert into dept values(1,"市场"),(2,"行政"),(3,"财务");
问1:财务部有哪些人?
第一步我们需要直到财务部的id
select id from dept where name ="财务";
第二步我们用查询到的id作为判断条件来查询emp实现效果(用关键字in来实现子查询)
问2查询平均年龄大于25的部门名称
第一步先求出每个部门的平均年龄
select dept_id from emp group by dept_id having avg(age)>25;
第二步通过得到的部门id去部门表中查询
exists关键字子查询
exists 后跟子查询 子查询有结果为True ,没有结果为False(为True时外层执行,为False外层不执行)
select *from emp where exists (select *from emp where salary > 1000);
注:子查询的语法特点:一个select a 中 包含另外一个select b(b只能位于a的where后面)
2.正则表达式匹配
正则表达式用于模糊查询,模糊查询已经讲过了
like 仅支持 % 和 _远没有正则表达式灵活
当然绝大多数情况下 like足够使用
语法:select *from table where name regexp "正则表达式";
实例示范:
select * from emp where name regexp "^刘";
select * from emp where name regexp "司+";
select * from emp where name regexp "备$";
3.pymsql
import pymysql ''' 问题: 如何能在python中去使用数据库存取数据? 使用pymysql模块 如何使用 1. 导入 import pymysql ''' ''' pymysql 使用步骤 核心类Connect连接用 和 Cursor读写用 1.与数据库服务器建立连接 2.获取游标对象(用于发送和接收数据) 3.用游标执行sql语句 4.使用fetch方法来获取执行的结果 5.关闭连接 先关游标 再关连接 游标的常用方法 1.创建游标 conn.cursor(指定查询结果的数据类型) 2.excute 执行sql 3.fetchone (当sql只有一条记录时) many(sql有多条并且需要指定条数) all(多条) 4.scroll 用于修改游标的当前位置 注意:pymysql 默认不提交修改 但是注意(指的是对表中记录的操作不提交)像删库、删表 是无法撤销的 ''' # 创建连接得到一个连接对象 conn = pymysql.Connect( host ="127.0.0.1", #主机地址 user="root", #用户名 password="123456", #密码 database="mydb", #数据库名称 port=3306, #端口号 charset = "utf8", #编码 ) #获取游标对象 pymysql.cursors.DictCursor 指定 返回的结果类型为字典 默认是元组类型 cursor = conn.cursor(pymysql.cursors.DictCursor) #查询数据 sql = "select *from students" # 执行sql 如果是select 语句返回的是 查询的条数 res = cursor.execute(sql) #conn.commit()这个是用来提交修改的,因为在pymysql模块中默认是会撤回操作的,如果你的sql语句不提交,就不会被执行 # 注:撤销只针对于记录,若执行的是删库或者删表操作,那是不会被撤销的 conn.commit() print(res) #关闭连接 cursor.close() conn.close()