关于数据库以及数据库的操作(MySQL)

一、数据库介绍

1.1 什么是数据库?

数据库(database)是用来组织存储管理数据的仓库。要想管理数据就需要安装对应的软件:比如我们的excel。

1.2 常见关系型数据库【重点】

(1)MySQL 数据库,目前使用最广泛、流行度最高的开源免费数据库 (甲骨文)

(2)Oracle 数据库,收费 (甲骨文)

(3)SQL Server 数据库,收费 (微软)

以上三种属于传统型数据库,又叫做:关系型数据库 ,这三者的设计理念相同,用法比较类似。

常见的非关系型数据库

memcached、redis、mongodb

1.3 存储数据的方式

存储数据的方式指的就是数据以什么样的结构进行存储。

1.3.1 传统物质分类

整理前:

关于数据库以及数据库的操作(MySQL)_第1张图片

整理后:

关于数据库以及数据库的操作(MySQL)_第2张图片

1.3.2 excel分类

计算机中的数据,经常使用类似Excel 表的结构进行管理。每个 Excel 中,数据的组织结构分别为工作簿、工作表、数据行、列这 4 大部分组成。如图:

关于数据库以及数据库的操作(MySQL)_第3张图片关于数据库以及数据库的操作(MySQL)_第4张图片

二、mysql安装

mysql的安装和配置,请查看 mysql安装.docx

直接使用phpstudy集成工具中的mysql数据库也可以。

三、数据可视化工具

3.1 简介

简介:操作数据库最古老的方式为cmd。这种方式不友好、也不美观,同时无法保存最近的操作命令,数据库可视化工具帮初学者解决了这一系列问题,对初学者非常友好,数据库可视化工具有很多,Navicat就是其中的一种,它界面直观、功能强大、操作简单,是市面上最流行的一种数据库可视化工具。

3.2 安装navicat

一路回车即可。

3.3 使用navicat工具

3.3.1 使用navicat连接数据库【重点】关于数据库以及数据库的操作(MySQL)_第5张图片

3.3.2数据库创建【重点】

在"navicat"中右单击左边的某个连接名称,然后选择"新建数据库"即可,注意字符集要选择“utf-8”

关于数据库以及数据库的操作(MySQL)_第6张图片

3.3.3 创建数据表

3.3.3.1 常用的字段类型【重点】

1)、字符型:

char: 通常用来存放某一列值的长度是相对固定的;

varchar: 通常用来存放某一列值的长度是可变的;

text:

关于数据库以及数据库的操作(MySQL)_第7张图片

2)、数值型:

tinyint:

smallint

int:

bigint:

关于数据库以及数据库的操作(MySQL)_第8张图片

注意:选择字段类型时要根据t实际情况进行选择,既要满足当前的需求又要考虑到将来的扩展性。

3.3.3.2 设计表的规则

表中不能有重复的数据。

3.3.3.3 数据库、表、数据之间的关系:【重点】

数据库 --> 表 --> 数据

3.3.3.4 什么是记录、字段?【重点】

表中每一行数据称为记录;

表中每一列称为字段;

3.3.3.5 什么是主键?【重点】

能唯一的代表表中某条记录的列称为主键;

3.4 管理数据

使用navicat通过鼠标的方式快速的进行 增、删、改、查

3.5 使用navicat备份与还原

备份:右击点开项目,选择转储SQL文件---结构和数据----选择存放位置

关于数据库以及数据库的操作(MySQL)_第9张图片

还原文件:备份:右击点开项目,选择运行SQL文件---选择SQL文件路径---点击开始---完成后点击关闭即可。

关于数据库以及数据库的操作(MySQL)_第10张图片关于数据库以及数据库的操作(MySQL)_第11张图片

四、SQL查询语言

4.1 简介:

SQL(英文全称:Structured Query Language)是结构化查询语言,专门用来访问和处理数据库的编程语言。能够让我们以编程的形式,操作数据库里面的数据。

4.2 SQL语句特点

不区分大小写。

4.3 SQL的主要内容

主句:select、insert into、update 、delete

子句:where(and 和 or) 、order by 、group by 、limit、join...on

4.4 增删改查

4.4.1 添加数据【重点】

语法:

INSERT INTO 表名 [( column1,column2,... )] VALUES ( value1,value2,value2,.... )
-- 如果value的值是字符串则必须加 引号
-- 添加数据的sql语句格式:
-- insert into 表名[(字段名1,字段名2...)]values('值1','值2'...)
-- 添加班级信息:
-- insert into banji(banhao,banji,teacher)values(6,'python','刘老师');
-- 等价于上面的sql语句:
-- insert into banji values(7,'python','刘老师');
 insert into banji(banji,teacher)values('网络营销','李老师')

4.4.2 删除数据【重点】

语法:

DELETE FROM 表名 [WHERE 条件] 
-- 注意:不加条件全删除,很危险
-- 删除数据的sql语句格式:
-- delete from 表名 [where 条件]
-- 删除班号为7的班级信息:
-- delete from banji WHERE banhao=7
delete from banji 

4.4.3 更新数据【重点】

语法:

UPDATE 表名 SET column1 = value1,column2 = value2 ,... [WHERE 条件]
-- 修改数据的sql语句格式:
-- update 表名  set 要修改的字段名1='值1',要修改的字段名2='值2' [where 条件]
-- 将学号为1修改的年龄改为21、性别改为女:
-- update student  set sex='女',age='21' where xuehao=1
-- update student  set sex='男',age='18' 

4.4.4 查询数据【重点】

语法:

SELECT */字段名/函数/字符串 FROM 表名  where 条件  group by 字段名  order by  字段名 asc[升序]/desc[降序] limit  m,n having 条件-- *代表所有的列信息都展示
-- 查询所有学生信息:
select * from xsb 
-- 查询所有学生的姓名、年龄、所在系:
select '姓名为:',xm,'年龄为:',age,szx from xsb 
-- 查询学生的人数:
-- count(*/字段名):计算个数
select count(*) from xsb 
select count(xh) from xsb
-- as:重命名
select count(xh) as n from xsb

-- 查询计算机系、数学系的学生姓名、性别、所在系:
-- 或:or  ||
select xm,sex,szx from xsb where szx='计算机系' || szx='数学系'
-- [not] in():查询属于某些值的数据
-- 等价于上面的sql:
select xm,sex,szx from xsb where szx in('计算机系','数学系')

-- 查询分数大于等于80且小于等于95分的成绩信息:
-- 且:and  &&
select * from cjb where cj>=80 and cj<=95
select * from cjb where cj>=80 && cj<=95
-- [not] between and:查询某个闭合区间值
-- 等价于上面的sql语句:
select * from cjb where cj between 80 and 95
select * from cjb where cj not between 80 and 95

-- 等于:=
-- 不等于:!=   <>
-- 查询降计算机系外的所有学生信息:
select * from xsb where szx!='计算机系'
select * from xsb where szx<>'计算机系'

-- 模糊查询:like 
-- 通配符:_匹配任意一个字符   %匹配零个或n个任意字符
-- 查询姓张的学生的姓名、年龄、所在系:
select xm,age,szx from xsb where xm like '张%'
-- 查询姓名中含有力的学生信息:
select * from xsb where xm like '%力%'

-- 聚合函数:
-- sum():求和
-- avg():求平均值
-- max():  最大值
-- min():  最小值
-- 分组查询:group by 字段名
-- 查询男生、女生分别有多少人:
select sex,count(*) from xsb group by sex 
-- 计算除c06这门课程外的每门课程的总分数:
select kch,sum(cj)  from cjb where kch<>'c06' group by kch 
-- 计算除c06这门课程外的每门课程的平均分:
select kch,avg(cj)  from cjb where kch<>'c06' group by kch 
-- 计算除c06这门课程外的每门课程的学习人数,只显示人数在3人及3人以上的数据:
-- where:是对表中实际存在的数据进行筛选
-- having:是对查询结果集中的数据进行二次筛选
select kch,count(kch) as m from cjb where kch<>'c06'  group by kch  having m >=3

-- order by :排序
-- asc: 升序  如果省略则为asc 
-- desc:降序  
-- 查询c01、c02这两门课程的分数信息,并按分数降序排序:
select * from cjb where kch='c01' || kch='c02'
select * from cjb where kch in('c01','c02') order by cj desc
-- 查询除表演系外的学生姓名、年龄、所在系,并按所在系升序排序,如果为同一个系的学生则按年龄降序排序
select xm,age,szx from xsb where szx<>'表演系' order by szx asc,age desc 


-- limit m,n:从m位置开始查询只查询n条数据
-- m: 位置编号,默认从零开始
-- n: 要查询的条数
-- 查询前三个学生的姓名、年龄、所在系:
select xm,age,szx  from xsb  limit 0,3
-- 如果位置编号为零则可以省略
select xm,age,szx  from xsb  limit 3
select xm,age,szx  from xsb  limit 1,3
-- 查询分数最高的三个成绩信息:
select * from cjb order by cj desc limit 3


-- limit m,n通常用来实现分页:
-- 计算游标位置m:游标位置m的值=(第几页-1)*每页要显示的条数
-- 计算总页数: 总页数=向上取整(总记录个数/每页要显示的条数)


-- 每页显示4个学生信息,第一页要显示的学生信息为:  
select * from xsb limit 0,4
-- 每页显示4个学生信息,第二页要显示的学生信息为:  
select * from xsb limit 4,4
-- 每页显示4个学生信息,第三页要显示的学生信息为:  
select * from xsb limit 8,4

-- 查询除表演系外的每个系的人数,并按人数降序排序,只显示第两条
select count(szx) as n,szx from xsb where szx<>'表演系' group by szx order by n desc limit 2

4.5 其它子句

4.5.1 where 条件

运算符 描述
= 等于
!= 或者 <> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
AND、OR 交集、并集

语法:

主句 WHERE column = VALUE
主句 WHERE column  BETWEEN  VALUE1 AND VALUE2  -- 两边的区间是包含的
主句 WHERE column LIKE 'a%'  -- 在某个列中查询以a为开头的数据
主句 WHERE column LIKE '%a' --  在某个列中查询以a为开头的数据
主句 WHERE column LIKE '%a%' -- 在某个列中查询以a为开头的数据

4.5.2 order by排序

语法:

主句 ORDER BY column [ ASC | DESC ]
    
-- ASC 升序  默认升序
-- DESC 倒序

4.5.3 group by分组查询、聚合查询

SELECT *[,聚合函数] FROM 表名 [GROUP BY 字段]

count(*) 总数量

min(字段名)

max(字段名)

avg(字段名)

sum(字段名) 求和

4.5.4 limit

SELECT * FROM 表名 [ LIMIT [start,]size ]

size:取几条

start: 下标,从哪几个位置开始取

4.5.5 join连表查询

1)、inner join全联接: select */字段名/函数/字符串 from 表1 inner join 表2 on 条件 inner join 表3 on 条件 [ where 条件 group by 字段名 order by 字段名 asc/desc limit m,n having 条件]

inner join全联接特点【重点】:要关联的表必须满足on条件时才会出现在查询结果集中,否则不会出现。

2)、left join 左联接:select */字段名/函数/字符串 from 表1 left join 表2 on 条件 left join 表3 on 条件 [ where 条件 group by 字段名 order by 字段名 asc/desc limit m,n having 条件]

left join 左联接特点【重点】:left join左边的表不管理是否满足on条件都会出现在查询结果集中,而left join右边的表满足on条件时在查询结果集中会有具体的值,否则以null来显示。

SELECT * FROM 表1 JOIN 表2 ON 连接条件   -- 全连接。 只有on后面的条件成立才会连接。
SELECT * FROM 表1 LEFT JOIN 表2 ON 连接条件 -- 左连接  以左表为基准,左表的数据都会显示
SELECT * FROM 表1 RIGHT JOIN 表2 ON 连接条件 -- 右连接  以右表为基准,右表的数据都会显示
-- 查询计算机系、数学系中的学生姓名、性别、年龄、所在系,顺便显示其分数,并按成绩降序排序:
select xm,sex,age,szx,cj from xsb as x left join cjb as c on x.xh=c.xh 
where szx in('计算机系','数学系') order by cj desc limit 20
-- 查询成绩大于等于90分的学生姓名、年龄、所在系、分数、课程名:
select xm,age,szx,cj,kcm from xsb as x left join cjb as c on x.xh=c.xh 
left join kcb as k on c.kch=k.kch where cj>=90 order by cj 

4.6 补充

解决 ID 不连续:

注意表名替换

ALTER TABLE 表名 DROP id;
ALTER TABLE 表名 ADD id int NOT NULL FIRST;
ALTER TABLE 表名 MODIFY COLUMN id int NOT NULL AUTO_INCREMENT,ADD PRIMARY KEY(id);

select完整语法:

注意顺序

SELECT  字段名[ 表名.字段名 | 表别名.字段名 | 字段名 AS 字段别名 ] [...]
FROM table_name[as table_alias]
[JOIN table_name2 ON 条件]  
[WHERE....]  
[GROUP BY....] 
[ORDER BY....] 
[LIMIT 0,3]  

你可能感兴趣的:(mysql,navicat,数据库)