zoukankan      html  css  js  c++  java
  • 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()
    

      

  • 相关阅读:
    HTML 基本知识
    Vue.js 基本内容
    机器学习概述
    9 验证回文串
    c 字符串的一些常用函数
    8 有效的字母异位词
    7 字符串中的第一个唯一字符
    对公平锁、非公平锁、可重入锁、递归锁、自旋锁的理解
    一个解释volatile关键字最好的例子
    Singleton多种实现方式的在多线程情况下的优缺点
  • 原文地址:https://www.cnblogs.com/yaoxiaofeng/p/9664366.html
Copyright © 2011-2022 走看看