0
点赞
收藏
分享

微信扫一扫

redis哨兵模式原理

唯米天空 2023-06-02 阅读 61

前言

我们之前在讲解 SQL 语句的时候,讲解了 DQL 语句,也就是数据查询语句,但是之前讲解的查询都是单表查询,而本章节我们要学习的则是多表查询操作上章讲到2.3本章继续

目录

MySQL

2.3 分类

 5.3 内连接

1). 隐式内连接

2). 显式内连接

5.4 外连接

1). 左外连接

2). 右外连接

5.5 自连接

5.1 自连接查询

5.2 联合查询


MySQL

2.3 分类

    连接查询

内连接:相当于查询 A B 交集部分数据

外连接:

左外连接:查询左表所有数据,以及两张表交集部分数据

右外连接:查询右表所有数据,以及两张表交集部分数据

自连接:当前表与自身的连接查询,自连接必须使用表别名

子查询

 5.3 内连接

 据。(也就是绿色部分的数据)

内连接的语法分为两种 : 隐式内连接、显式内连接。先来学习一下具体的语法结构。

1). 隐式内连接

SELECT 字段列表 FROM 表1 , 表2 WHERE 条件 ... ;

2). 显式内连接

SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 ... ; 

案例:

  查询每一个员工的姓名 , 及关联的部门的名称 ( 隐式内连接实现 )

表结构 : emp , dept

连接条件 : emp.dept_id = dept.id

select emp.name , dept.name from emp , dept where emp.dept_id = dept.id ;
-- 为每一张表起别名,简化SQL编写
select e.name,d.name from emp e , dept d where e.dept_id = d.id;

B. 查询每一个员工的姓名 , 及关联的部门的名称 ( 显式内连接实现 ) --- INNER JOIN ...

ON ...

表结构 : emp , dept

连接条件 : emp.dept_id = dept.id

select e.name, d.name from emp e inner join dept d on e.dept_id = d.id;
-- 为每一张表起别名,简化SQL编写
select e.name, d.name from emp e join dept d on e.dept_id = d.id;

表的别名 :

. tablea as 别名 1 , tableb as 别名 2 ;

. tablea 别名 1 , tableb 别名 2 ;

5.4 外连接

 外连接分为两种,分别是:左外连接 和 右外连接。具体的语法结构为:

1). 左外连接

SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;

左外连接相当于查询表 1( 左表 ) 的所有数据,当然也包含表 1 和表 2 交集部分的数据。

2). 右外连接

SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ; 

右外连接相当于查询表 2( 右表 ) 的所有数据,当然也包含表 1 和表 2 交集部分的数据。

案例: 查询 emp 表的所有数据 , 和对应的部门信息

由于需求中提到,要查询 emp 的所有数据,所以是不能内连接查询的,需要考虑使用外连接查询。

表结构 : emp, dept

连接条件 : emp.dept_id = dept.id

select e.*, d.name from emp e left outer join dept d on e.dept_id = d.id;
select e.*, d.name from emp e left join dept d on e.dept_id = d.id;

查询 dept 表的所有数据 , 和对应的员工信息 ( 右外连接 )

由于需求中提到,要查询 dept 表的所有数据,所以是不能内连接查询的,需要考虑使用外连接查

询。

表结构 : emp, dept

连接条件 : emp.dept_id = dept.id

select d.*, e.* from emp e right outer join dept d on e.dept_id = d.id;
select d.*, e.* from dept d left outer join emp e on e.dept_id = d.id;

5.5 自连接

5.1 自连接查询

自连接查询,顾名思义,就是自己连接自己,也就是把一张表连接查询多次。我们先来学习一下自连接的查询语法:

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ;

而对于自连接查询,可以是内连接查询,也可以是外连接查询。

案例: A. 查询员工 及其 所属领导的名字 表结构 : emp

select a.name , b.name from emp a , emp b where a.managerid = b.id;

B. 查询所有员工 emp 及其领导的名字 emp , 如果员工没有领导 , 也需要查询出来

表结构 : emp a , emp b

select a.name '员工', b.name '领导' from emp a left join emp b on a.managerid =
b.id;

5.2 联合查询

对于 union 查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。

SELECT 字段列表 FROM 表A ...
UNION [ ALL ]
SELECT 字段列表 FROM 表B ....;

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。

union all 会将全部的数据直接合并在一起, union 会对合并之后的数据去重

案例: A. 将薪资低于 5000 的员工 , 和 年龄大于 50 岁的员工全部查询出来 .

当前对于这个需求,我们可以直接使用多条件查询,使用逻辑运算符 or 连接即可。 那这里呢,我们

也可以通过 union/union all 来联合查询 .

select * from emp where salary < 5000
union all
select * from emp where age > 50;

 union all查询出来的结果,仅仅进行简单的合并,并未去重。

select * from emp where salary < 5000
union
select * from emp where age > 50;

 union 联合查询,会对查询出来的结果进行去重处理。

注意: 如果多条查询语句查询出来的结果,字段数量不一致,在进行 union/union all 联合查询时,将会报 错。如:

举报

相关推荐

0 条评论