IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL——增删改查进阶 -> 正文阅读

[大数据]MySQL——增删改查进阶

目录

一,数据库的约束

1.not null——指定列非空

2.unique——指定值唯一

3.default——默认值约束

4.primary key——主键约束

?5.foreign key——外键约束

6.check约束——了解

二,表的设计

1.主要思路

?三,新增

四,查询(聚合函数:count,sum,max,min,avg)

1.count——计算行数

2.sum——若干行之间进行加和

3.avg——求若干行平均数

4.max——求若干行最大值

5.min——求若干行最小值

6.group by——分组查询

(1).分组

(2). 在分组时进行操作

?(3).分组之前筛选

(4).分组之后筛选?

?7.联合查询(笛卡尔积——列数相加,行数相乘)

(1).未做数据约束

?(2).排除错误数据

(3).jion on 写法

(4).具体聚合步骤

(5).内外链接

(6).自连接

8.子查询/嵌套查询

(1).单行子查询

(2).多行子查询

9.合并查询

(1).union

(2).union all


一,数据库的约束

1.not null——指定列非空

create table student (
?id int not null,
?sn int ,
?name varchar(20),
?qq_mail varchar(20)
);

2.unique——指定值唯一

create table student (
?id int ,
?sn int unique,
?name varchar(20),
?qq_mail varchar(20)
);

使用unique约束,数据库自动给对应列创建索引

3.default——默认值约束

create table student (
?id int ,
?sn int ,
?name varchar(20) default ' 未命名',
?qq_mail varchar(20)
);

4.primary key——主键约束

create table student (
?id int ?primary key auto_increment,
?sn int ,
?name varchar(20) ,
?qq_mail varchar(20)
);

1.相当于 unique+not null

2.一个表中只能有一个(分布式部署时不能保证不重复)

3.常与? auto_increment? 搭配使用,可自动增加值,也支持手动分配.

? 手动分配后,按手动分配后新数据继续自增

?生成公式=(时间戳+机房编号/主机编号+随机因子)==>计算哈希值

?5.foreign key——外键约束

create table classes (
id int primary key auto_increment,
name varchar(20),
`desc` varchar(100)
);

create table students (
id int primary key auto_increment,
sn int unique,
name varchar(20),
qq_mail varchar(20),
classes_id int,
foreign key (classes_id) references classes(id)
);

父表为classes,子表为students

在子表里创建父表的伪id

1.子表存在,不能直接删父表

2.被约束的不能直接删除

拓展:逻辑删除

将数据标记为无效

6.check约束——了解

create table students (
id int primary key auto_increment,
sn int unique,
name varchar(20),
sex varchar(20),

check (sex='男' or sex='女')
);

使用时不报错且自动忽略

二,表的设计

1.主要思路

(1).根据需求,找到“实体”

(2).梳理实体间的关系

一对一? ? ?

一对多? ?

1.学校宿舍管理系统,要求包含宿舍信息,学生信息,每日的宿舍查房记录。

create table dormitory(

? id int primary key,

??number varchar(20)

);

create table student(

id int primary key,

??name varchar(20),

??dormitory_id int,

??foreign key (dormitory_id) references dormitory(id)

);

?多对多

需要额外一个关联表

?三,新增

可以把查询的结果插到另一个表中

insert into 表1 select?* from 表2 [where ];

四,查询(聚合函数:count,sum,max,min,avg)

对某某列的行进行操作

1.count——计算行数

select count(列/*)from 表

?注意:

count(列),若该列为null,则不计算;若该列为*,所有列为空也计算

2.sum——若干行之间进行加和

select sum(列名) from 表名;

?空值不参加运算,直接跳过

3.avg——求若干行平均数

4.max——求若干行最大值

5.min——求若干行最小值

6.group by——分组查询

(1).分组

select? 列名 from 表名 group by 列名;

(2). 在分组时进行操作

?select 列, count(*) from 表 group by 列;

产生select 所需列,尽量不要使用*,否则分组产生的数据只显示第一个出现的行

count()

?avg(),max(),min()和count类似

?(3).分组之前筛选

??select 列, avg(*) from 表 wher 条件 group by 列;?

(4).分组之后筛选?

??select 列, avg(*) from 表? group by 列 having 条件;

HAVING是从分组结果中筛选数据的(行),而不是筛选列的?

?7.联合查询(笛卡尔积——列数相加,行数相乘)

联合查询/多表查询=笛卡尔积+连接条件+其他条件

(1).未做数据约束

select * from 表1?,表2;

?(2).排除错误数据

select * from 表1?,表2 where 条件;

eg:

select * from students, classer where students.id=classes.id; ()? ? 表.列

(3).jion on 写法

select * from 表1 join 表2 on 条件;

(4).具体聚合步骤

1.先笛卡尔积

select * from 表1,表2 ;

2.再加上连接条件(一般是对id进行去重)

select * from 表1,表2 where 表1.id=表2.id ;

3.再加上其他限制条件,留下你需要的内容

select * from 表1,表2 where 表1.id=表2.id and 条件/group by?;

4.最后改变 select 后的 * 为所需要的列

select 列1,列2/sum(列),avg(列)...? from 表1,表2 where 表1.id=表2.id and 条件/group by ;

(5).内外链接

1.内外连接区别

如果两张表数据对应,内外连接基本相同,甚至没有区别

?如下所示:

?反之,情况不同,内外连接区别明显

?

2.内连接

select * from 表1,表2 where 条件;

select * from 表1 join 表2 on 条件;

select * from 表1 inner join 表2 on 条件;

3.外链接

外连接分为左外连接和右外连接。

左外连接:左侧的表完全显示

select * from 表名1 left join 表名2 on 连接条件;

表1完全显示,表2若无表1对应数据,填充为NULL

?

右外连接:右侧的表完全显示

select * from 表名1 right join 表名2 on 连接条件;?

表2完全显示

?

(6).自连接

自连接是指在同一张表连接自身进行查询,比较特殊,因条件查询一般为列操作,而自连接可行操作,即——将行转换为列

但因其可读性差,运行开销成本高,故实际中执行多个SQL来完成比较

8.子查询/嵌套查询

其本质就是将多个查询语句组合成一个查询语句

(1).单行子查询

返回一行记录的子查询

select * from student?where classes_id=(select classer_id from student where name=' xxx');

(2).多行子查询

返回多行记录的子查询

[not] in

-- 使用in
select * from score where course_id in (select id from course where name='语文' or name='英文');


-- 使用 not in
select * from score where course_id not in (select id from course where name!='语文' and name!='英文');

[not] exists?

-- 使用 exists
select * from score sco where exists (select sco.id from course cou
where (name='语文' or name='英文') and cou.id = sco.course_id);


-- 使用 not exists
select * from score sco where not exists (select sco.id from course cou
where (name!='语文' and name!='英文') and cou.id = sco.course_id);

exists可能速度较慢,延迟较高,故一般使用 In ,但当数据特别大时,可以使用exists

9.合并查询

(1).union

用于取得两个结果集的并集可自动去掉结果集中的重复行

select * from course where id<3 union select * from course where name='英文';
-- 或者使用or来实现
select * from course where id<3 or name='英文';

(2).union all

?用于取得两个结果集的并集,不能自动去掉结果集中的重复行

select * from course where id<3 union all select * from course where name='英文';

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:50:33  更:2022-08-06 10:52:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 0:02:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码