day42
今日内容:
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()

浙公网安备 33010602011771号