MySQL ----->约束&聚合查询&联合查询

目录

一,约束

约束类型

二,新增(insert)

基本语法

用法

三,聚合查询

1.常见的聚合函数

2.聚合函数的使用

3.group by(分组语句)

 4.having语句

四,联合查询

1.笛卡尔积

2.内连接

3.外连接

4.自连接

5.子查询

6.合并查询


一,约束

约束类型

  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • DEFAULT - 规定没有给列赋值时的默认值。
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句

注释:

  • 对于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(统计班级里有多少学生)
  • MySQL ----->约束&聚合查询&联合查询_第1张图片
  •  sum(求班级同学chinese成绩的总成绩)
  • MySQL ----->约束&聚合查询&联合查询_第2张图片
  • AVG(求班级同学Chinese成绩的平均成绩)
  • MySQL ----->约束&聚合查询&联合查询_第3张图片
  • max(求班级同学Chinese成绩的最大值)
  • MySQL ----->约束&聚合查询&联合查询_第4张图片
  • min(求班级同学Chinese成绩的最小值)
  • MySQL ----->约束&聚合查询&联合查询_第5张图片

3.group by(分组语句)

基本语法:

select column1, sum(column2), .. from table group by column1,column3;

解释 :

SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。需要满足:使用 GROUP BY 进行分组查询时,SELECT 指定的字段必须是“分组依据字段”,其他字段若想出现在SELECT 中则必须包含在聚合函数中(对于这段话最好的解释就是,我们最好要和求和,求平均等聚合函数结合使用,因此,分组自身就是对一列数据的合并,如果不结合聚合函数使用,很有可能显示的数据是错误的,并且没有意义

 4.having语句

group by子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 where语句,而需要用having(这句话的意思是说在进行分组之后,对于分组以后的只能使用having进行条件过滤,但是,在分组之前还是可以使用where进行条件过滤)

四,联合查询

1.笛卡尔积

笛卡尔积实际上就是对两张表进行相乘操作,得到的结果就是笛卡尔积

 MySQL ----->约束&聚合查询&联合查询_第6张图片

2.内连接

基本语法:

select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;
select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;

案例:查询许仙同学的成绩 

MySQL ----->约束&聚合查询&联合查询_第7张图片

3.外连接

基本语法:

-- 左外连接,表1完全显示
select 字段名 from 表名1 left join 表名2 on 连接条件;
-- 右外连接,表2完全显示
select 字段 from 表名1 right join 表名2 on 连接条件;

解释:

外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完全显示我们就说是右外连接

案例:

首先观察有哪些学生

MySQL ----->约束&聚合查询&联合查询_第8张图片

再观察内连接中得到学生的成绩(发现只有七位同学的成绩)

MySQL ----->约束&聚合查询&联合查询_第9张图片分析:出现这种情路此时就需要外连接了(外连接的作用就是显示内连接中没有显示出来的内容)

MySQL ----->约束&聚合查询&联合查询_第10张图片

4.自连接

解释:顾名思义就是自己和自己形成内连接

案例:

MySQL ----->约束&聚合查询&联合查询_第11张图片

5.子查询

子查询分为两种:

  • 单行子查询:返回一行记录的子查询
  • 多行子查询:返回多行记录的子查询

 1)单行子查询

基本语法:

-- 单行子查询
select ... from 表1 where 字段1 = (select ... from ...);

案例:查询与“不想毕业” 同学的同班同学:

MySQL ----->约束&聚合查询&联合查询_第12张图片

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)查询“语文”或“英文”课程的成绩信息

MySQL ----->约束&聚合查询&联合查询_第13张图片

(b)使用exist(not exists)

MySQL ----->约束&聚合查询&联合查询_第14张图片

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”的课程
  • MySQL ----->约束&聚合查询&联合查询_第15张图片
  • 案例:该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行
  • MySQL ----->约束&聚合查询&联合查询_第16张图片
  • union all使用(该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集                          中的重复行) 

你可能感兴趣的:(数据库,mysql,数据库,database)