1、主码与外码
**主键(Primary Key):用于唯一标识表中每一行数据的列或一组列。主键必须具有唯一性和非空性。主键的作用是确保数据的唯一性和快速访问,它在表中起到索引的作用。一个表只能有一个主键,且主键值在整个表中必须是唯一的。
**外键(Foreign Key):是一个表中的列,它建立了与另一个表的关系。外键用于在不同表之间建立引用关系,通过外键可以实现表与表之间的关联。外键值必须是在另一个表的主键中存在的值,或者为空(NULL)。外键用于保持表之间的数据完整性和一致性。
2、笛卡尔积
笛卡尔积(Cartesian Product)是关系型数据库中的一个概念,指的是将两个或多个表中的所有行组合在一起,生成一个新的结果集。
在笛卡尔积中,每个表中的每一行与其他表中的每一行进行组合,生成的结果包含了所有可能的组合。结果集的行数等于参与组合的表的行数的乘积。
假设有两个表A和B,表A有m行,表B有n行,那么它们的笛卡尔积将生成一个包含 m x n 行的结果集。
3、聚集函数
聚集函数(Aggregate Functions)是在关系型数据库中使用的函数,用于对一组数据进行聚合计算,返回单个值作为结果。
聚集函数可以对一列或多列的数据进行操作,并生成汇总结果。它们通常与 SELECT 语句中的 GROUP BY 子句一起使用,以便按照特定的分组方式计算汇总值。
常见的count、sum、avg、max、min。
4、聚集函数相关注意事项
聚集函数可以作为子查询但是不能作为筛选条件
在嵌套查询中,内部查询的结果可以作为子查询的一部分,并在外部查询中进行进一步的处理。这包括将聚合函数的结果作为子查询的一列进行展示、排序或用于其他计算。聚合函数的结果不能直接用于外部查询的筛选条件。
因为在执行查询时,筛选条件是逐行计算的,而聚合函数是对一组行进行计算的。在执行筛选条件时,尚未形成分组,因此不能直接使用聚合函数。
5、in和exists:
in:用于判断一个值是否在一个子查询返回的结果集中。它将主查询中的列与子查询的结果进行比较,并返回符合条件的结果。如果子查询返回的结果中包含主查询中的列的值,那么条件被认为是满足的。
select c1,c2
from table1
where c1 in (select c1 from table2)
IN 运算符适用于需要对一个确定的列值集合进行判断的情况,它可以直接将主查询中的列与子查询的结果集进行比较。
exists:用于判断子查询是否返回了至少一行数据。它只关心子查询的结果是否为空,而不关心具体返回的数据是什么。EXISTS 子查询在主查询的 WHERE 子句中使用,用于筛选满足特定条件的行。
select c1,c2
from table1
where c1 existis (select c1 from table2 where table1.c1 = table2.c1)
EXISTS 子查询适用于需要根据子查询结果的存在性来进行条件过滤的情况,它的效率通常比 IN 运算符高,因为它只关注子查询是否返回结果,而不需要返回具体的结果集。
6、exists注意事项:
当 EXISTS 子查询不为空时,即子查询返回至少一行结果时,EXISTS 条件被认为是满足的。在这种情况下,外部查询将返回满足 EXISTS 条件的行。
7、相关子查询和非相关子查询
非相关子查询首先执行最底层的查询,此时,子查询模块独立,可以单独运行。
相关子查询不同于非相关子查询,其依赖主查询的结果来进行进一步的查询。