数据库基础知识_软件测试

数据库基础知识

  • 安装数据库遇到的坑
  • 1. 概念
    • 1.1 数据库是什么
    • 1.2 RDBMS关系型数据库
    • 1.3 SQL
    • 1.4 MySQL
  • 2. 服务端与客户端
    • 2.1MySQL服务端操作
    • 2.2 客户端连接数据库
    • 2.3 数据库的操作
    • 2.4 表、数据和字段的操作
  • 3. 数据类型与约束
    • 3.1 约束条件
  • 4. 备份与恢复
  • 5. SQL语言
    • 5.1 查询面板
    • 5.3 数据库操作--增
  • 6. 数据操作
    • 6.1 增
    • 6.2 删
    • 6.3 改
    • 6.4 查
      • 6.4.1 基础查询
      • 6.4.2 别名
      • 6.4.3 去重
      • 6.4.4 条件
      • 6.4.5 排序
      • 6.4.6 聚合函数
      • 6.4.7 分组
      • 6.4.8 分页
    • 6.5 连接查询
      • 6.5.1 内连接
      • 6.5.2 左连接
      • 6.5.3 右连接
      • 6.5.4 自关联
    • 6.6 子查询
      • 6.6.1 子查询充当条件
      • 6.6.2 子查询充当数据源
      • 6.6.3 子查询中特定关键字使用

安装数据库遇到的坑

  1. Mysql 安装到最后一步卡住,兼容性问题(Mysql 较老, Win 10 较新)
    1. 有些人重装一次就好了。
    2. 有些人卸载, 删除mysql安装文件, 删除 临时文件, 删除注册表,重启电脑
    3. 再次安装好了
  2. 安装Navicat 问题
    1. 无法激活,卸载重新安装好了
    2. 注意步骤, 先打补丁, 再激活, 若失败需要卸载, 删除注册表。
    3. 注册机被认定为病毒,防御系统直接删除掉了
    4. 设置 系统安全,管理排除项, 将改文件列为信任。就好了。
  3. 重启电脑, 是解决问题的神器。

1. 概念

1.1 数据库是什么

  • 概念: 计算机中有组织的数据的集合
  • 作用: 存储数据
  • 特点: 高效有效率的查询。

数据库的完整性和有效性

  • 数据库存储的是真实有效的数据
  • 无效的数据不完整的数据无法存储。

1.2 RDBMS关系型数据库

  • 关系型数据库:
    • Oracle
    • SQL Server
    • DB2
    • Mysql
  • 非关系型
    • redis

核心信息

  • 一行信息 – 记录
  • 列 – 字段 (某一方面信息)
  • 多行记录-- 表
  • 多张表— 数据库

1.3 SQL

  • 结构化查询语言
  • 常见的操作: 增删改查

1.4 MySQL

  • 瑞典公司开发的数据库产品
  • 特点:
    • 开源免费,
    • 支持多语言,
    • 支持跨平台

2. 服务端与客户端

  • 服务端: 提供服务的端
  • 客户端: 接受服务的端

2.1MySQL服务端操作

  1. 打开Windows 的服务

    1. 我的电脑 -->右键–>管理
    2. 点击左侧服务和应用程序
    3. 点击 服务
    4. 右侧选中mysql
    5. 停用和启动
  2. PHP Study 启动Mysql 服务

    1. 打开PHP study
    2. 点击右侧启动, 启动Mysql服务

2.2 客户端连接数据库

连接步骤

1. 打开 Navicat
2. 点击右上角连接
3. 输入连接信息
	1. 连接名-- 随便输入
	2. 主机名-- localhost 本机, 127.0.0.1
	3. 端口号 3306
	4. 用户名和密码  root/root 
		123456  111111   1234  root

2.3 数据库的操作

  • 新建
    • 连接右键-- 新建数据库
    • 输入数据库名称
    • 选择字符格式和排序规则
      • utf-8
      • utf8_general_ci
  • 修改
    • 重新编辑数据库的字符格式,排序规则
  • 使用
    • 后面建表, 等操作
  • 删除
    • 数据库–>右键删除。

2.4 表、数据和字段的操作

表的操作

  • 新建
    • 右键–>新建表
    • 输入字段的信息
      • id name age
    • 保存表名
  • 修改
    • 右键–>设计表
    • 编辑表的信息
  • 使用
    • 插入数据信息
  • 删除
    • 右键-- 删除表

数据的操作

  • 插入输入
  • 修改数据
  • 删除数据

字段的操作

  • 增加字段
  • 修改字段
  • 删除字段

3. 数据类型与约束

  • 整数数据类型
    • 分为有符号和无符号(0和正整数) (表设计,进行设计)
    • 输入小数默认–四舍五入
  • 小数数据类型
    • Decimal(所有位数, 小数位数)
      • decemal(5,2) 小数点后精确2位,小数点前3位。
      • 小数点后多出的位数四舍五入。
  • 字符串数据类型
    • 字符包含:数字,英文,中文,特殊符号等, 都是占一个字符。
    • 设置字符的长度
  • 日期数据类型
    • datetime
    • 日期格式多了选择日期的选项。
    • 手动输入, 注意日期的格式

3.1 约束条件

主键约束:

  • 主键唯一, 不能为空。
  • 自增长设为主键,(从1开始,每次增加1)
    • 设置数据类型Int, 属性自增长和无符号
    • 删除的数据,自增长的值会从下面继续增加。
  • 非空
    • 这个字段数据不能为NULL。
    • 注意事项 NULL 和’’ 不是同一个东西。
  • 默认值
    • 设计表下方, 给出默认值
    • 默认值+ 单引号和双引号, 注意中英文。

4. 备份与恢复

  • 备份

    • 右键–>转存储SQL文件
    • 选择结构和数据
    • 保存到本地。(存储桌面test.sql)
  • 恢复

    • 创建一个空的数据库。-- 字符格式和排序规则
    • 数据库–>右键–>运行SQL文件
    • 在右侧 -->点击…–>找到保存. sql文件
    • 导入成功。
    • 查看 – 刷新表

5. SQL语言

1.创建表

1. 语法
create table 表名(

	字段1 类型 约束,
    字段2 类型 约束,
    字段3	类型 约束

)

-- 1. 创建一个学生表, 姓名name的长度是 10.
create table student(
	name varchar(10)

)

-- 2. 创建学生表, 姓名, 年龄 ,身高小数点2位
create table student2(
	name varchar(10),
	age int unsigned,
	height decimal(5,2)

)

---- 3. 创建学生表, 姓名, 年龄 ,身高小数点2位
-- 加主键 id ,自增长,

create table student3(
	id int unsigned primary key auto_increment,
	name varchar(10),
	age int unsigned,
	height decimal(5,2)

)

5.1 查询面板

1.  打开方式:
	选择数据库 -->查询-->右键-->新建查询
	
	
2. 内容
	-- sql语句
	
	-- 注释: 对sql语句的解释说明。
	-- 两个中扛加空格
	-- ctrl+/

3. SQL语句的运行

	1. 选中要运行的代码,-->右键运行 /或者点击上方运行已选择语句
	
	2. 什么都不选, 点击运行, 运行所有的SQL语句。


4.  下方给出运行的结果
## 5.2 数据库操作--删除表
```sql
-- 1. 语法
drop table 表名;
-- 若表不存在, 会报错。

-- 2. 方式2
drop table if exists drop;
-- 如果表存在, 删除, 若不存在不删除不报错。

-- 举例
drop table stduent2;
drop table if exists student2;

5.3 数据库操作–增

--1. 增加数据: 往数据库的表中插入数据 全部字段

-- 1. 语法
insert into 表名 values (字段值1 , 字段值2, 字段值3)

-- 自增长(不用填写)站位值(0 , null ,default)

练习插入小刚信息:
insert into student3 values (null, '小刚',16,178.43)


-- 2. 插入数据, 部分字段
insert into 表名(字段1, 字段2) values(字段1, 字段2)

-- 举例:
-- student 插入两条数据  姓名和年龄 
insert into student3(name, age) values('黑白', 999);
insert into student3(name, age) values('无常', 888);

6. 数据操作

6.1 增


-- 插入多条数据
1. 插入全字段多条数据
insert into 表名 values(字段1,字段2..),(字段1,字段2..)

-- 练习
-- 插入多条数据
insert into  student3 values(0,'小花5',18,160), (0,'小花6',19, 170),(0,'小花7',19, 170);

2. 插入部分字段 多条记录
insert into 表名(字段1,字段2) values(字段1,字段2),(字段1,字段2);

--练习:
-- 插入部分字段多条记录
insert into student3(name, age) values ('Lucy', 19),('Lily',18);

6.2 删

语法:
delete from 表名 where 条件

-- 删除ID为6 的学生信息
delete from student3 where id=6;

-- 删除所有的数据 
delete from dog;

6.3 改

-- 1.语法 更新数据
update 表名 set 字段=字段值, 字段2=字段值  where 字段=XX; -- 注意字段间逗号隔开

-- 练习
-- 修改学号为5 的学生, 姓名 狄仁杰  年龄 20
update student3 set name='狄仁杰', age=20 where id=5;

-- 如果没有条件 全部更新
update student3 Set height=180;

6.4 查

6.4.1 基础查询

-- 查询所有字段信息
select * from 表名

练习:
-- 查询students 所有的学生信息
select * from students;

-- 查询部分字段:
select 字段1,字段2.。。 from 表名

练习:
-- 查询学生的 姓名和年龄
select name,age from students;

-- 课堂练习
1. 查询所有学生信息
2. 查询学号 ,name,班级信息。

6.4.2 别名

1 .给字段取别名
语法: 
	select 字段1 as ‘别名1,字段2 as '别名2' from 表名
	
.  练习:
-- 给 字段取别名
	select studentno as '学号' , name as '姓名', class as '班级' from students;

2. 给表取别名
语法:
	select 别名.字段名 from 表名 as 别名
	
练习
	-- 表别名
select s.studentno from students as s;

-- 其他格式
select s.studentno from students s;

6.4.3 去重

-- 作用: 去掉重复的数据
-- 语法: 
	select distinct 字段1,字段2 from 表名
	
-- 练习
-- 查询 学生的性别信息, 去掉重复
select distinct sex from students;

-- 查询学生来源于哪些地方

-- 查询学生的班级信息,所有的班级信息

6.4.4 条件

-- 查询数据添加查询条件:
语法:
	select 字段1,字段2.. from 表名 where  条件
	
-- 练习:
select * from students where age = 20;

-- 查询所有的男同学。

比较运算

-- 语法
等于: =
小于:<
大于>
大于等于>=
小于等于<= 
不等于!= 或者 <>

-- 写SQL语句注意事项:
1. 确定操作的表。
2. 确定操作的字段
3. 编写SQL语句。。。
select 格式 :
select   字段信息   from   表名   where  条件;

逻辑运算符

概念:  条件1和条件为例
1. and : 与, 需要两个条件同事满足。
2. or  : 或, 两个条件满足一个就可以。
3. not : 取反, 当前条件以外的值。

-- 练习:
-- 查询年龄小于20的女同学
-- 年龄 性别 
select * from students where age<20 and sex='女';

-- 查询女学生或者是1班的学生; -- or
-- 性别  班级
select * from students where sex='女' or class='1班';

-- 查询非天津的学生 -- not
-- hometown
select * from students where not hometown='天津';

模糊查询

模糊查询的关键字 : like
语法:
% : 代表任意多个字符。
_: 代表一个任意字符。

练习:
-- 1. 查询姓孙的同学
select * from students;

select * from students where name like '孙%'

-- 2. 查询姓孙 且名字是一个字的学生。
select * from students where name like '孙_'

-- 3. 查询姓名以乔结尾的学生。%
select * from students where name like '%乔'

-- 4. 查询姓名包含白的学生
select * from students where name like '%白%'

范围查询

-- 语法

-- 1. in 在下面的范围内, 则返回数据。
select * fromwhere 字段 in 集合

-- 查询家乡是北上广的学生信息
select  * from students where hometown in ('上海','北京','广东')

-- 2. between and -- 在什么 到什么范围内 (包含边界值)
between1 and2

-- 查询年龄在18 到20 之间的学生信息
select * from students where age between 18 and 20;


课堂练习:

-- 查询 18 19 22 的女生
select * from students where age in (18,19,22) and sex='女';

-- 查询年龄在 20 -25 以外的学生
select * from students where age not between 20 and 25;

空判断

1. null''的区别 
	null 是空没有被赋值
	''空字符串,赋值后被清空。

语法:
	判断为空  is null
	判断不为空 is not null
	
练习:
-- 查询没有身份证的学生 。
select * from students where card is null;
-- select * from students where not card is null;


-- 查询填写了身份证的学生。
select * from students where card is not null;

6.4.5 排序

语法:
order by 字段1 参数, 字段2 参数

参数:
-- asc : 升序  -- 上面小 下面大
-- desc: 降序  -- 上面大 下面小
-- 不填写参数, 默认升序排列。

两个字段排序 , 先按照第一个字段排序, 第一个字段值相同的, 在按照第二个字段排序。

练习:

	-- 学生年龄的排序-- 升序
select * from students order by age asc;

-- 学生年龄的排序-- 降序
select * from students order by age desc;

-- 学生年龄的排序-- 默认排序方式是升序
select * from students order by age;

-- 查询学生的信息 按照年龄从大到小 排序, 年龄相同 学号从小到大排序
-- 从大到小 --降序
-- age   studentno -- 升序
select * from students order by age desc, studentno asc;

6.4.6 聚合函数

-- 语法 计数:
count(字段名 或者 *)
作用是返回结果有多少天记录。
      
select count(*) from students;

--  执行逻辑顺序:
      1. 查询表中数据。
      2. 条件判断,找出满足条件的记录
      3. 有了最终结果 -- count 从1-最后计算出有多少条。

-- 字段 NUll 没有被计数
count(card) -- 11
语法关键字:
1. 求和  sum
2. 求最大值 max
3. 求最小值 min
4. 求平均值 avg  -- 返回值是小数。

聚合函数的执行顺序:
	1. 查询的结果,进行聚合函数的计算。
	

-- 聚合函数

-- 查询女生最大的年龄
-- 最大值 max
select max(age) as '最大年龄' from students where sex='女';

-- 查询一班最小年龄
-- min
select min(age) from students where class ='1班';


-- 查询北京学生的年龄总和
-- 求和关键字 sum
select sum(age) as '年龄总和' from students where hometown='北京';


-- 查询女生的平均年龄
-- avg 平均值

Select avg(age) from students where sex='女';


-- 课堂练习
-- 1. 查询所有学生的最大年龄,最小年龄,平均年龄
select max(age) as 最大值, min(age) as 最小值 , avg(age) as 平均年龄 from students;

-- 2. 一班共有多少个学生?
select count(*) as 一班人数 from students where class='1班';

-- 3.查询3班年龄小于18岁的学有几个?
select count(*) from students where class='3班' and age<18 ;

6.4.7 分组

分组的作用:
	按照字段相同的数据, 放在一组。

语法:
group by 字段名称1, 字段2.-- 分组执行的步骤
select max(age) from students where age <20 group by class;
1. 表中找出所有的数据
2. 条件筛选 -- <20 的学生
3. 对小于20 的进行分组, 以class分组
4. 每个班级 求最大值。


-- 练习:
-- 分组 查询各个性别的人数
select sex, count(*) from students group by sex;

-- 查询每个班级中各个性别的人数。
-- 各个班级-- 以班级分组
-- 各种性别人数 -- 性别分组
select class,sex, count(*) from students group by class, sex;

-- 课堂练习:
-- 查询各个班级学生的平均年龄 最大年龄 最小年龄。
-- 以什么分组? 班级
-- 处理哪个字段? age
select avg(age), max(age), min(age) from students group by class;
-- having 分组后筛选
语法:
	having 字段条件   聚合函数条件
	
练习:
-- 查询不同班级人数大于3人的 班级信息。
select class  from students 
group by class  -- 分组成各个班级
having count(*)>3; -- 判断 班级人数。

wherehaving  区别:
1. 执行顺序不一样, where 最开始执行  having  分组后执行。
2. where 不能执行 聚合函数  having可以(已经分组了。)

6.4.8 分页

-- 查询部分行数据
limit start, count
start 从第几行开始 0;
count 查询多少行数据;

查询第6-10行数据;
-- start count
5,9

查询 11-1210,2

-- 思考 查询年龄的最大值 不用max;
select *  from students  order by age desc limit 1;

6.5 连接查询

作用:当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回

6.5.1 内连接

-- 两者表连接, 两表数据, 匹配到返回记录。

--语法
select * from1
inner join2 on1.sno =2.sno

-- 练习
-- 查询学生信息及学生成绩
-- *
select  * 
from students stu
inner join scores sco on stu.studentno = sco.studentno;


-- 内连接扩展:

select * from1, 表2
where1.字段=2.字段
-- 三表连接  A B C
-- 原理
1. A表和B表 两表连接,产生结果AB(看做一张表)
2. AB和C表连接, 产生结果ABC。

-- 三表连接 students  scores courses

-- 练习
select * 
from students st
inner join scores sc on st.studentno=sc.studentno
inner join courses co on co.courseNo=sc.courseNo;

6.5.2 左连接

--左连接:
1. 两表左连接,左边表数据全部显示
2. 匹配右边, 匹配到右表数据, 数据显示
3. 匹配不到右表的数据, 用NULL填充
-- 查询所有的学生的成绩,包括没有成绩的学生
select * 
from students st
left join scores s on st.studentno=s.studentno;

-- 查询所有学生的成绩, all,需求显示课程名
select *
from students st
left join scores s on st.studentno =s.studentno
left join courses c on c.courseNo = s.courseNo

6.5.3 右连接

-- 介绍:
以右表为基准, 右表的数据全部显示, 
匹配左表,匹配到数据左表数据显示
匹配不到数据, 左表数据用NULL填充。

-- 语法
select * 
from1
right join2 on2.字段=1.字段
-- 查询所有的学生成绩, ALL 
-- 右连接 (学生表)
select * 
from scores sc
right join students st on st.studentno = sc.studentno

-- 查询所有学生的成绩, all,需求显示课程名
-- 三表连接
-- 右表是 学生信息表, 左表-- 成绩表
-- 3课程表-- 课程名
select *
from scores sc
right join students st on st.studentno=sc.studentno
left join courses c on sc.courseNo = c.courseNo

6.5.4 自关联

-- 自关联, 将自己看做两张表, 进行表连接
-- 表名一样, 两张表要取别名
-- 其他和表连接一致。

-- 课堂练习
-- 查询河南省所有的城市
select a2.atitle
from areas a1
inner join areas a2 on a1.aid=a2.pid
where a1.atitle='河南省';

-- 查询郑州市的所有的区。
select a2.atitle
from areas a1
inner join areas a2 on a1. aid=a2.pid
where a1.atitle='郑州市';

-- 查询 河南省的所有的区县
select a3.atitle
from areas a1
inner join areas a2 on a1.aid= a2.pid
inner join areas a3 on a2.aid=a3.pid
where a1.atitle='河南省';

应用的场景

  • 当表中的数据,存在上下级关系的时候。
    省/市/县
    手机/品牌/价格区间

group by 其他:

1.  group 分组的概念

2.  group 分组和 聚合函数配合使用

3.  其他不合理的操作。

4.  group by  多个字段

6.6 子查询

6.6.1 子查询充当条件

概念: 
	应用到select语句的嵌 -- 子查询
	
	外层select -- 主查询
	里面select -- 子查询
	
---- 1. 查询比平均年龄大的学生
select * 
from students
where age >(
		select avg(age) from students
	)


-- 2. 查询王昭君的成绩 要求,显示成绩。
select * from scores
where studentno =(
	select studentno from students
	where name='王昭君'
);

-- 3. 查询18岁的学生的成绩,要求显示成绩
select * 
from scores
where studentno in (
	select studentno from students
	where age=18

);
-- 多字段子查询
--格式:
select * from 表名 
where (字段1,字段2,字段3...) = (
	select xx,xx,xx from 表名

)

-- 查询王昭君 同班 同龄的学生信息。
select * from students where (class,age) = (
	select class,age from students
	where name='王昭君'
	
)

6.6.2 子查询充当数据源

说明:
	select语句查询的结果,  把它当做一个表, 取一个别名
	和另外表连接。
	-- 数据源

-- 查询 数据库 和系统测试的课程成绩
select *
from courses c
inner join scores s on c.courseno=s.courseno
where c.name in ('数据库', '系统测试')

-- 查询数据库 和系统测试的课程信息
select * from courses where name in('数据库', '系统测试');

-- 课程信息结果作为一个表 c
select  * from scores s
inner join (select * from courses where name in('数据库', '系统测试')) c
on s.courseno = c.courseno;

6.6.3 子查询中特定关键字使用

-- in -- 介绍: 在返回结果范围内。
	in :
		e.g: in (18,19,20) 等于范围内任意一个值就可以
		
-- any/some
	1.  =any
		=some -- 相当于in  在范围内。
		
	2. any/some  >或者 <
		-- 大于: 大于范围内任意一个就可以
		e.g  >some(18,19,20) -- 大于18
		
		
--  all -- 全部
		-- 大于: 需要大于 范围内全部的值。
		e.g: > (18,19,20) --大于20

你可能感兴趣的:(mysql,软件测试)