目录
一,约束
约束类型
注释:
- 对于primary key 常和auto_increment搭配使用,作用就是此主键会参照此时最大的数值进行自增加一的操作(此主键一般为id)
- 对于foreign key(外键来说),一般关联的是主键,因为主键具有唯一性
约束类型 | 说明 | 示例 |
NULL约束 | 使用NOT NULL指定列不为 空 | name varchar(20) not null, |
UNIQUE唯一约束 | 指定列为唯一的、不重复的 | name varchar(20) unique, |
DEFAULT默认值约 束 | 指定列为空时的默认值 | age int default 20, |
主键约束 | NOT NULL 和 UNIQUE 的 结合 | id int primary key, |
外键约束 | 关联其他表的主键或唯一键 | foreign key (字段名) references 主 表(列) |
CHECK约束(了 解) | 保证列中的值符合指定的条 件 | check (sex ='男' or sex='女') |
二,新增(insert)
基本语法
INSERT INTO table_name [(column [, column ...])] SELECT ...
用法
相当于是对于另一个表的内容进行复制/提取(内容不一定是全部字段,即想要插入的字段)
三,聚合查询
1.常见的聚合函数
函数 | 说明 |
COUNT([DISTINCT] expr) | 返回查询到的数据的 数量 |
SUM([DISTINCT] expr) | 返回查询到的数据的 总和,不是数字没有意义 |
AVG([DISTINCT] expr) | 返回查询到的数据的 平均值,不是数字没有意义 |
MAX([DISTINCT] expr) | 返回查询到的数据的 最大值,不是数字没有意义 |
MIN([DISTINCT] expr) | 返回查询到的数据的 最小值,不是数字没有意义 |
2.聚合函数的使用
- count(统计班级里有多少学生)
- sum(求班级同学chinese成绩的总成绩)
- AVG(求班级同学Chinese成绩的平均成绩)
- max(求班级同学Chinese成绩的最大值)
- min(求班级同学Chinese成绩的最小值)
3.group by(分组语句)
基本语法:
select column1, sum(column2), .. from table group by column1,column3;
解释 :
4.having语句
四,联合查询
1.笛卡尔积
2.内连接
基本语法:
select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;
select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;
案例:查询许仙同学的成绩
3.外连接
基本语法:
-- 左外连接,表1完全显示
select 字段名 from 表名1 left join 表名2 on 连接条件;
-- 右外连接,表2完全显示
select 字段 from 表名1 right join 表名2 on 连接条件;
解释:
案例:
首先观察有哪些学生
再观察内连接中得到学生的成绩(发现只有七位同学的成绩)
分析:出现这种情路此时就需要外连接了(外连接的作用就是显示内连接中没有显示出来的内容)
4.自连接
解释:顾名思义就是自己和自己形成内连接
案例:
5.子查询
子查询分为两种:
- 单行子查询:返回一行记录的子查询
- 多行子查询:返回多行记录的子查询
1)单行子查询
基本语法:
-- 单行子查询
select ... from 表1 where 字段1 = (select ... from ...);
案例:查询与“不想毕业” 同学的同班同学:
2)多行子查询
基本语法:
-- [NOT] IN
select ... from 表1 where 字段1 in (select ... from ...);
-- [NOT] EXISTS
select ... from 表1 where exists (select ... from ... where 条件);
案例:(a)使用in(not in)查询“语文”或“英文”课程的成绩信息
(b)使用exist(not exists)
6.合并查询
基本语法:
-- UNION:去除重复数据
select ... from ... where 条件
union
select ... from ... where 条件
-- UNION ALL:不去重
select ... from ... where 条件
union all
select ... from ... where 条件
-- 使用UNION和UNION ALL时,前后查询的结果集中,字段需要一致
- union使用(该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中 的重复行)
- 案例:查询id小于3,或者名字为“Java”的课程
- 案例:该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行
- union all使用(该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集 中的重复行)