一、概念
1.存储数据的仓库。
比如:用户信息、商品信息、订单信息、购物信息。
2.将数据按照指定的结构,存储在计算机的硬盘上。
硬盘:永久存储。
二、数据模型
1.网状模型
2.层次模型
3.关系模型:将数据以二维表格的形式来存储。
三、数据库操作
1.登录mysql DBMS
mysql [-h主机:端口号] -u用户名 -p密码
2.查看管理的所有数据库
show databases;
3.创建新数据库
create database 数据库名;
4.删除数据库
drop database 数据库名;
5.选择数据库(选择或切换管理的数据库)
use 数据库名;
四、 表操作
1.数据类型
(1)数字型
int 整数型
double 双精度浮点数
decimal 浮点型,可以指定精度
(2)字符串型
CHAR(n)固定长度字符串
VARCHAR(n)可别长度字符串
TEXT 大文本
BLOB 二进制文件内容
注意:字符串类型的数据,必须加单引号
(3)日期时间类型
DATE 存储日期:年月日
TIME 存储时间: 时分秒
YEAR 存储年份
DATETIME 存储日期时间:年月日时分秒
TIMESTAMP 存储时间戳
2.表的创建
create table 表名(
列名1 数据类型 [列级约束],
...
列名n 数据类型 [列级约束],
) ;
3.查询表
show tables;
4.查看表结构
desc 表名;
5. 删除表
drop table 表名;
6.修改表结构
alter table 表名 修改操作;
五、数据操作(CRUD)
1.新增数据
(1)插入一行所有列的数据
insert into 表名 values (一行所有列的数据);
(2)插入一行部分列的数据
insert into 表名 (部分列) values(一行部分列数据)
注意:
没有插入数据的列,系统自动插入缺省值null
(2)插入多列数据
insert into 表名 values(...),
(...) ,
...
(...);
2.查询数据
select * from 表名;
3.删除数据
(1)delete 删除
delete from 表名 [where 条件];
如果没有条件,表示清空表,删除所有行的数据。
如果有条件,删除满足条件的行。
(2)truncate 删除
truncate table 表名;
清空表数据。
区别:
truncate 清空表,同时会删除索引。
delete 可以清空表,也可以删除部分记录,不会删除索引。
4.修改数据
update 表名 set 字段名=新的值,....... [where 条件];
如果没有条件,修改所有行。
如果有条件,修改满足条件的行。
六、单表查询
1.from 子句
select * from 表名;
select * from 表名1,表名2 ...
2.where 子句
(1)使用比较运算符 = != > >= < <=
(2)多条件使用and 和 or 连接
(3)连续范围:
列名 between .. and ..
列名 not between .. and ..
(4)不连续范围:
列名 in(情况1,情况2.....)
列名 not in(情况1,情况2.....)
(5)模糊匹配:
like
not like
%表示:匹配0到多个字符
_表示:一个字符
(6)null判断:
null值,表示未知的值。
null和任何值都不相等,包括null。
使用:
列名 is null
列名 is not null
3.select 子句
筛选列。
*代表所有列。
也可以只选择部分列。
select * from 表名;
select 所有列名 from 表名
select 部分部分列名 from 表名
distinct作用:将结果集中重复的行合并为一条。
4.order by 子句
对查询结果进行排序。
排序有两种方向:默认升序,asc;降序,desc。
语法:order by 字段名 方向
5.limit 子句
从结果集中取出一部分数据。
语法:limit 结果集中的起始位置,长度
limit主要用于分页查询。
假如pageSie=2每页最多显示两条,共5页。
pageNum=1..5
每一页的起始位置start=(pageNum-1)*pageSize
最后,通过limit start,pageSize取出指定这一页的数据。
6.group by 分组查询
(1)分组查询查,是查询到的是表中数据的统计信息。
统计:使用聚合函数。
count(列名)统计每组的数量。
sum(列名)统计每组该列总和。
avg(列名)统计每组该列的平均值。
max(列名)统计每组该列的最大值。
min(列名)统计每组该列的最小值。
(2)别名
可以给结果集中的列起别名,也可以给表名起别名。
表:是物理硬盘中的一个存储空间。永久存储。
结果集:是物理内存中的一个存储空间。临时存储。
(3)筛选满足条件的组
having 条件;
where和having区别:
where是分组之前,选择的是表中的行;
having是分组之后,选择满足条件的组。
七、查询执行顺序
1.书写语法顺序
select [distinct] *|列名
from 表名 ...
where 条件
group by 分组字段..
having 条件
order by 排序字段,排序方向
limit 起始位置,长度;
2.查询执行顺序
from
where
group by
select [distinct]
[having]
order by
limit
八、多表查询
1.笛卡尔积
我们查询两张表。
查询结果是:依次拿a表的每一行和b的所有行进行数据的拼接。
2.多表查询的本质
本质:其实就是单表查询,把笛卡尔积作为我们查询的目标。
查询两张表,和查询笛卡尔积是一样的。
笛卡尔积中的列,是两张表的列的总和。
笛卡尔中的行数,就是两张表的行数相乘。
3.多表查询
(1)内连接查询
从笛卡尔积中,查询满足连接条件的数据行。
写法1:
select * from 表1 , 表2 where 连接条件;
写法2:
select * from 表1 inner join 表2 on 连接条件;
(2)外连接查询
从笛卡尔积中,查询满足连接条件的数据行。
以及,两张表中不满足的行。
外连接分为:outer join
左外连接left join:从笛卡尔积中,查询满足连接条件的数据行。以及,左表中不满足条件的行。
右外连接right join:从笛卡尔积中,查询满足连接条件的数据行。以及,右表中不满足条件的行。