MySQL进阶


一、数据库约束

约束类型

NOT NULL:指示某列不能存储NULL值
UNIQUE:保证某列的每行必须有唯一的值(唯一约束)
DEFAULT:规定没有给列赋值时的默认值(默认值约束)
PRIMARY KEY:NOT NULL和UNIQUE的结合(主键约束)
FOREIGN KEY:保证一个表中的数据匹配另一个表中的值的参照完整性(外键约束)
CHECK:保证列中的值符合指定条件

约束存在的目的是为了让数据更加可靠,数据库做了一些检验,在实际试用数据库时,还需要在应用程序上做出检验,两重校验,可以带来更好的可靠性

二、表的设计

三大范式:一对一、一对多、多对多

设计数据库的思路:
1.找到需求中的实体(Java中的面向对象)
2.实体之间的关系(一对一,一对多,多对多,没关系)

多对多表设计时,需要引入一张中间表(用Id表示)
Id可以保证不重复,保存和比较操作开销都比字符串低

三、新增

把一个表的返回结果插入另一张表

insert into 表名 [待插表列名] select 待查表列名 from 待查表名;

四、查询

1.聚合查询

1.1聚合函数

count 返回查询到的数据的数量
sum 返回查询到的数据的总和
avg 返回查询到的数据的平均值
max 返回查询到的数据的最大值
min 返回查询到的数据的最小值

select count(列名) from 表名;

1.2分组查询group by

select可以使用group by子句对指定列进行分组查询,需满足使用group by进行分组查询时,select指定的字段必须是“分组依据字段”,其它字段若想出现在select中则必须包含在聚合函数中

select 查询列 from 表名 group by 列名;
--如果需要加上where条件。需加在group by 前面,这个天健针对于分组查询前的筛选

1.3having

group by子句进行分组以后,需对分组结果再进行条件过滤时,不能使用where,而需要使用having

select 查询列 from 表名 group by 列名 having 条件;

2.联合查询(多表查询)

笛卡尔积:针对两张表,会得到一张新表,列数为两表列数之和,行数为两表行数之和
2,1内连接

select.from1 别名1 join2 别名2 on 连接条件 and 其他条件;
select.from1 别名1,2 别名2 where 连接条件 and 其他条件;

注: 1.先找出要查找的信息在哪个表
2.针对这些表进行笛卡尔积
3.找到连接条件
4.加上其他条件,最终结果符合要求

2.2外连接
a.左连接
join前的表在左,保证左表的数据都能够被记录,若右表不存在,其他列为null
b.右连接
join后的表在左,保证右表的数据都能够被记录,若左表不存在,其他列为null

--左外连接,表1完全显示
select 字段 from1 left join2 on 连接条件;
--右外连接
select 字段 from1 right join2 on 连接条件;

2.3自连接

自连接是指同一张表连接自身进行查询(自己与自己进行笛卡尔积)

select 字段 from1,表1 where 条件;
select 字段 from1 join1 on 条件;

2.4子查询

子查询是指嵌入其他sql语句中的select语句,也叫嵌套查询
a.单行子查询:返回一行子记录的子查询
b.多行子查询:返回多行记录的子查询

select 字段 from1 where 字段1 = (select ... from ...);
--in关键字
select ... from1 where 字段1 in (select... from ...);
--exists关键字
select ... from1 where exists (select ... from ... where 条件);
--临时表
select ... from1 (select ... from ...)as tmp where 条件

2.5合并查询

为了合并多个select的执行结果,可以使用集合操作符union,union all,使用union和union all时,前后查询的结果集中,字段需求一致

--union去除重复数据
select ... from ... where 条件 union select .. from ... where 条件;

五、sql查询中各关键字的执行先后顺序

from > on > join > where > group by > with > having > select > distinct > order by > limit
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心事付流年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值