文章目录
学习相关内容
通过这篇博客,我们将了解关于Mysql数据库的约束和一些高级查询,一些相关的函数表达式.
一、什么是数据库约束
关于数据库约束是用来确保数据满足业务规则的手段,防止无效的数据进入到表中,以保护数据的实体完整性。
1.约束的六大分类
1.NOT NULL (非空约束)指某列不能为空
2.UNIQUE (唯一约束)保证某列的值必须唯
3.DEFAULT (默认值约束)规定没有给列赋值时的默认值
4.PRIMARY KEY (主键约束)是NOT NULL 和UNIQUE的结合,用来确保某一列有唯一标识,可以没有,但至多一个
5.FOREIGN KEY (外键约束)外键约束经常和主键约束一起使用,用来确保数据的一致性,用于限制两个表的关系
6.CHECK (检查约束)用来检查数据表中,字段值是否有效
2.约束归类
主要归类为列级约束和表级约束
列级约束:NOT NULL | DEFAULT | PRIMARY KEY | UNIQUE | CHECK
表级约束:PRIMARY KEY | UNIQUE | CHECK | FOREIGN KEY
实例
列约束:在字段名和类型后面追加约束类型即可
表约束:在各个列字段的最下面
CREATE TABLE 表名(
字段名 字段类型 列级约束,
字段名 字段类型,
表级约束
)
二、聚合查询
1.聚合函数
AVG() - 返回集合的平均值
COUNT() - 返回集合中的项目数
MAX() - 返回集合中的最大值
MIN() - 返回集合中的最小值
SUM() - 返回集合中所有或不同值的总和
部分函数举例(当用到count函数时,数据为NULL不会计入结果)
查询班级个数(可以使用去重(distinct))
2.Group By
SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。需要满足:使用 GROUP BY 进行分组查询时,SELECT 指定的字段必须是“分组依据字段”,其他字段若想出现在SELECT 中则必须包含在聚合函数中。
例如查询每个班级有多少个学生(先使用group by 根据班级分组)
3.Having
GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,(重点)不能使用 WHERE 语句,而需要用HAVING
原表
我们的目的是统计各班人数,但是要排除班级人数大于等于3的(即要求拿到人数少于3的班级)(必须是查询结果中的存在的值用来做条件)
三、联合查询(多表查询)
1.内连接
比如我们要查询许仙同学的成绩(分为两个表,一个是学生表,一个是成绩表)(有两种)
1.select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件
2.select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;
2.外连接
外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完全显示我们就说是右外连接。
– 左外连接,表1完全显示 select 字段名 from 表名1 left join 表名2 on 连接条件;
– 右外连接,表2完全显示 select 字段 from 表名1 right join 表名2 on 连接条件;
比如下面的查询(""老外学中文"同学并没有成绩表,可是如果学生表完全显示,也会打印这个学生)
左连接
右连接(分数表完全显示),所以没了"老外学中文这个同学"
3.自连接
同一张表连接自己查询
显示所有计算机原理比java成绩高的成绩信息(首先拿到这两学科id)
4.子查询
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询
1.单行子查询
查询与"许仙"同学的同班同学
2.多行子查询
查询语文或者java课程的成绩信息
5.合并查询
在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。使用UNION
和UNION ALL时,前后查询的结果集中,字段需要一致。
union 该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行
union all 该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。
6.一点小补充
1.去重:DISTINCT
2.排序:ORDER BY
3.模糊匹配: LIKE
4. 范围查询: BETWEEN …AND…
5. 分页查询: LIMIT n OFFSET s
6. 别名: AS
总结
通过写这篇博客,对一些复杂查询有了更深刻的了解,对以前的知识有了不同的理解