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()

  

posted @ 2018-09-17 19:32  yyxxff  阅读(129)  评论(0编辑  收藏  举报