MYSQL数据库(多表查询,python操作MySQL)

❤️‍MySQL数据库

🐠 多表查询的两种方法
🐠 关于SQL的小知识点
🐠 可视化软件Navicat
🐠 多表查询练习题
🐠 python操作MySQL

image

❤️‍🔥多表查询的两种方法

如果我们在进行数据查询的时候,想要的数据可能是在多张表上,这时候我们就需要使用到多表查询了。

——在这些表中,必须存在主键,外键关系(直接关联)

——如果不存在直接关系,则必须存在间接关系,否则业务上是没有任何意义的

🐳连表操作

关于连表操作会用到以下的方法:

inner join :内连接

只连接两张表中共有的数据部分

取键得方式 . (emp.id)

select * from 表名1 inner join 表名2 on 1外键 =表2主键

left join: 左连接

以左边的表为基准,展示左表所有的数据,如果没有对应饿项则使用null 填充

select * from 表名1 left join 表名2 on 1外键 = 2主键

right join: 右连接

以右表为基准展示右表所有的数据,如果没有数据项就用null填充

select * from 表名1 right join 表名2 on 1外键= 2主键

union: 全连接

以左右表为基准展示出两张表所有的数据,各自不存在的项用null代替

select * from 表名1 left join 表名2 on 1外键 = 2主键
union
select * from 表名1 right join 表名2 on 1外键= 2主键

🐳联合查询:就是把查询到的结果合并到一起

select f1,f2 from t1
union [all]
select f1,f2 from t2

连表操作的一些小技巧:会使用连表操作之后,也就可以链接N多张表,我们可以将拼接之后的表起别名当成一张表再去与其他表拼接,再起别名当一张表,再去与其他的表拼接,以此类推。

🐳子查询

概念:SQL语句中嵌套select语句为嵌套查询,又称子查询。

select * from 1 where字段(select 字段 from 2);

将一条SQL语句用括号括起来当另一条SQL语句的查询条件。它的流程类似于我们日常生活中的解决问题的方式>>>分布式操作。

一些代码例子:

提供的数据有:员工表,部门表 有关联(就一个大概)
题目:求将姓名是'Andy'的员工部门名称
解决步骤:
	1.先根据名字获取部门编号
    select dep_id from emp where name='Andy';
    2.再根据部门编号获取部门名称
    select name from dep where id = select dep_id from emp where name='Andy');
    
"ps:很多时候,多表查询和子表查询都是结合实际情况来进行使用的,有的时候甚至是相互配合使用"

❤️‍🔥关于SQL的小知识点

1.concat 与concat_ws

  • concat 可以用于分组字段之前的字段拼接操作
  • concat_ws 可以用于拼接多个字段并且中间的链接符一致
select concat(name ,'$',pwd) from emp;
select concat_ws('|',name,age,pwd) from emp;

2.exists

sql exists sql2 sql2语句有结果的情况下才会执行sql1语句,否则不执行sql1语句,返回空数据。

🐳3.表相关的SQL补充

🐳修改表名:

alter table 表名 rename 新表名;

🐳添加字段:

1.在表的尾部追加字段
aletr table 表名 add 字段名 字段类型(数字) 约束条件;
2.指定的字段后面添加字段
alter table 表名 add 字段名 字段类型()约束条件 after 已有字段;
3.添加主键(第一个字段)
alter table 表名 add 字段名 字段类型() 约束条件 first;

现在添加不报错是因为mysql支持创建字段可以为空,以后在使用框架或者组件添加数据的的时候,要么手动家有一个为空的条件,要么就是默认值,否则就可能会现象报错

🐳修改字段:

1.修改字段名,或字段类型
alter table 表名 change 旧字段名 新字段名 字段类型()约束条件;
2.只能修改字段类型
alter table 表名 modify 字段名 新字段类型() 约束条件;

🐳删除字段:

alter table 表名 drop 字段名;

❤️‍🔥可视化软件Navicat

Navicat是第三方开发的用来充当数据库客户端的简单快捷的操作界面。

无论第三方软件有多么的花里胡哨 底层的本质还是SQL
能够操作数据库的第三方可视化软件有很多 其中针对MySQL最出名的就是Navicat

1.浏览器搜索Navicat直接下载
	版本很多、能够充当的数据库客户端也很多
2.破解方式
	先试用在破解、直接下载破解版(老版本)、修改试用日期

常用操作:

快速入门教程

❤️‍🔥多表查询练习题

❤️‍🔥python操作MySQL

在python3的环境中直接使用下面的命令即可:

pip install pymsql
#或者
pip3 install pymysql

❤️‍🔥链接数据库

pymysql连接数据库使用的是 pymsql.connect() 函数,其常用参数如下(详细的可以在pycharm中点击看详细):

image

🐳connect() 函数返回的连接对象的方法:

image

操作数据库

操作数据库主要使用cursor游标对象,对数据库进行操作
cursor游标对象的常见方法:
image

  • fetchone(),fetchmany(size),fetchall() 三者的返回值都是元组 或 元组的嵌套

🐳创建mysql服务端

import pymysql

# 链接服务端
conn = pymysql.connect(
    host='127.0.0.1',  # mysql服务端的IP地址
    port=3306,  # mysql默认port端口号
    user='root',  # 用户名
    password='123',  #
    db='db3',
    charset='utf8mb4'
)

# 2. 产生游标对象 # 括号内不添加额外的参数,数据的结果会是元组,指定性不强 [(),()]
# cursor = conn.cursor()
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)# [{},{}]

# 3.编写SQL语句
SQL = 'select * from 员工表;'
# 4.发送SQL语句  execute也是哟返回值的,接受的是SQL语句影响的行数
affect_rows = cursor.execute(SQL)
print(affect_rows)
# 5.获取SQL语句执行之后的结果
res = cursor.fetchall()  # 所有的返回值
print(res)

🐳pymysql补充说明:

1.获取数据
	fetchall() 获取所有的结果
    fetchone() 获取结果集的第一个数据
    fetchmany() 获取指定数量的结果集
PS:三者的使用有点类似于光标的移动特性

cursor.scroll(1,'relative') #基于当前位置往后移动
cursor.scroll(0,'absolute') #基于数据的开头往后移动

2.增删改查
SQL数据库中对于数据的使用,增删改查是有优先级之分的,查为最低,所以在pymsql中可以直接查看数据信息,但是其他的就不可以,需要使用下面的条件:
针对增删改查的二次确认  
	autocommit =True   # 自动确认(配置在链接服务端中)
    conn.commit()   # 手动添加 (代码二次确认)

❤️‍🔥总结:

对于修改表结构,插入,查询,删除数据等操作,与上面的操作大体一样,主要是对 sql 语句的编写,此处不做赘述。
整体过程:
连接数据库 -> 创建游标对象 -> 编写sql语句 -> 执行sql语句 -> 获取结果 -> 关闭数据库连接

image

posted @ 2022-11-28 19:18  亓官扶苏  阅读(608)  评论(0编辑  收藏  举报