MySQL数据库基础

 

目录

 数据库约束

null 

unique

default

 primary key

外键约束

聚合查询

聚合函数

group by 

联合查询

理解笛卡尔积

内连接

外连接

自连接

子查询

 合并查询


目标:

1. 数据库约束

2. 聚合查询

3. 联合查询


 数据库约束

对数据库中的数据来说,有的是合法的,有的是非法的,我们为了使数据库中的数据为合法的进而引入了 “约束 ”。

约束类型 说明
null 值不能为空
unique 值不能重复
default 没有赋值时的默认值
primary key 使某列有位移标识
外键约束 使一个表与另一个表匹配完整

null 

使插入的值不能为空,为空的话,就不能插入。

unique

不能插入原来已有的值

MySQL数据库基础_第1张图片

 注意:

unique 约束会让后续插入数据 / 修改数据 的时候,都先进行一次 查询 操作。

default

没有赋值时的默认值(默认情况下为空)

MySQL数据库基础_第2张图片

 primary key

1. 一个表中只能有一个primary key

2. 设置为priamry的列,具有唯一性,并且不能为空 

MySQL数据库基础_第3张图片

3. 带有主键的表 / 列,每次插入也都进行查询(影响不大,通过索引查)

 如何保证主键唯一 ???

mysql 提供了 " 自增主键" ,主键一般为 int / bigint 的类型,在插入数据的时候,不必手动指定主键值,由服务器自动分配(从 1 开始递增),当然也可以自己插入,但是插入的值必须比上一个值大(系统插入的时候会按照当前最大值进行分配)。

外键约束

foreign key (当前表中被约束的列) references class (根据这个列约束);

1. 使两个表存在关系

2. 子表中的数据在对应的父表的列中要存在

3. 想删除父表的的时候,先删除子表

3. 父表中必须有主键(primary kay)


聚合查询

聚合函数

表达式查询是针对 列 和 列 之间的进行运算的,聚合查询相当于 行 和 行 之间的查询。因此 sql 中提供了 聚合函数。

1. count(...) 查询出来结果集的行数(“...” 为 “ * ” 的时候null也能算入)

2. sum(...) 把这一列的行求和(自动把null排除)

3. avg(...) 求平均值

4.max(...) 求最大值 min(求最小值)

eg:

select count(*) from 表名;

select sum / avg / max (列名) from 表名;

group by 

select 列名, 聚合函数 from 表名 group by 列名;

把相同列的分为一组,如果不使用聚合函数的话,数据可能可以会产生不想要的结果。。。

group by 可以搭配条件 :

1. where 一般写在前面,先执行where,再执行group by,最后执行聚合。

2. having 一般写在后面,先执行group by 再执行聚合,最后执行having。


联合查询

理解笛卡尔积

在sql中,笛卡尔积的应用用于两个表求笛卡尔积,求后成为一个表。

假如有两个表,表1(2行,2列),表2(3行,3列)

求完笛卡尔积是将第一个表中的行和第二个表中的每一行进行结合,最终形成一个 6 行,5 列的表

MySQL数据库基础_第4张图片

内连接

select 列名, 列名... from 表1, 表2 where 条件 gruop by 列;

select 列名, 列名... from 表1 (inner)join 表2 on 条件;

1. 先将两个表进行笛卡尔积

select * from 表1, 表2;

2. 加上连接条件,筛选出有效数据

select * from 表1, 表2 where ... ;

3. 针对列进行精简

select 列名, 列名... from 表1, 表2 where ... ;

4. 针对上述结果进行聚合查询

select 列名, 列名... from 表1, 表2 where ... gruop by 列;

外连接

左外连接:select 列名, 列名... from 表1 left join 表2 on 条件;

右外连接:select 列名, 列名... from 表1 right join 表2 on 条件;

左外连接:以左侧表为基准,保证左侧表的数据都存在,如果对应列右侧不存在,填为空

右外连接:以右侧表为基准,保证右侧表的数据都存在,如果对应列左侧不存在,填为空

自连接

select 列名, 列名... from 表1,表1 where 条件;

sql中一张表只能进行列和列的比较,但是同一个表进行笛卡尔积就能将行的关系转换为列的关系。

子查询

select ... from 表1 where 字段 = (select ... from ...);

select ... from 表1 where 字段1 in (select ... from ...);

select ... from 表1 where exists (select ... from ... where 条件);

select ... from 表1, (select ... from ...) as tmp where 条件;

 合并查询

-- UNION:去除重复数据

select ... from ... where 条件 union select ... from ... where 条件

-- UNION ALL:不去重

select ... from ... where 条件 union all select ... from ... where 条件

你可能感兴趣的:(MySQL,mysql,数据库)