目录
1. 数据库约束
1.1 约束类型
1.2 NULL约束
1.3 UNIQUE:唯一约束
1.4 DEFAULT:默认值约束
1.5 PRIMARY KEY:主键约束
1.6 FOREIGN KEY:外键约束
2. 表的设计
2.1 一对一
2.2 一对多
2.3 多对多
3. 新增
4. 查询
4.1 聚合查询
4.1.1 聚合函数
4.1.2 GROUP BY子句
4.1.3 HAVING
4.2 联合查询
4.2.1 内连接
4.2.2 外连接
4.2.3 自连接
4.2.4 子查询
4.2.5 合并查询
1. 数据库约束
1.1 约束类型
NOT NULL - 指示某列不能存储 NULL 值。
UNIQUE - 保证某列的每行必须有唯一的值。
DEFAULT - 规定没有给列赋值时的默认值。
PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。
FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略 CHECK子句。
1.2 NULL约束
创建表时,可以指定某列不为空:
再被not null 约束之后, 使用update把值修改成null, 也是不允许的。
1.3 UNIQUE:唯一约束
指定某列为唯一的、不重复的:
同理, 修改也是一样.
1.4 DEFAULT:默认值约束
1.5 PRIMARY KEY:主键约束
主键约束
主键就是一条数据的身份标识
通过这个约束,来指定某个列作为主键
1)非空
2)不能重复
一个表只能有一个主键
auto_increment 必须搭配整数类型的主键来使用
1.6 FOREIGN KEY:外键约束
涉及到两个表之间的约束
2. 表的设计
三大范式:
2.1 一对一
2.2 一对多
2.3 多对多
3. 新增
4. 查询
4.1 聚合查询
4.1.1 聚合函数
常见的统计总数、计算平局值等操作,可以使用聚合函数来实现,常见的聚合函数有:
COUNT
SUM
AVG MAX MIN
4.1.2 GROUP BY子句
SELECT 中使用 GROUP BY 子句, 就是指定一个列, 按照这个列进行分组, 这一个列中数值相同的会被放到同一组. 每个分组中, 都可以使用上述聚合函数来进行计算.
4.1.3 HAVING
分组查询也是可以搭配条件来使用的
1. 分组之前的条件, 使用where
求每个岗位的平均薪资, 但是出去张三
2. 分组之后的条件, 使用having
求每个岗位的平均薪资, 但是除去平均薪资超过2w的
分组之后的条件也是需要搭配聚合函数来使用的
3.一个sql语句中,可以同时包含, 分组前的条件, 和分组后的条件.
求每个岗位的平均薪资, 但是除去张三, 除去平均薪资超过2w的
4.2 联合查询
实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积:
笛卡尔积,就是把两个表里的记录,按照排列组合的方式,构造成一个更大的表了.
笛卡尔积的列数,就是原来两个表的列数之和.
笛卡尔积的行数,就是原来两个表的行数之积.
笛卡尔积,是一个非常低效的操作
尤其是表的本身的记录比较多的情况=>多表联合查询, 也是非常低效的.
笛卡尔积中,有的数据靠谱, 有的数据不靠谱.(靠谱指的是笛卡尔积表达的情况和客观情况是一致的)
(1) 查询"许仙"同学的成绩
(2)查询所有同学的总成绩,及同学的个人信息:
(3)查询所有同学的成绩,及同学的个人信息:
4.2.1 内连接
4.2.2 外连接
外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完 全显示我们就说是右外连接。
4.2.3 自连接
自连接,本质上是自己和自己做笛卡尔积。是把"行之间的关系"转换成"列之间的关系", 在SQL中,编写条件,条件都是列和列之间进行比较。但是,SQL中无法进行"行和行之间的比较"
显示所有“计算机原理”成绩比“Java”成绩高的成绩信息
在score表中, 计算机原理与Java是按照行与行之间排列的,不能够直接比较, 所以要把行转换成列,也就用到了自连接.
select的时候,多个表,名字不能相同.因此需要起个别名.也是使用as
4.2.4 子查询
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询, 也俗称套娃.
日常开发中, 使用子查询要克制, 本质上就是把多个SQL合并成一个SQL
查询与“不想毕业” 同学的同班同学:
把上面两个SQL语句合并成了一个.
虽然SQL支持这样写, 但是不推荐.
4.2.5 合并查询
合并查询,把多个select,查询得到的结果集合,合并成一个集合
UNION
能合并的前提,是这两个查询的结果集,列得对应.
UNION ALL