一、数据库介绍
1.1 什么是数据库?
数据库(database)是用来组织、存储和管理数据的仓库。要想管理数据就需要安装对应的软件:比如我们的excel。
1.2 常见关系型数据库【重点】
(1)MySQL 数据库,目前使用最广泛、流行度最高的开源免费数据库 (甲骨文)
(2)Oracle 数据库,收费 (甲骨文)
(3)SQL Server 数据库,收费 (微软)
以上三种属于传统型数据库,又叫做:关系型数据库 ,这三者的设计理念相同,用法比较类似。
常见的非关系型数据库:
memcached、redis、mongodb
1.3 存储数据的方式
存储数据的方式指的就是数据以什么样的结构进行存储。
1.3.1 传统物质分类
整理前:
整理后:
1.3.2 excel分类
计算机中的数据,经常使用类似Excel 表的结构进行管理。每个 Excel 中,数据的组织结构分别为工作簿、工作表、数据行、列这 4 大部分组成。如图:
二、mysql安装
mysql的安装和配置,请查看 mysql安装.docx
或
直接使用phpstudy集成工具中的mysql数据库也可以。
三、数据可视化工具
3.1 简介
简介:操作数据库最古老的方式为cmd。这种方式不友好、也不美观,同时无法保存最近的操作命令,数据库可视化工具帮初学者解决了这一系列问题,对初学者非常友好,数据库可视化工具有很多,Navicat就是其中的一种,它界面直观、功能强大、操作简单,是市面上最流行的一种数据库可视化工具。
3.2 安装navicat
一路回车即可。
3.3 使用navicat工具
3.3.1 使用navicat连接数据库【重点】
3.3.2数据库创建【重点】
在"navicat"中右单击左边的某个连接名称,然后选择"新建数据库"即可,注意字符集要选择“utf-8”。
3.3.3 创建数据表
3.3.3.1 常用的字段类型【重点】
1)、字符型:
char: 通常用来存放某一列值的长度是相对固定的;
varchar: 通常用来存放某一列值的长度是可变的;
text:
2)、数值型:
tinyint:
smallint
int:
bigint:
注意:选择字段类型时要根据t实际情况进行选择,既要满足当前的需求又要考虑到将来的扩展性。
3.3.3.2 设计表的规则
表中不能有重复的数据。
3.3.3.3 数据库、表、数据之间的关系:【重点】
数据库 --> 表 --> 数据
3.3.3.4 什么是记录、字段?【重点】
表中每一行数据称为记录;
表中每一列称为字段;
3.3.3.5 什么是主键?【重点】
能唯一的代表表中某条记录的列称为主键;
3.4 管理数据
使用navicat通过鼠标的方式快速的进行 增、删、改、查
3.5 使用navicat备份与还原
备份:右击点开项目,选择转储SQL文件---结构和数据----选择存放位置
还原文件:备份:右击点开项目,选择运行SQL文件---选择SQL文件路径---点击开始---完成后点击关闭即可。
四、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]