MySQL DAY 03 重点知识总结 多表查询拓展&数据库备份和恢复&几个优秀题目想法分享
一 多表查询
多表查询主要分为: 表与表的关系 合并结果集 连接查询 子查询
表与表的关系 合并结果集 小编已经在上一篇文章有所叙述
- 连接查询
- 内连接- inner join on
内连接的特点: 查询的结果必须满足条件
通俗我们使用where判断也可以做到内连接的效果 打个比方
- 内连接- inner join on
表格 score
表格 student
- 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:-
如果需要参加更多的判断 where的方法可以使用and 内连接方法可以使用where或者and 打个比方:
如果题目需要通过student 联系两个表格 并且显示成绩高于70分的学生信息 则可以这样操作- select student.student,studentname,score from student,score where student.student = score.student and score > 70;
- select student.student,studentname,score from student join score on student.student = score.student and score>70;
- select student.student,studentname,score from student join score on student.student = score.student where score >70;
-
外连接 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的右边的表格为主要表格 -
子查询
在一个select语句中嵌套一个另外的select语句
注意:
1. 子查询出现的位置
1.from后 2.where子句的后面 作为条件的一部分查询
2. 当子查询出现在where后面作为条件时 可以使用关键字: any all
( 1. any 可以与=、>、>=、<、<=、<>结合起来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于其中的任何一个数据。
2. all可以与=、>、>=、<、<=、<>结合是来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于其中的其中的所有数据。
) 稍微解释一下: any <= 子查询 这个可以理解为数据只要小于所有子查询内的最大值即可输出- 子查询结果集的形式
单行单列 单行多列 多行多列 多行单列
子查询多出现在 需要和其他数值进行比较的时候
比如: 列出所有比张三的成绩更高的同学的所有信息
列出和张三的薪资相同的员工的所有信息 等等
- 子查询结果集的形式
-
二 数据库的备份和恢复
-
备份
命令: mysqldump -u root -p 数据库名 > 生成sql脚本的绝对路径
注意: 可以不需要登录数据库
举个栗子:
mysqldump -u root -p mydb1 > C:/User/Galahad_Lin/Desktop/mydb.sql
解释: mydb1 : 是已经创建的数据库 也是目前用户需要备份的数据库名字
mydb.sql : 存入的名字 这个名字可以与原来的数据库不一样 用户可以自定义 -
恢复
执行sql脚本 恢复数据
前提: 必须先创建数据库[空的]
注意: 需要先登录数据库 然后进入指定的数据库 执行sql脚本
source C:/User/Galahad_Lin/Desktop/mydb.sql;
tips: 在恢复数据之前 我们必须得先创建一个空的数据库 并且恢复的数据不会包含[查询]内的东西
三 几个优质题目想法分享
- 自查
select n.name,m.bossname from emp as n,emp as m where …
这个的意思是 同一个表格 两字段需要进行比较或者查找可以使用这样的方法: 同一个表格命名为两个不同的名字 进行调用 - 多表联合查询 (三个表以上)
找到相联系的部分 使用join分行进行联合 在进行查询
select * from text1
join text2 on text2.id = text1.id2;
join text3 on text3.id2 = text1.id2
where …
个人感觉 :- 最好分行写联合表格 这样容易查错
- 最好where等判断条件 或者分组等放在最后写 这样也容易差错或者方便阅读