MYSQL数据库(多表查询,python操作MySQL)
❤️MySQL数据库
🐠 多表查询的两种方法
🐠 关于SQL的小知识点
🐠 可视化软件Navicat
🐠 多表查询练习题
🐠 python操作MySQL
❤️🔥多表查询的两种方法
如果我们在进行数据查询的时候,想要的数据可能是在多张表上,这时候我们就需要使用到多表查询了。
——在这些表中,必须存在主键,外键关系(直接关联)
——如果不存在直接关系,则必须存在间接关系,否则业务上是没有任何意义的
🐳连表操作
关于连表操作会用到以下的方法:
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中点击看详细):
🐳connect() 函数返回的连接对象的方法:
操作数据库
操作数据库主要使用cursor游标对象,对数据库进行操作
cursor游标对象的常见方法:
- 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语句 -> 获取结果 -> 关闭数据库连接