MySQL DAY 03 多表查询拓展&数据库备份和恢复&几个优秀题目想法分享

MySQL DAY 03 重点知识总结 多表查询拓展&数据库备份和恢复&几个优秀题目想法分享

一 多表查询

多表查询主要分为: 表与表的关系 合并结果集 连接查询 子查询
表与表的关系 合并结果集 小编已经在上一篇文章有所叙述

  1. 连接查询
    1. 内连接- inner join on
      内连接的特点: 查询的结果必须满足条件
      通俗我们使用where判断也可以做到内连接的效果 打个比方

表格 score score
表格 student student

  1. 1
    这两张表格 我想通过student的编号联系起来 进而使用名字查询该学生的分数 可以使用如下代码实现
    方式一: 使用where进行判断
    select student.student,studentname,score from student,score where student.student = score.student;
    方式二: 使用内连接 inner join on
    select student.student,studentname,score from student join score on student.student = score.student;
    tips:
    1. 如果需要参加更多的判断 where的方法可以使用and 内连接方法可以使用where或者and 打个比方:
      如果题目需要通过student 联系两个表格 并且显示成绩高于70分的学生信息 则可以这样操作

      1. select student.student,studentname,score from student,score where student.student = score.student and score > 70;
      2. select student.student,studentname,score from student join score on student.student = score.student and score>70;
      3. select student.student,studentname,score from student join score on student.student = score.student where score >70;
    2. 外连接 outer join on
      特点: 以其中一个表为参照连接另外一个表
      分类:
      左外连接: left join on
      右外连接: right join on
      tips:所谓外连接 与内连接最大的一点不同就是 内连接需要一一对应的数据 如果数据并不对应 则会不显示 比如以上面的表格为例 如果student表格中有学生1005的学生姓名 而score表格中却没有1005学生的成绩 在内连接中 输出的表格将会不显示1005号学生的姓名等信息(这一行都不会出现) 但是如果是外连接 对应的表格是会全部显示 比如
      select student.student,studentname,score from student left join score on student.student = score.student;
      select student.student,studentname,score from score right join student on student.student=score.student;
      tips: left 指向的就是left左边的表格为主要表格(即所有的数据不管是否第二个表格对应都会显示) 同理可得right的右边的表格为主要表格

    3. 子查询
      在一个select语句中嵌套一个另外的select语句
      注意:
      1. 子查询出现的位置
      1.from后 2.where子句的后面 作为条件的一部分查询
      2. 当子查询出现在where后面作为条件时 可以使用关键字: any all
      ( 1. any 可以与=、>、>=、<、<=、<>结合起来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于其中的任何一个数据。
      2. all可以与=、>、>=、<、<=、<>结合是来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于其中的其中的所有数据。
      ) 稍微解释一下: any <= 子查询 这个可以理解为数据只要小于所有子查询内的最大值即可输出

      1. 子查询结果集的形式
        单行单列 单行多列 多行多列 多行单列
        子查询多出现在 需要和其他数值进行比较的时候
        比如: 列出所有比张三的成绩更高的同学的所有信息
        列出和张三的薪资相同的员工的所有信息 等等

二 数据库的备份和恢复

  1. 备份
    命令: mysqldump -u root -p 数据库名 > 生成sql脚本的绝对路径
    注意: 可以不需要登录数据库
    举个栗子:
    mysqldump -u root -p mydb1 > C:/User/Galahad_Lin/Desktop/mydb.sql
    解释: mydb1 : 是已经创建的数据库 也是目前用户需要备份的数据库名字
    mydb.sql : 存入的名字 这个名字可以与原来的数据库不一样 用户可以自定义

  2. 恢复
    执行sql脚本 恢复数据
    前提: 必须先创建数据库[空的]
    注意: 需要先登录数据库 然后进入指定的数据库 执行sql脚本
    source C:/User/Galahad_Lin/Desktop/mydb.sql;
    tips: 在恢复数据之前 我们必须得先创建一个空的数据库 并且恢复的数据不会包含[查询]内的东西

三 几个优质题目想法分享

  1. 自查
    select n.name,m.bossname from emp as n,emp as m where …
    这个的意思是 同一个表格 两字段需要进行比较或者查找可以使用这样的方法: 同一个表格命名为两个不同的名字 进行调用
  2. 多表联合查询 (三个表以上)
    找到相联系的部分 使用join分行进行联合 在进行查询
    select * from text1
    join text2 on text2.id = text1.id2;
    join text3 on text3.id2 = text1.id2
    where …
    个人感觉 :
    1. 最好分行写联合表格 这样容易查错
    2. 最好where等判断条件 或者分组等放在最后写 这样也容易差错或者方便阅读
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值