MySQL-连表查询详

MySQL连表查询是一把双刃剑,一方面通过连表查询可以简化SQL的数量;但另一方面如果连接的表数据量较大,或者连接的表较多,其产生的笛卡尔积会成指数级增长,所以有些公司会禁用连表查询。

一、连表查询简介

连表查询即两张表或多张表联合查询,联合查询得到的结果称为笛卡尔积,假设A表中有n条记录,B表表中有m条记录,则它们联合查询得到的笛卡尔积为:n*m

大家可能听过很多种连接方式,比如内连接、外连接、自然连接、交叉连接、左连接以及右连接,但MySQL的连表查询其实只有3种:内连接、外连接、自然连接。 其中内连接等同于交叉连接,而外连接可以分为左外连接(左连接)和右外连接(右连接),仅此而已。

这是一张神图,可以辅助理解:

MySQL-连表查询详_第1张图片

不管是哪种连接,本质上都是在总的笛卡尔积下进行筛选过滤而已。

二、内连接

内连接的关键字是 INNER JOININNER JOIN等于CROSS JOIN 等于JOIN

内连接分为两种情况,一种没有筛选条件;另一种是有ON或者WHERE筛选条件,假设我们有两张这样的表:

create table `table_a` (
  `aid` int(11) NOT NULL AUTO_INCREMENT,
  `a_name` varchar(255) NOT NULL,
  `age` smallint NOT NULL,
  PRIMARY KEY(`aid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '测试表A';

create table `table_b` (
  `bid` int(11) NOT NULL

你可能感兴趣的:(MySQL,sql)