9、MySQL——表与表之间的关系,多表查询、MySQL数据库的备份与恢复

本文详细讲解了一对一、一对多和多对多表间关系,涵盖多表查询的UNION与JOIN操作,包括内连接、外连接(左外、右外和自然连接)以及MySQL数据库的备份恢复方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、表与表之间的关系

1、一对一

2、一对多(多对一)

3、多对多

二、多表查询

三、合并结果集

1、作用

2、合并结果集的两种方式

四、连接查询

1、内连接

2、外连接

(1)左外连接 

(2)右外连接

3、自然连接 

五、MySQL数据库的备份与恢复 

1、生成SQL脚本,导出数据

2、执行SQL脚本,恢复数据 

3、无需登录MySQL,执行脚本文件


一、表与表之间的关系

1、一对一

当出现一对一关系时,我们需要判断出主从关系,即谁是主表,谁是从表。比如独生子家庭的父亲和儿子,一个人可以没有儿子,但儿子必须有个亲爹。

2、一对多(多对一)

最为常见的就是一对多!一对多和多对一取决于判断的角度。父亲和孩子的关系,从父亲的角度来看就是一对多,从孩子的角度来看就是多对一。

3、多对多

例如学生和老师,一个学生可以有多个老师,而一个老师也可以有多个学生。

二、多表查询

多表查询分为三种:

1、合并结果集:UNION、UNION ALL

2、连接查询:

--->内连接:[INNER] JOIN ON

--->外连接:OUTER JOIN ON

* 左外连接:LEFT [OUTER] JOIN

* 右外连接:RIGHT [OUTER] JOIN

* 全外连接(MySQL不支持):FULL JOIN

--->自然连接:NATURAL JOIN

3、子查询

三、合并结果集

先创建两个表

CREATE TABLE `t1`(

        `a` INT PRIMARY KEY,

        `b` VARCHAR(50)

);

CREATE TABLE `t2`(

        `c` INT PRIMARY KEY,

        `d` VARCHAR(50)

);

插入数据 

INSERT INTO t1 VALUES

(1,'A'),

(2,'B'),

(3,'C'),

(4,'D');

INSERT INTO t2 VALUES

(4,'D'),

(5,'E'),

(6,'F') ;

1、作用

把两个SELECT语句的查询结果合并到一起。

被合并的两个结果:列数和列类型必须相同

2、合并结果集的两种方式

(1) UNION:去除重复记录

(2) UNION ALL:不去除重复记录

四、连接查询

连接查询就是求出多个表的乘积,例如t1连接t2,那么查询出的结果就是t1*t2。

t1表中的每一条记录分别乘以t2表中的所有记录

---> 连接查询会产生笛卡尔积,假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。可以扩展到多个集合的情况。

--->那么多表查询产生这样的结果并不是我们想要的,那么怎么去除重复的,不想要的记录呢,当然是通过条件过滤。通常要查询的多个表之间都存在关联关系,那么就通过关联关系去除笛卡尔积。

创建emp表,并插入数据

创建dept表,并插入数据

select * from emp,dept;的查询结果是56条记录,但每个人的部门只对应一条部门信息,其他的笛卡尔积是不正确的,真正正确的记录只有14条。想在查询emp表的同时,把每个员工的所在部门信息显示出来,那么就需要使用主外键来去除无用信息了。

1、内连接

如果两个表中有相同的字段,可以用来筛除信息

查询结果必须满足条件 

(1)查询两个表中的所有字段 

SELECT * FROM emp,dept WHERE emp.deptno=dept.deptno;

内连接标准语法:

SELECT * FROM e.emp [INNER] JOIN dept d ON e.deptno=d.deptno;

(2)查询两个表中的指定字段 

SELECT emp.empno,emp.ename,emp.sal,emp.deptno,dept.dname FROM emp,dept WHERE emp.deptno=dept.deptno;

内连接标准语法:

SELECT emp.empno,emp.ename,emp.sal,emp.deptno,dept.dname FROM emp e [INNER] JOIN dept d WHERE e.deptno=d.deptno;

 (3)给表起别名

SELECT e.empno,e.ename,e.sal,e.deptno,d.dname FROM emp AS e,dept AS d WHERE e.deptno=d.deptno;

AS可以省略

SELECT e.empno,e.ename,e.sal,e.deptno,d.dname FROM emp e,dept d WHERE e.deptno=d.deptno;

2、外连接

外连接有分为:

左外连接:LEFT [OUTER] JOIN

右外连接:RIGHT [OUTER] JOIN 

(1)左外连接 

特点:查询出结果存在不满足条件的可能

 左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示NULL

SELECT * FROM emp e LEFT [OUTER] JOIN dept d ON e.deptno=d.deptno;

(2)右外连接

右连接就是先把右表中所有记录都查询出来,然后左表满足条件的显示,不满足显示NULL。

SELECT * FROM emp e RIGHT [OUTER] JOIN dept d ON e.deptno=d.deptno;

3、自然连接 

连接查询会产生无用笛卡尔积,我们通常使用主外键关系等式来去除它。而自然连接无需你去给出主外键等式,它会自动找到这一等式

自然连接 :SELECT * FROM emp NATURAL JOIN dept;

自然左连接:SELECT * FROM emp NATURAL LEFT JOIN dept;

自然右连接:SELECT * FROM emp NATURAL RIGHT JOIN dept;

五、MySQL数据库的备份与恢复 

1、生成SQL脚本,导出数据

在控制台使用mysqldump命令可以用来生成指定数据库的脚本文本,但要注意,脚本文本中只包含数据库的内容,而不会存在创建数据库的语句!所以在恢复数据时,还需要自已手动创建一个数据库之后再去恢复数据。

mysqldump -u用户名 -p密码 数据库名>生成的脚本文件路径

 在D盘生成了脚本文件

2、执行SQL脚本,恢复数据 

前提:必须先创建数据库名

执行SQL脚本需要登录mysql,然后进入指定数据库,才可以执行SQL脚本!!!

执行SQL脚本不只是用来恢复数据库,也可以在平时编写SQL脚本,然后使用执行SQL 脚本来操作数据库!

SOURCE 脚本文件路径;

3、无需登录MySQL,执行脚本文件

mysql –u用户名 –p密码 数据库<要执行脚本文件路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值