MySQL之DQL详解(多表)

上次窝瓜给大家带来了,MySQL中对于单表的查询,这次,就给小伙伴们详细的说一下关于多表的查询操作!

在我们实际的运用之中,肯定不是单纯对一张表的查询,对于一些数据量较大的复杂关系表示,我们就需要利用主外键之间的关系进行连接,这时候,就涉及到了我们的多表查询!对于多表查询,我们将其分为四种类型,分别是:结果集的合并、内连接、外连接、子查询~

下面我们就分块来进行了解~

合并结果集

SELECT * FROM 表名
UNION ALL
SELECT * FROM表名;

合并结果集,总的来说,就是将两张需要查询的表格连接在一起,方便我们进行观察!

内连接

SELECT * FROM 表名,表名;

上面的这种操作,就和我们的LIMIT查询(分组查询)一样,用大家好理解的话来说,就是只属于MySQL的“方言”,也就是说,一旦我们使用的数据库并不是MySQL的时候(比如Oracle),这条语句也就没有用了。

SELECT * FROM 表名 INNER JOIN 表名 ON 条件;

这条命令,就是我们内连接最正规的语法了,ON关键字后边的条件,主要是为了去除我们不需要的笛卡尔积~

对于笛卡尔积,就是我们的元组在生成的时候,所产生的无用的垃圾数据,这里我们是不需要的,所以我们需要用条件将其过滤。

外连接

外连接又分为左外连接和右外连接(以下我们将之称之为左外和右外),左连接的实际含义就是查出左表的全部数据,要是右表中没有对应的数据,就用null补齐;右连接反之!

左外
SELECT * FROM 表名 LEFT OUTER JOIN 表名 ON 条件;
右外
SELECT * FROM 表名 RIGHT OUTER JOIN 表名 ON 条件;
全外
SELECT * FROM 表名 FULL OUTER JOIN 表名 ON 条件;

对于以上的方式,在MySQL中是不支持的,那么,在MySQL中我们要如何完成全外的连接方式呢?

其实很简单,只需要我们将左外、右外、合并结果集用在一块,就能解决了~

SELECT * FROM 表名 LEFT OUTER JOIN 表名 ON 条件
UNION ALL
SELECT * FROM 表名 RIGHT OUTER JOIN 表名 ON 条件;

子查询

子查询,用最简单的话来说,就是查询之中套查询,有时候,当我们需要查询的数据,是基于我们第一次所查询出的结果集之上的时候,就需要用到子查询,其没有一个固定的基本语法。

总的来说,子查询一般会以两种形式出现:

  1. 放在FROM之后作为一张新的表
  2. 放在WHERE之后,作为条件

作为表

SELECT * FROMSELECT * FROM 表名 WHERE 条件) WHERE 条件;

就像上面的这种形式,将内层SELECT语句作为第一次查询的结果,在此基础上,再次进行查询,这也是我们子查询中比较简单的一种~

作为条件

子查询作为条件出现的时候,分为三种情况,分别是:单行单列、单行多列、多行单列(还有一种多行多列的情况,实际上就是一个新表,在上面的窝瓜已经给大家给出),下面,我们就分别看看这三种情况分别对应的效果:

单行单列
SELECT * FROM 表名 WHERE 列名 [=><>=<=<>] (SELECT * FROM 表名 WHERE 条件);
单行多列
SELECT * FROM 表名 WHERE [INALLANY] (SELECT * FROM 表名 WHERE 条件);
多行单列
 SELECT * FROM 表名 WHERE (列名,列名) IN (SELECT * FROM 表名 WHERE 条件);

以上就是我们对于DQL多表的一下讲解,到这里,我们关于SQL的四大操作DDL、DML、DCL、DQL就全部给大家将完了!

要是有任何讲的不对的地方,欢迎大家在评论给出指导,谢谢大家~

发布了7 篇原创文章 · 获赞 0 · 访问量 492

猜你喜欢

转载自blog.csdn.net/weixin_43754669/article/details/104078789
今日推荐