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

一、Navicat可视化软件

可以充当很多数据库软件的客户端,并且提供操作数据库的快捷方式,主要用于MySQL

1.什么是可视化软件?

数据可视化可将文本数字数据转化为可视化的图标,图形和表格通过将重要数据引入中央界面,它被用作创建应用程序/系统性能或操作仪表板的方法。

2.什么是Navicat?

官网下载Navicat:http://www.navicat.com.cn/download/navicat-for-mysql

Navicat是一个可多重连接的数据库管理工具,它可以连接到MySQL、Oracle、PostgreSQL、SQLite、SQL Server和/或MariaDB数据库,让数据库管理更加方便。Navicat的功能可以满足专业开发人员的所有需求,对数据库服务器的新手来说学起来也不会很难。有了极完备的图形用户界面(GUI),Nacivat可以简便、安全地创建、组织、访问和共享信息。

Navicat Premium是一套数据库管理工具,结合了其它Navicat成员的功能,Navicat Premium可满足现今数据库管理系统的使用功能,包括存储过程、事件、触发器、函数、视图等。

Nacivat该软件是收费的,但是有许多破解版可以去下载破解版,正式版只能免费试用14天。它虽然很好用,但是为了我们以后提高我们的开发的效率,不能过于依赖这个软件,其实这些软件的底层还是执行的SQL语句来操作数据库的,只不过是将SQL语句封装到了软件内。

二、使用Navicat操作MySQL

1.Navicat连接本地

image

2.连接成功后进行后续的操作

image

3.连接成功后,可以看到当前所拥有的数据库,同时右键可以创建新的库,设置库的名称,选择编码(选择MySQL,或者MySQLmb4(支持图像))

image

4.创建新表,右键点击创建新表,增加字段,设置字段类型、外键、主键、自增、null、注释(comment),点击左上的保存输入表的名字。可以查看创表的SQL语句。

image

5.查看创表的SQL语句

image

6.点击数据库,右键选择逆向数据库到模型,可以看到所有表的关系。

image

7.转储SQL文件,点击数据库右键导出SQL文件,有俩种选项,可以是只导出结构与数据,另一种是仅结构

image

8.运行SQL文件,点击数据库右键运行SQL文件,将本地SQL文件导入到MySQL中

image

三、使用可视化软件实现(MySQL多表查询)

1.做题思路
写多表查询的时候跟写代码一样,先写思路再写sql
不要想着一次性写完 写完一点再写一点
2.练习题
# -- 1、查询所有的课程的名称以及对应的任课老师姓名
# 1.先确定需要几张表  课程表  老师表
# 2.简单查询每张表中的数据
-- select * from course
-- select * from teacher 
# 3.思考查询逻辑 多表查询(连表查询)
-- select * from course INNER JOIN teacher on teacher.tid = course.teacher_id;
# 查询出来的结果可以看作是两张表联合在一起又形成的一张表
SELECT course.cname,teacher.tname from course INNER JOIN teacher on teacher.tid = course.teacher_id;

image

# -- 4、查询平均成绩大于八十分的同学的姓名和平均成绩
# 1.先确定需要几张表 成绩表  学生表
# 2. 简单查询表中的数据
-- select * from student;
-- SELECT * FROM score;
# 3.先查询成绩表中平均成绩大于80分的数据
# 3.1按照学生编号分组 利用聚合函数avg求出所有学生编号对应的平均数据
-- SELECT student_id,avg(num) from score group by student_id;
# 3.2基于上述分组之后的结果筛选出平均成绩大于80的数据
-- select student_id,avg(num) from score GROUP BY student_id HAVING AVG(num) > 80;
-- # 针对select后面通过函数或者表达式编写的字段为了后续取值方便,一般需要重命名成普通字段
# 4.连接上述表和学生表
-- SELECT
-- 	* 
-- FROM
-- 	student
-- 	INNER JOIN ( SELECT student_id, avg( num ) FROM score GROUP BY student_id HAVING AVG( num ) > 80 ) AS t1 ON student.sid = t1.student_id;
# 5.筛选学生名与平均分
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;

image

# 7、查询没有报李平老师课的学生姓名
# 7、查询没有报李平老师课的学生姓名
# 1.先确定需要用到的表,老师表 课程表 分数表 学生表
# 2.简单查看表中的数据
# 3.俩种解题思路
-- 直接查看其他老师教的课程一步步查到学生
-- 查看李平老师教授的课程id号
# 4.先获取李平老师教授的课程id号
-- select tid from teacher where tname = '李平老师';
# 5.子查询获取课程编号
-- select cid from course where teacher_id =(select tid from teacher where tname = '李平老师');
-- # 6.根据课程编号去成绩表中筛选出了所有报了课程编号的数据
-- select DISTINCT student_id from score where course_id in (select cid from course where teacher_id =(select tid from teacher where tname = '李平老师'));
-- # 7.根据上述学生id号去学生表中取反,获取没有报李平老师的课程的学生姓名
SELECT sname from student WHERE sid not in (select DISTINCT student_id from score where course_id in (select cid from course where teacher_id =(select tid from teacher where tname = '李平老师'))
);

image

# 8、查询没有同时选修物理课程和体育课程的学生姓名
# 1.先确定几张表 学生表 成绩表 课程表
# 2.查看表的数据
# 3.先获取物理和体育的id号
select cid from course where cname in ('物理','体育')
# 4.根据课程id筛选出去没有报这两门课程的人
select * from score where course_id in (select cid from course where cname in ('物理','体育')
)
# 5.基于上述表统计每个学生编号报了几门课
select score.student_id from score where course_id in (select cid from course where cname in ('物理','体育')
) GROUP BY score.student_id HAVING COUNT(score.course_id) = 1
# 6.根据上述id获取学生姓名
select sname from student where sid in (select score.student_id from score where course_id in (select cid from course where cname in ('物理','体育')
) GROUP BY score.student_id HAVING COUNT(score.course_id) = 1)

image

# 9、查询挂科超过两门(包括两门)的学生姓名和班级
# 1.先筛选出分数小于60的数据
select * from score where num < 60
# 2.统计每个学生挂科的数量
select student_id from score where num < 60 group by student_id HAVING COUNT(course_id) >= 2;
# 3.连接学生表和班级表
select * from class INNER JOIN student on class.cid = student.class_id
# 4.筛选挂科的学生姓名和班级
select class.caption,student.sname from class INNER JOIN student on class.cid = student.class_id where student.sid IN(select student_id from score where num < 60 group by student_id HAVING COUNT(course_id) >= 2);

image

六、小知识点的补充

 1.as语法
	给字段起别名、起表名
2.comment语法
	给表、字段添加注释信息
 	create table server(id int) comment '这个server意思是服务器表'
	create table t1(
    	id int comment '用户编号',
       name varchar(16) comment '用户名'
    ) comment '用户表';
	"""
	查看注释的地方
		show create table 
		use information_schema
	"""
3.concat、concat_ws语法
	concat用于分组之前多个字段数据的拼接
	concat_ws如果有多个字段 并且分隔符一致 可以使用该方法减少代码
4.exists语法
	select * from userinfo where exists (select * from department where id<100)
	exists后面的sql语句如果有结果那么执行前面的sql语句
	如果没有结果则不执行
posted @ 2022-08-18 21:37  张张包~  阅读(764)  评论(0编辑  收藏  举报