多表查询:

合并结果集:

合并结果集就是把两个select语句的查询结果合并到一起,被合并的两个结果列数列类型必须相同

 

合并结果集的两种方式:

union:合并时去除重复记录

union all:合并时不去除重复记录

 

格式:



select * from 表1 union select * from 表2;



select * from 表1 union all select * from 表2;



 

创建表:

mysql 一对多合并 mysql合并多个结果集_数据

mysql 一对多合并 mysql合并多个结果集_连接查询_02

mysql 一对多合并 mysql合并多个结果集_外键_03

 

union:

mysql 一对多合并 mysql合并多个结果集_数据_04

 

union all:

mysql 一对多合并 mysql合并多个结果集_数据库_05

 

 

连接查询:

连接查询,也可以叫跨表查询,需要关联多个表进行查询

笛卡尔积:假设集合A={a, b}, 集合B={0, 1},则两个集合的笛卡尔积为{a, 0), {a, 1}, {b, 0}, {b, 1},可以扩展到多个集合的情况

 

mysql 一对多合并 mysql合并多个结果集_数据库_06

 

mysql 一对多合并 mysql合并多个结果集_数据_07

 

mysql 一对多合并 mysql合并多个结果集_连接查询_08

 

 

mysql 一对多合并 mysql合并多个结果集_mysql 一对多合并_09

mysql 一对多合并 mysql合并多个结果集_外键_10

mysql 一对多合并 mysql合并多个结果集_数据_11

 

同时查询两个表出现的就是笛卡尔积:

mysql 一对多合并 mysql合并多个结果集_外键_12

 

 多表联查保证数据正确的方法:

在查询时要保持主键和外键一致

mysql 一对多合并 mysql合并多个结果集_数据库_13

主表当中的数据参照子表当中的数据,逐行判断,相等的留下

 

 

连接方式的分类:内连接,外连接,自然连接

内连接:等值连接,多表连接,非等值连接,自连接

等值连接:

两个表同时出现的id号(值)才显示

mysql 一对多合并 mysql合并多个结果集_数据_14

与多表联查约束主外键是一样的,只是写法改变,on后面只写主外键,如果还有条件直接在后面写where

mysql 一对多合并 mysql合并多个结果集_外键_15

多表联查后面还有条件就写and

 

多表连接:

建立学生,分数,科目表:

mysql 一对多合并 mysql合并多个结果集_连接查询_16

mysql 一对多合并 mysql合并多个结果集_mysql 一对多合并_17

mysql 一对多合并 mysql合并多个结果集_连接查询_18

 

mysql 一对多合并 mysql合并多个结果集_数据库_19

mysql 一对多合并 mysql合并多个结果集_数据_20

mysql 一对多合并 mysql合并多个结果集_数据_21

 

 

mysql 一对多合并 mysql合并多个结果集_外键_22

mysql 一对多合并 mysql合并多个结果集_数据_23

mysql 一对多合并 mysql合并多个结果集_数据_24

 

使用99连接法:

mysql 一对多合并 mysql合并多个结果集_数据_25

 

使用内联查询:

mysql 一对多合并 mysql合并多个结果集_mysql 一对多合并_26

 

非等值连接:

mysql 一对多合并 mysql合并多个结果集_数据_27

mysql 一对多合并 mysql合并多个结果集_数据库_28

mysql 一对多合并 mysql合并多个结果集_数据库_29

 

mysql 一对多合并 mysql合并多个结果集_数据_30

mysql 一对多合并 mysql合并多个结果集_mysql 一对多合并_31

mysql 一对多合并 mysql合并多个结果集_mysql 一对多合并_32

 

 

mysql 一对多合并 mysql合并多个结果集_外键_33

mysql 一对多合并 mysql合并多个结果集_外键_34

mysql 一对多合并 mysql合并多个结果集_外键_35

 

查看所有员工姓名,工资:

mysql 一对多合并 mysql合并多个结果集_mysql 一对多合并_36

 

查询所有员工姓名,工资和部门:

mysql 一对多合并 mysql合并多个结果集_数据库_37

mysql 一对多合并 mysql合并多个结果集_连接查询_38

 

 

查询所有员工的姓名,工资和所在部门及工资等级:

mysql 一对多合并 mysql合并多个结果集_外键_39

mysql 一对多合并 mysql合并多个结果集_mysql 一对多合并_40

 

外连接:左外连接(左连接),右外连接(右连接)

左连接:

两表满足条件相同的数据,如果左边表中有不相同的数据,也把左边表中的数据查出来,左边表当中的数据全部查出来,右边表当中只查出满足条件的内容

mysql 一对多合并 mysql合并多个结果集_外键_41

mysql 一对多合并 mysql合并多个结果集_连接查询_42

 

mysql 一对多合并 mysql合并多个结果集_数据_43

 

 

mysql 一对多合并 mysql合并多个结果集_mysql 一对多合并_44

mysql 一对多合并 mysql合并多个结果集_外键_45

 

mysql 一对多合并 mysql合并多个结果集_连接查询_46

 

使用内连接时,zq不会查出来,没有成绩,缺考了,把所有考过试的学生分数查出来:

 

mysql 一对多合并 mysql合并多个结果集_数据库_47

mysql 一对多合并 mysql合并多个结果集_外键_48

 

 

使用左连接查询所有学生及学生的考试分数:

mysql 一对多合并 mysql合并多个结果集_数据库_49

左连接会把左表当中的数据全部查出,右表当中查出满足条件的数据,可以省略outer不写,查询时两个表可以不需要建立主外键约束

 

 

 右连接:

mysql 一对多合并 mysql合并多个结果集_数据_50

右连接会把右表当中的数据全部查出,左边表只查出满足条件的记录

站在表外的角度看,使用左连接就是把左表的数据全部查出,右边查出满足条件的,右连接反之

 

 

自然连接:

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

要求:两张连接的表中列名称和类型完全一致的列作为条件会去除相同的列

 

 

子查询:

一个select语句包含另一个完整的select语句或两个以上的select

 

子查询出现的位置:

where后,把select查询出来的结果当作另一个select的条件值

from后,把查询出的结果当作一个新表

 

查询与项羽同一部门的员工:

mysql 一对多合并 mysql合并多个结果集_mysql 一对多合并_51

查询工资高于程咬金的员工:

mysql 一对多合并 mysql合并多个结果集_数据库_52

 

 查询工资高于30号部门所有人的员工信息:

mysql 一对多合并 mysql合并多个结果集_数据库_53

 

查询工作和工资与妲己完全相同的员工信息:

mysql 一对多合并 mysql合并多个结果集_外键_54

 

查询有2个以上直接下属员工的信息:

mysql 一对多合并 mysql合并多个结果集_外键_55

 

查询员工编号为7788的员工名称,员工工资部门名称部门地址:

mysql 一对多合并 mysql合并多个结果集_数据_56

 

 

自连接:

 查询7369员工编号,姓名,经理编号,经理姓名:

mysql 一对多合并 mysql合并多个结果集_mysql 一对多合并_57

上述方法只能查出一个经理的名称

 

自连接:自己连接自己,起别名:

mysql 一对多合并 mysql合并多个结果集_数据_58