zoukankan      html  css  js  c++  java
  • 多表查询 Naricat pymysql

    多表查询

    笛卡尔积

    select * from 表名1,表名2
    # 将两表所有的数据一一对应, 生成一张大表
    
    select * from 表名1, 表名2 where 表名1.字段=表名2.字段
    # 多表关联 找到对应关系
    
    select * from 表名1, 表名2 where 表名1.字段=表名2.字段 and 表名.字段条件
    # 过滤 限定条件 
    

    连表查询

    内连接

    ​ inner join

    select * from 表名1 inner join 表名2 on 表名1.字段 = 表名2.字段
    # 连表, 自动过滤无关联数据, 只显示有对应关系的数据
    
    select * from 表名1 inner join 表名2 on 表名1.字段 = 表名2.字段 where 条件sql句
    # 筛选, 条件sql句筛选数据范围
    
    select 表名.字段 from 表名1 inner join 表名2 on 表名1.字段 = 表名2.字段 where 条件sql句
    # 找对应字段, 将 * 换成具体对应的字段
    

    左连接

    ​ left join

    ​ 基本同内连接用法一样, 但是以左表为主表, 右表为副表, 左表字段必须全部显示, 即使右表无对应字段也要以null补全

    右连接

    ​ right join

    ​ 同左连接, 但是相反

    全连接

    ​ union

    ​ 同左右连接一样, 并且两边的无对应字段都以null补全

    左连接语句 union 右连接语句
    

    子查询

    select 字段(*) from 表名1 where 条件sql语句 = (select 字段(*) from 表名2 where 条件)
    # 一个查询结果, 作为另一个查询的查询条件
    
    select 字段(*) from 表名1 where 条件sql语句 in (select 字段(*) from 表名2 where 条件 or 条件)
    # 关键字 in, 查询多个条件时, 用 in 替换 = 号
    
    select 字段(*) from 表名1 where exits (select * from 表名2)
    # 关键字 exits, 判断exits后是否有返回值, 如果有执行where前的查询语句, 如果没有不执行
    

    Naricat

    掌握:
    #1. 测试+链接数据库
    #2. 新建库
    #3. 新建表,新增字段+类型+约束
    #4. 设计表:外键
    #5. 新建查询
    #6. 备份库/表
    
    #注意:
    批量加注释:ctrl+?键
    批量去注释:ctrl+shift+?键
    

    pymysql

    ​ pymysql 是用来在python程序中操作mysql, 本质上是一个socket(套接字)客户端

    import pymysql
    # user = input('用户名:').strip()
    # pwd = input('密码:').strip()
    
    conn = pymysql.connect(host='localhost',
                           port=3306,
                           user='root',
                           password='123',
                           database='test',
                           charset='utf8')
    # cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
    # 读取出来的是字典
    
    cursor = conn.cursor()
    # 读取出来是元组
    
    sql = 'select * from t1'
    
    res = cursor.execute(sql)
    print(res)
    # res 返回的是影响表记录的数量
    # if res:
    #     print("登录成功")
    # else:
    #     print("登录失败")
    
    one_data = cursor.fetchone()
    # 取一条数据
    
    cursor.scroll(2,'absolute')
    # 绝对移动 从初始位置向后移动一行
    
    many_data = cursor.fetchmany(2)
    # 取两条数据
    
    cursor.scroll(1,'relative')
    # 相对移动 从上一次取的数据后, 向后移动1行
    
    all_data = cursor.fetchall()
    # 取全部数据
    print(one_data)
    print(many_data)
    print(all_data)
    
    # cursor.close() #关闭游标
    # conn.close()   #关闭连接
    

    execute()

    import pymysql
    
    conn = pymysql.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        password='123',
        database='database',
        charset='utf8'
    )
    
    cursor = conn.cursor()
    uname = input('请输入用户名:')
    pword = input('请输入密码:')
    
    sql = "select * from userinfo where username='%s' and password='%s';"%(uname,pword)
    
    res = cursor.execute(sql,[uname,pword]) #res我们说是得到的行数,如果这个行数不为零,说明用户输入的用户名和密码存在,如果为0说名存在
    
    print(res) #如果输入的用户名和密码错误,这个结果为0,如果正确,这个结果为1
    if res:
        print('登陆成功')
    else:
        print('用户名和密码错误!')
    

    增删改

    import pymysql
    #链接
    conn=pymysql.connect(host='localhost',port='3306',user='root',password='123',database='crm',charset='utf8')
    #游标
    cursor=conn.cursor()
    
    #执行sql语句
    #part1
    # sql='insert into userinfo(name,password) values("root","123456");'
    # res=cursor.execute(sql) #执行sql语句,返回sql影响成功的行数
    # print(res)
    # print(cursor.lastrowid) #返回的是你插入的这条记录是到了第几条了
    
    #part2
    # sql='insert into userinfo(name,password) values(%s,%s);'
    # res=cursor.execute(sql,("root","123456")) #执行sql语句,返回sql影响成功的行数
    # print(res)
    #还可以进行更改操作:
    #res=cursor.excute("update userinfo set username='taibaisb' where id=2")
    #print(res) #结果为1
    #part3
    sql='insert into userinfo(name,password) values(%s,%s);'
    res=cursor.executemany(sql,[("root","123456"),("lhf","12356"),("eee","156")]) #执行sql语句,返回sql影响成功的行数,一次插多条记录
    print(res)
    #上面的几步,虽然都有返回结果,也就是那个受影响的函数res,但是你去数据库里面一看,并没有保存到数据库里面,
    conn.commit() #必须执行conn.commit,注意是conn,不是cursor,执行这句提交后才发现表中插入记录成功,没有这句,上面的这几步操作其实都没有成功保存。
    cursor.close()
    conn.close()
    
  • 相关阅读:
    计算机基础知识-计算机网络知识
    计算机基础知识-操作系统
    计算机基础知识-硬件
    Django REST
    船舶管子零件图程序开发
    OpenCASCADE 参数曲面面积
    Jenkins in OpenCASCADE
    OpenCASCADE BRepMesh
    管道设计CAD系统中重量重心计算
    IsoAlgo3d
  • 原文地址:https://www.cnblogs.com/beichen123/p/11937129.html
Copyright © 2011-2022 走看看