数据库的多表操作

简介: 数据库的多表操作

实际开发中业务逻辑较为复杂,需要对多张表进行操作。

一:多表连接

将多张表连在一起进行查询。通过两个表共有的列去进行拼接。多表连接,首先要在表之间建立连接。

交叉连接

将一张表的数据与另外一张表中的数据彼此交叉。也就是说把一张表中的每一行逐个与另一张表去进行匹配。没有任何连接条件,所有的记录都会被保留。结果是笛卡尔积,没有实际应用。

用法:SELECT 字段1,字段2 FROM 表1 JOIN 表2

内连接

即最常见的等值连接,指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。

用法:SELECT 字段1,字段2 FROM 表1 JOIN 表2 WHERE 连接(检索条件)

外连接

在查询时所有的表有主从之分。把作为主表的表的行与从表中的行一一进行匹配,如果匹配成功返回到主表中,如果匹配不成功,则仍然保留主表中的行,相应的从表中的行也被填上null值。

驱动表(主表),从表(副表),

左外连接LEFT JOIN ON

把左表作为主表去连接右表

用法:SELECT * FROM 表1 LEFT JOIN 表2 ON条件表达式

右外连接RIGHT JOIN ON

把右表作为主表去连接左边的表

用法:SELECT * FROM 表1 RIGHT JOIN 表2 ON 条件表达式

全外连接(经常不用):即都为主表。左表中未匹配的行仍保留,同时赋给右表NULL值,右表的未匹配的行仍然保留同时赋给左表值NULL。

用法:SELECT * FROM 表1 FULL JOIN 表2 ON 条件表达式

MYSQL不支持全外连接

自连接

就是两个表的两个副本进行连接,为了区别,对表设置别名。

外键:占用空间少,方便修改数据。

二:关联关系

(1)一对多

数据表中常见的关系,比如班主任与班级的关系,一个班级可以有一个班主任,但是一个班主任不能属于多个班级。

语法:constraint 外键名 foreign key (被约束的字段) references 约束的表(约束的字段)

例:

创建dep表,并设置id为主键自增。

create table dep(
id int auto_increment primary key,
name varchar(32) not null default ''
)charset=utf8;

查看表结构

desc dep;

插入数据

insert into dep(name) values ('yanfabu'),('HR'),('xingzhengbu');

查看数据

select * from dep;

userinfo关联dep表,并设置外键。

create table userinfo(
id int auto_increment primary key, 
name varchar(32) not null default '',
depart_id int not null default 1,
constraint fk_user_depart foreign key (depart_id) references dep(id)
) charset=utf8;

查看表结构

desc userinfo;

插入数据

insert into userinfo(name,depart_id) values('cat a',1);

查看数据

select * from userinfo;

效果:如果dep表中的depart_id是1–3的范围,那么userinfo表插入的depart_id范围也只能在1–3.

(2)多对一

数据表中最常见的一种关系,比如学生与班级的关系,一个班级可以有多个学生,但是一个学生不能属于多个班级。在多对一的关系中,应该将外键建在多的一方。

(3)多对多

比如学生与课程的关系,一个学生可以选择多门课程,一门课程也供多个学生选择

例:

创建男生表

create table boy(id int auto_increment primary key, bname varchar(32) not null default '') charset=utf8;
insert into boy (bname) values('xiaogao'),('xiaogang'),('xiaoming');
select * from boy;

创建女生表

create table girl(id int auto_increment primary key, gname varchar(32) not null default '') charset=utf8;
insert into girl (gname) values('xiaohong'),('xiaomin'),('xiaojie');
select * from girl;

创建关联表

create table bg(
id int auto_increment primary key, 
bid int not null defaut 1,
gid int not null defaultn 0, 
constraint fk_bg_boy foreign key (bid) references boy(id),
constraint fk_bg_girl foreign key (gid) references girl(id)
)charset=utf8;
insert into bg (bid, gid) values (1,1),(1,2),(2,3),(3,3)(2,2);

左外连接

select * from boy left join bg on boy.id=bg.bid left join girl on girl.id=bg.gid;
select bname,gname from boy left join bg on boy.id=bg.bid left join girl on girl.id=bg.gid;

select name from boy left join bg on boy.id=bg.bid left join girl on girl.id=bg.gid;

(这样的话,需要将前面定义的bname,gname都修改为name)

(4)一对一

比如一个人只有一张身份证,而一张身份证也只对应一个人。

感谢大家,点赞,收藏,关注,评论

目录
相关文章
|
4月前
|
Oracle 关系型数据库 Java
实时计算 Flink版操作报错合集之cdc postgres数据库,当表行记录修改后报错,该如何修改
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
4月前
|
SQL 监控 关系型数据库
实时计算 Flink版操作报错合集之在设置监控PostgreSQL数据库时,将wal_level设置为logical,出现一些表更新和删除操作报错,怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
4月前
|
关系型数据库 Java 数据库
实时计算 Flink版操作报错合集之flinksql采PG数据库时报错,该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
4月前
|
关系型数据库 MySQL 数据库
实时计算 Flink版操作报错合集之在处理PostgreSQL数据库遇到报错。该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
4月前
|
消息中间件 关系型数据库 数据库
实时计算 Flink版操作报错合集之在使用RDS数据库作为源端,遇到只能同步21个任务,是什么导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
4月前
|
SQL 数据库 Python
Django框架数据库ORM查询操作(6)
【7月更文挑战第6天】```markdown Django ORM常用数据库操作:1) 查询所有数据2) 根据ID查询 3) 精确查询 4) 分页排序
66 1
|
4月前
|
存储 监控 安全
安全规范问题之跟数据库交互涉及的敏感数据操作需要有哪些措施
安全规范问题之跟数据库交互涉及的敏感数据操作需要有哪些措施
|
4月前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之无法连接到指定的数据库实例,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
4月前
|
DataWorks 关系型数据库 MySQL
DataWorks操作报错合集之从OceanBase(OB)数据库调度数据到MySQL数据库时遇到连接报错,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
4月前
|
SQL 安全 关系型数据库
Kingbase(人大金仓数据库)(总结全网精华,虚拟机:从安装到操作数据库一条龙)
KingbaseES 是一款由中国人大金仓信息技术股份有限公司自主研发的通用关系型数据库管理系统(RDBMS),专为中国市场设计,广泛应用于政府、金融、能源、电信等多个关键行业。它是国产数据库的代表之一,以其高安全性、高可用性和高性能著称,符合中国信息技术领域的自主可控要求。以下是关于KingbaseES的一些关键特点和功能:
572 0