可视化软件Navicat

  第三方开发的用来充当数据库客户端的简单快捷的操作界面
  无论第三方软件有多么的花里胡哨,底层的本质还是SQL
  能够操作数据库的第三方可视化软件有很多,其中针对MySQL最出名的就是Navicat。

软件下载与安装

1.浏览器搜索Navicat直接下载

版本很多、能够充当的数据库客户端也很多

2.破解方式

先试用在破解、直接下载破解版(老版本)、修改试用日期

3.常用操作

有些功能可能需要自己修改SQL预览
创建库、表、记录、外键
逆向数据库到模型、模型创建
新建查询可以编写SQL语句并自带提示功能
SQL语句注释语法
--、#、\**\
运行、转储SQL文件

多表查询练习题

编写复杂的SQL不要想着一口气写完,一定要先明确思路,然后一步步写一步步查一步步补。

1、查询所有的课程的名称以及对应的任课老师姓名

# 1.先确定需要用到几张表——课程表、讲师表

# 2.预览表中的数据,做到心中有数

-- select * from course;
-- select * from teacher;

# 3.确定多表查询的思路——连表、子查询、混合操作

SELECT
teacher.tname,
course.cname
FROM
course
INNER JOIN teacher ON course.teacher_id = teacher.tid

2、查询平均成绩大于八十分的同学的姓名和平均成绩

# 1.先确定需要用到几张表——学生表、分数表

# 2.预览表中的数据

-- select * from student;
-- select * from score;

# 3.根据已知条件80分,选择切入点——分数表
# 求每个学生的平均成绩,按照student_id分组,然后avg求num即可

SELECT student_id, avg(num) as avg_num FROM score GROUP BY student_id HAVING avg_num>80;

# 4.确定最终的结果需要几张表。需要两张表,采用连表更加合适

SELECT student.sname, t1.avg_num from student INNER JOIN(SELECT student_id, avg(num) as avg_num FROM score GROUP BY student_id HAVING avg_num>80) as t1 on student.sid = t1.student_id;

3、查询没有同时选修物理课程和体育课程的学生姓名(报了两门或者一门不报的都不算)

# 1.先确定需要的表——学生表、分数表、课程表

# 2.预览表数据

# 3.根据给出的条件确定起手的表

# 4.根据物理和体育筛选课程id

select cid from course where cname in ('物理','体育');

# 5.根据课程id筛选出所有跟物理、体育相关的学生信息

select * from score where course_id in (select cid from course where cname in ('物理','体育'));

# 6.统计每个学生报了的课程数,筛选出等于1的

select student_id from score where course_id in (select cid from course where cname in ('物理','体育')) GROUP BY student_id HAVING COUNT(course_id)=1;

# 7.子查询获取学生姓名即可

select sname FROM student WHERE sid in(select student_id from score where course_id in (select cid from course where cname in ('物理','体育')) GROUP BY student_id HAVING COUNT(course_id)=1);

4、查询挂科超过两门(包括两门)的学生姓名和班级

# 1.先确定涉及到的表——分数表、学生表、班级表

# 2.预览表数据

# 3.根据条件确定以分数表作为起手条件

# 步骤1 先筛选掉大于60的数据

select * from score where num < 60;

# 步骤2 统计每个学生挂科的次数

select student_id,count(course_id) from score where num < 60 group by student_id;

# 步骤3 筛选次数大于等于2的数据

select student_id from score where num < 60 group by student_id having count(course_id) >= 2;

# 步骤4 连接班级表与学生表 然后基于学生id筛选即可

select student.sname, class.caption FROM student INNER JOIN class ON student.class_id = class.cid WHERE student.sid IN(select student_id from score where num < 60 group by student_id having count(course_id) >= 2);

python操作MySQL

pymysql模块下载

  pip3 install pymysql

导入模块

  import pymysql

代码实操

1.连接MySQL服务端

conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
db='db5_02',
charset='utf8mb4'
)

2.产生游标对象

cursor = conn.cursor()  # 括号内不填写额外参数,数据是元组,指定性不强  [(),()]
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 添加参数之后,数据是字典的形式,可以很清楚地识别每个数据所表示的字段名 [{},{}]

3.编写SQL语句

sql = 'select * from teacher;'   # 查询老师表中的信息
# sql = 'select * from score;' # 查询分数表中的信息

4.发送SQL语句

affect_rows = cursor.execute(sql)   # execute也有返回值,接收的是SQL语句影响的行数

 # 收的是SQL语句影响的行数
  print(affect_rows)    # 5

5.获取SQL语句执行之后的结果

res = cursor.fetchall()
print(res) # [{'tid': 1, 'tname': '张磊老师'}, {'tid': 2, 'tname': '李平老师'}, {'tid': 3, 'tname': '刘海燕老师'}, {'tid': 4, 'tname': '朱云海老师'}, {'tid': 5, 'tname': '李杰老师'}]

pymysql补充说明

上述步骤5中,如果多次使用fetchall()获取执行之后的结果,会发现除第一次外,其他获取到的都是空,相当于第一次获取了所有的数据,指针移到了末尾,第二次从当前指针的位置往后获取,后面什么都没有,所以获取到的是空。

1.获取数据

fetchall()  获取所有的结果

fetchone()    获取结果集的第一个数据

fetchmany() 获取指定数量的结果集,括号里面可以传数字参数,表示一次获取的数据量

ps: 三者都有类似于文件光标移动的特性

cursor.scroll(1,'relative')  # 基于当前位置往后移动
res1 = cursor.fetchone()
print(res1) # {'tid': 1, 'tname': '张磊老师'}
cursor.scroll(1,'relative')
res2 = cursor.fetchone()
print(res2) # {'tid': 3, 'tname': '刘海燕老师'}

cursor.scroll(0,'absolute') # 基于数据的开头往后移动
res1 = cursor.fetchone()
print(res1) # {'tid': 1, 'tname': '张磊老师'}
cursor.scroll(0,'absolute')
res2 = cursor.fetchone()
print(res2) # {'tid': 1, 'tname': '张磊老师'}

2.增删改查

如果想要通过代码往上述表格中插入、修改或删除数据,默认是无法操作的,必须要经过二次确认才可以。

conn.commit()   # 针对增、删、改,二次确认(代码确认)

我们也可以直接在连接MySQL服务端的括号内添加一条配制,自动确认

conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
db='db5_02',
charset='utf8mb4',
autocommit=True # 针对增、删、改,自动确认(直接配置)
)

可视化软件Navicat,python操作MySQL的更多相关文章

  1. 多表查询思路、navicat可视化软件、python操作MySQL、SQL注入问题以及其他补充知识

    昨日内容回顾 外键字段 # 就是用来建立表与表之间的关系的字段 表关系判断 # 一对一 # 一对多 # 多对多 """通过换位思考判断""" ...

  2. navicat软件、 python操作MySQL

    查询关键字之having过滤 having与where的功能是一模一样的 都是对数据进行筛选 where用在分组之前的筛选 havng用在分组之后的筛选 为了更好的区分 所以将where说成筛选 ha ...

  3. python基础(数据库、可视化软件Navicat、python操作MySQL)

    多表查询的两种方法 数据准备: 建表 create table dep( id int primary key auto_increment, name varchar(20) ); create t ...

  4. 多表查询两种方法、可视化软件navicat、python操作mysql、pymysql模块

    目录 多表查询的思路 多表查询的两种方法 小知识点补充数说明 可视化软件Navicat 安装教程 数据库常用操作 多表查询练习题 python 操作MySQL pymysql补充说明 Non-grou ...

  5. 11月28日内容总结——多表查询的两种方法及部分小知识点、可视化软件Navicat安装及简单使用讲解及多表查询练习题、python代码操作MySQL(pymysql模块)

    目录 一.多表查询的两种方法 方式1:连表操作 inner join(内连接) left join(左连接) right join(右连接) union(全连接) 方式2:子查询 二.小知识点补充说明 ...

  6. MySQL-多表查询的两种方法、Navicat、python操作MySQL

    1.多表查询的两种方法 1.连表操作: 1.1:inner join:内连接,将两张表共同的部分连接起来生成一张新表.拼接顺序是把后面的表拼在前面的表,如果颠倒位置结果不同. select * fro ...

  7. MySQL可视化软件(Navicat)部署与使用

    目录 一:可视化软件(Navicat) 1.什么是可视化软件? 2.什么是Navicat? 二:部署MySQL(Navicat) 1.Navicat连接本地MySQL 2.连接MySQL,输入密码,在 ...

  8. Python全栈开发之MySQL(二)------navicate和python操作MySQL

    一:Navicate的安装 1.什么是navicate? Navicat是一套快速.可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设.它的设计符合数据库管理员.开发人员及中小 ...

  9. Python操作MySQL数据库(步骤教程)

    我们经常需要将大量数据保存起来以备后续使用,数据库是一个很好的解决方案.在众多数据库中,MySQL数据库算是入门比较简单.语法比较简单,同时也比较实用的一个.在这篇博客中,将以MySQL数据库为例,介 ...

随机推荐

  1. 玖章算术受邀参加红杉Talk「创新的复利」科技专场,共同探讨云计算的前世今生

    9月2日,本周五14:00 「创新的复利」 Sequoia Talk系列论坛,首期直播盛大启动.在第一期科技专场,4位红杉中国资深投资人.8位创新创业者将带我们深入工业软件.机器人.云计算等领域,围绕 ...

  2. 自定义View6 -塔防小游戏:第三篇防御塔随意放置+多组野怪

    第一篇:一个防御塔+多个野怪(简易版)第二篇:防御塔随意放置第三篇:防御塔随意放置+多组野怪 1.动态addView防御塔 2.防御塔放置后不可以移动 3.弯曲道路 4.素材替换 第四篇:多波野怪 第 ...

  3. P7361 「JZOI-1」拜神 (字符串)

    题意: 给一个串,\(Q\) 次询问区间 \([l,r]\) 中至少出现两次的子串的最大长度. 写LCT是什么东东 以下做法很经典: 先求出 SA 以及 height 数组,然后按 height 从大 ...

  4. Period of an Infinite Binary Expansion 题解

    Solution 简单写一下思考过程,比较水的数论题 第一个答案几乎已经是可以背下来的,在此不再赘述 考虑我们已经知道了\((p,q)\),其中\((p \perp q) \wedge (q \per ...

  5. 知识图谱-生物信息学-医学论文(BMC Bioinformatics-2022)-挖掘阿尔茨海默病相关KG来确定潜在的相关语义三元组用于药物再利用

    论文标题: Mining On Alzheimer's Diseases Related Knowledge Graph to Identity Potential AD-related Semant ...

  6. MySQL 索引失效-模糊查询,最左匹配原则,OR条件等。

    索引失效 介绍 索引失效就是我们明明在查询时的条件为索引列(包括自己新建的索引),但是索引不能起效,走的是全表扫描.explain 后可查看type=ALL. 这是为什么呢? 首先介绍有以下几种情况索 ...

  7. 【保姆教程】RuoYi-Radius搭建实现portal认证

    [保姆教程]RuoYi-Radius搭建实现portal认证 一.简介 以若依后台管理框架V4.6.0做为基础框架,实现了ToughRADIUS大部分功能,支持标准RADIUS协议(RFC 2865, ...

  8. 剑指offer20题表示数值的字符串:这题实在是太优雅了

    目录 前言 一.憨憨初解 1.思路 2.代码 3.战绩 4.反思 二.看懂再解 1.思路 2.代码 3.C++版战绩 总结 前言 题目来源:https://leetcode.cn/problems/b ...

  9. onps栈使用说明(1)——API接口手册

    1. 底层API 由协议栈底层提供的api,用于涉及底层操作的一些功能实现,这些api接口函数的原型定义分布于不同的文件,它们被统一include进了onps.h中: open_npstack_loa ...

  10. spring源码解析(一) 环境搭建(各种坑的解决办法)

    上次搭建spring源码的环境还是两年前,依稀记得那时候也是一顿折腾,奈何当时没有记录,导致两年后的今天把坑重踩了一遍,还遇到了新的坑,真是欲哭无泪;为了以后类似的事情不再发生,这次写下这篇博文来必坑 ...