一.数据的介绍
1.什么是数据库
数据存储的仓库
2.特点
1.长期存储数据
2.对于数据进行有组织的管理
体现:通过操作指定的语言完成数据的增、删、改、查
3.数据库的分类
关系型数据库:以二维表的形式进行数据的存储
解释(二维表):类似Excel,有行和列
常见关系型数据库:Oracle,MySql,Sql Server,SQLite
Oracle:主要用于大型项目(银行)
MySql:主要用于中小型项目(目前应用软件最常用的数据库)
4.非关系型数据库
redis:键值对
MangoDB:文档
Hbase:(大数据存储)一个结构化数据的分布式存储系统
5.关系型的数据库核心要素
1.新建一个数据库
2.库中新建数据表
3.表中定义数据列(字段)
4.写入(插入)一行一行的数据
二.MYSQL介绍
MySQL:关系型数据库。分为社区版和商业版,社区版免费
特点:支持多系统、开源、免费
1.SQL介绍
-
SQL语句:(结构化查询语言)使用SQL语句对数据库进行操作
-
对于数据库的操作(主要):
- 数据查询:查询语句
- 数据更改:新增、修改、删除语句
-
关键字
- 查询语句--select;新增语句--insert;修改语句--update;删除语句--delete
2.工具连接
使用工具:DBeaver
原因:开源免费
作用:拥有可视化界面,让我们操作数据库以及结果的展示更加的直观
必填内容:服务器ip地址,MySQL的端口号,MySQL的用户名和密码
3.数据的约束
*默认值:当不填写此值时会使用默认值,如果填写时以填写为准
*非空:此字不允许填写空值
说明1:(null)数据为空
说明2:看起来字段为空,其实是空字符串
*主键:提高数据查询速度
特点:
1.唯一性:主键值必须是唯一的,不能重复
2.非空性:主键不能为空
3.不变性:主键使用了,不可更改
4.单一性:一张数据表,仅能设置一个主键
*唯一性: 此字段的值不允许重复
特点:一个表中可以设置多个字段值具有唯一性
*外键:维护两个表之间的依赖关系
三.数据库表操作
1.创建表
格式:create table 表名(
id int unsigned primary key auto_increment,
字段名称1 数据类型1,
字段名称2 数据类型2,
字段名称3 数据类型3
);
数据增加
格式:
方式一:全字段添加
insert into 表名 values(…);
方式二:选择字段添加
insert into 表名 (字段1, 字段2, …) values(值1, 值2, …);
2.删除数据库表
语法格式:
方法一: drop table 表名
方法二: drop table if exists 表名
三种删除数据的区别
delete
1.delete可以通过where子句删除部分记录。
2、delete删除所有数据时,自增长字段不会从1开始
truncate
1.truncate删除数据时,表结构会保留,自增长字段
2.从1开始。执行效率低于drop命令
drop
1.如果想删除表,建议使用drop,且删除数据效率最高
3.修改数据
语法格式:
update 表名 set 字段名1=值1,字段名2=值2... where 条件
4.简单查询
语法格式:
select * from 表名;
四.数据查询操作--单表查询
1.查询基本语法
#查询部分字段数据:
select 字段1,字段2,... from 表名
#起别名:
select 别名.字段1,别名.字段2,... from 表名 as 别名
select 字段1 as 别名1,字段2 as 别名2,... from 表名
#去重:
select distinct 字段1,... from 表名
2.条件查询-语法格式
条件查询是根据一定的条件去查询数据的结果。
语法格式:
select 字段1,字段2... from 表名 where 条件;
3.条件查询-比较运算符
等于:=
大于:>
小于:<
大于等于:>=
小于等于:<=
不等于:!=或<>
#语法格式:表名 where 查询的字段名称 比较运算符 预期数据
#编写SQL语句思路
- 找出最终需要展示的字段有哪些
- 找出查询字段(条件字段)
- 使用哪一种运算符
- 找出预期数据
4.条件查询-逻辑运算符
and:多个条件必选都满足
or:多个条件仅满足一个即可
not:取反---不等于
#编写SQL语句思路
- 分析使用查询条件
- 选择使用的逻辑运算符
5.条件查询-模糊查询
1.关键字: like
2.% :匹配任意多个字符
3 _ :匹配一个任意字符
#语法格式:where 字段 like 匹配条件
编写SQL语句思路
1.分析模糊匹配符放置位置(前面,后面,前面+后面)
放置--前面:以XXX结尾(查询手机号,以1009结尾)
前置--后面:以XXX开头(查询手机号,以138开头)
前面+后面:匹配包含(查询手机号,包含123)
2.分析使用哪一个符号
6.条件查询-范围查询
1.in表示在一个非连续的范围内
2.between ... and ...表示在一个连续的范围内
编写SQL语句思路
1.分析需要进行范围查询的字段
2.分析查询的范围是否连续
3.根据是否连续,确认使用in 还是between...and...
7.条件查询-空判断
注意:Mysql中空表示null,与 ‘’ (空)是不一样的
判断为空: is null
判断非空: is not null
8.条件查询-排序
语法格式:
select * from 表名 order by 字段名1 asc|desc, 字段名2 asc|desc,...
编写SQL语句思路
1.分析需要排序的字段
-
确认每一个排序字段的方式以及使用关键字
- 从小到大---使用
asc - 从大到小---使用
desc - 如果多个字段要排序,使用
,进行分隔
- 从小到大---使用
9.条件查询-聚合函数
1.使用聚合函数方便进行数据统计
2.聚合函数不能作为 where 条件
关键字
1.count():查询总记录数
2.max(字段名):查询最大值
3.min(字段名):查询最小值
4.sum(字段名):求和
5.avg(字段名):求平均数
编写SQL语句思路
1.分析需要被聚合函数处理的字段
注意:如果没有指明处理哪一个字段,那就是全部,使用*
2.分析使用的聚合函数
特别说明:一个SQL语句,可以使用多个聚合函数,使用,分隔即可
10.条件查询-分组查询
#按照字段分组,此字段相同的数据会被放到一个组中
#分组的目的是对每一组的数据进行统计(使用聚合函数)
语法格式:
select 字段1,字段2,聚合函数... from 表名 group by 字段1,字段2...
分组后的筛选
语法格式:
select 字段1,字段2,聚合... from 表名 group by 字段1,字段2,字段3...having 条件
说明: 关键字having后面的条件运算符与where的相同
having与where对比
1.where 是对 from 后面指定的表进行数据筛选,属于对原始数据的筛选。
2.having 是对 group by 的结果进行筛选。
3.having 后面的条件中可以用聚合函数,where后面不可以。
11.条件查询-分页-获取部分数据
#使用场景: 用来获取一部分的数据或者用来分页
#语法格式:
select * from 表名 limit start,count
说明:
1.从start开始,获取count条数据
2.start索引从0开始
例:查询前3行学生信息
select * from students limit 0,3;
select * from students limit 3;
五.数据查询操作--连表查询
1.连接查询-常用方式
1.内连接:结果为两个表匹配到的数据
2.左连接:结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使用null 填充
3.右连接:结果为两个表匹配到的数据加右表特有的数据,对于左表中不存在的数据使用null 填充
连接查询-内连接
语法格式:
连接查询-内连接
select * from 表1
inner join 表2 on 表1.列=表2.列
#另一种写法:
select * from 表1,表2 where 表1.列=表2.列
连接查询-左连接
语法格式:
select * from 表1
left join 表2 on 表1.列=表2.列
连接查询-右连接
语法格式:
select * from 表1
right join 表2 on 表1.列=表2.列
2.连接查询-自关联
1.自关联:inner join 关联同一个表,不同的字段。
2.自关联要用别名
使用场景:当表存在等级关系时,查询其中数据需要使用自关联
比如:省,市,县
比如:总经理,部门主管,组长,组员
#自关联思路:
把一张表当成多张表来使用
说明:将表定义为不同的别名
A表的字段与B表的字段进行关联
强调:一定是表中不同的字段
3.连接查询-子查询
- 前置介绍:涉及到了表之间的关联,可以使用表连接,也可以使用子查询
1.嵌入在其他查询语句中的select语句称为子查询其他的查询语句称之为主查询。
2.子查询辅助主查询,要么充当条件,要么充当数据源。
3.子查询是一条完整的、可单独执行的select查询语句
强调:如果能用表连接,绝对不用子查询。因为子查询SQL语句执行效率很低
- 子查询,充当条件分类
标量子查询:一行一列
- 最简单的子查询
列子查询:一列多行
行子查询:一行,多列
1.子查询-充当条件
1.标量子查询
例: 查询王昭君的成绩,要求显示成绩
select * from scores where studentno = (select studentNo from students where name = '王昭君');
2.列子查询
例: 查询18岁的学生的成绩,要求显示成绩
select * from scores where studentno in (select studentNo from students where age = 18);
3.行子查询
例: 查询和王昭君同班且同龄的学生信息
select * from students where (age,class) = (select age,class from students where name = '王昭君');
2.子查询-充当数据源
例: 查询数据库和系统测试的课程成绩
Select * from scores s inner join (select * from courses where name in ('数据库','系统测试')) c on s.courseNo = c.courseNo