数据库是什么
- 定义:用于存储数据的软件
- 特点:表是数据存储的核心体现
数据库常见分类
- 关系型数据库
- RDMS:关系型数据库系统
- 特征:以数据表的形式存储数据,便于数据查询
- 常见的数据库代表:
- Oracle:在大型项目中使用,例如:银行,电信等项目
- MySql:web项目中使用最广泛的关系型数据库
- Microsoft SQL Server:在微软的项目中使用
- SQLite:轻量级数据库,主要应用在移动平台
- 关系型数据库的核心要素:
- 数据行(一条记录)
- 数据列(字段)
- 数据表(数据行的集合)
- 数据库(数据表的集合,一个数据库中能够有n多个数据表)
- 非关系型数据库
SQL介绍
- SQL:结构化查询语言,通过SQL语言可以对数据库进行操作。所有主流的关系型数据库都支持使用SQL语句进行数据查询
- DQL:数据查询语言,用于对数据进行查询
MYSQL介绍
- 目前属于Oracle旗下产品,目前只有社区版免费
- 特点:开源、支持多平台多语言
- 注意:熟悉SQL和熟悉MySQL不是一回事儿。熟悉SQL:熟悉SQL语言;熟悉MySQL:用过MySQL数据库
数据库的远程连接
- 实际工作中,数据库是安装在服务器中的,如果要直连数据库进行数据校验,就必须远程连接
- 连接步骤:
- 获取两个信息:服务器的IP地址;数据库的账号和密码
- 电脑上使用数据库连接工具(如Navicat)建立连接,远程连接数据库
- 连接过程中确认自己的电脑和服务器是否能够通信(ping命令)
数据类型和约束
- 数据类型:
- 整数:int,有符号范围(-2147483648—2147483647),无符号范围(0—4294967295)
- 小数:decimal,例如:decimal(5,2),表示共存5位数,小数占2位,整数占3位
- 字符串:varchar,范围(0—65533),例如varchar(3)表示最多存3个字符,一个中文或一个字母都占一个字符
- 日期时间:datetime,范围(1000-01-01 00:00:00——9999-12-31 23:59:59),例如’2020-01-01 12:29:59’
- 约束
- 主键(primary key):物理上存储的顺序
- 非空(not null):此字段不允许填写空值
- 唯一(unique):此字段的值不允许重复
- 默认值(default):当不填写此值时会使用默认值,如果填写时以填写的为准
- 外键(foreign key):维护两个表之间的关联关系
SQL语言
非查询语句
create table 表名(
字段1 类型,
字段2 类型,
)
drop table exists 表名;
create table 表名(
字段1 类型,
字段2 类型,
);
create database 数据库名;
drop table if exists goods;
create table goods(
id int unsigned primary key auto_increment,
goodsName varchar(20),
num int,
company varchar(20),
remark varchar(30)
);
insert into 表名 values (字段对应值);
update 表名 set 字段名=values where 限定条件
select * from 表名;
delete from 表名 where 条件
- 3种删除数据方法
- delete from 表名:清空表数据(只清空数据,保留结构),但不会重置主键计数
- truncate table 表名:清空表数据(只清空数据,保留结构),并会重置主键计数
- drop table 表名:删除表,包括表结构和数据
- 删除速度:drop>truncate>delete
查询语句
基本查询
- 查询所有:
select * from 表名;
- 查询指定字段:
select 字段名1,字段名2.。。 from 表名;
- 起别名:
select 字段名1 as 别名1,字段名2 as 别名2 from 表名;
- 去重:
select distinct(字段名) from 表名;
条件查询
- 比较运算符:
select * from 表名 where 字段名=values;
- 逻辑运算符:
select *from 表名 字段名=values and 字段名=values;
and并列条件
模糊查询
- 字符:%匹配任意的多个字符
- 语句格式:
where 字段 like '%信息'
select * from goods where remark like '%一次性口罩';
以一次性口罩结尾,前面内容不限制select * from goods where remark like '%一次性口罩%';
提取内容中包含一次性口罩的信息数据- 匹配单个任意字符:
_
select * from goods where company like '_宝';
范围查询
- 条件-范围查询:
between 起始值 and 结束值
,表示一个连续的范围,范围应该从小到大
select * from goods where price between 30 and 100;
in
:in(条件1,条件2,…),表示在某个不连续的范围内
select * from goods where company in ('某东','x宝');
空判断
- 判断空:
is null
- 注意:
null
与''
不是一码事;null是空;''
是空字符
排序
order by 字段名 asc(升序)/desc(降序)
,默认情况下以升序排列
聚合函数
- 数据总数:
count()
;select count(字段名) from 表名
- 最大值:
max()
;select max(price) from goods;
- 最小值:
min()
- 平均值:
avg()
- 求和:
sum()
分组
- 分组:
group by 字段
,可以根据给出的字段数据进行数据分组 - 一般情况下,分组要配合聚合函数一起使用,目的是对分组后的数据进行进一步统计
select 字段名 别名,count(*) from 表名 group by 字段名;
- 若分组后想再次进行条件筛选可使用having关键字
select company 公司名称,max(price) from goods group by company having company != '并夕夕';
分页查询
- 分页查询:
limit 数据索引,数据行数
,索引从0开始 - 如果获取当前数据的第一行数据起始索引可以省略
select * from goods limit 1;
- 分页查询公式的使用:
- 条件:每页显示m条数据,求:显示第n页的数据
- 公式:(n-1)*m,m:查看指定页面数据
- 假设:当前数据中,每页显示3条件数据,查看第二页数据内容
- select * from goods limit 3,3;
连接查询
内连接
- 内连接:显示两张表中存在对应关系的数据,无对应关系的数据不显示
- 语法:
select * from 表1 inner join 表2 on 表1.字段=表2.字段;
左连接
- 左连接:以left join关键为界,关键字左侧的表的信息要全部显示出来,而关键字右侧表的信息,有对应的部分显示,无对应的部分以null占位填充即可
- 语法:
select * from 表1 left join 表2 on 表1.字段=表2.字段;
右链接
- 右连接:以right join关键为界,关键字左侧的表的信息要全部显示出来,而关键字右侧表的信息,有对应的部分显示,无对应的部分以null占位填充即可
- 主要解决三张表及以上进行连接查询时常见
- 语法:
select * from 表1 right join 表2 on 表1.字段=表2.字段;
自关联
- 自关联:通过起别名的方式将一张表变成俩表;通过
表1.字段=表2.字段
实现表间关联 select *from 表1 别名1 inner join 表1 别名2 on 别名1.字段1=别名2.字段2;
子查询-充当条件
- 定义:在一条查询语句中,利用另一条语句作为条件或数据源,充当条件或数据源的语句称为子查询语句
- 注意:子查询语句在使用时,务必使用括号括起来
- 子查询充当条件
select * from 表名 where 字段 > (select avg(字段) from 表名);
- 子查询关键字
- in:范围
- select * from 表名 where 字段 in (25,3,58,42);
- select * from 表名 where 字段 in (select 字段 from 表名 where 字段 between 25 and 100);
- some/any:任一个
- select * from 表名 where 字段 =some(select 字段 from 表名 where 字段 between 25 and 100);
- all:全部,等于所有
- select * from 表名 where 字段=all (select 字段 from 表名 where 字段 between 25 and 100);
- !=或<>all:不等于所有
- select * from 表名 where 字段!=all (select 字段 from 表名 where 字段 between 25 and 100);