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


    目录

    一、表与表之间的关系

    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密码 数据库<要执行脚本文件路径

  • 相关阅读:
    十九、类型信息(1)
    深入解析纹理贴图——纹理压缩技术
    mysql 安装 与 使用
    H01-基于深度学习的物体检测-概述
    c++ - 第15节 - 二叉树进阶
    leetcode面试经典150题——29 三数之和
    驱动——串口工具点灯实验
    【3】c++设计模式——>UML表示类之间的关联关系
    Redis集群总结
    数字图像处理笔记(二)图像增强-直方图修改技术
  • 原文地址:https://blog.csdn.net/CSDN_Loveletter/article/details/127768668