多表查询,2021全网最好没有之一

  • 开始准备:创建student数据库,book表,study表。用于下面实操
use student;
create table book(id int(3) PRIMARY key,book char(3));
create table study(name char(3),id int(3) PRIMARY key);

插入一定数据:

insert into book(id,book) values(1,"西游记"),(2,"水浒传"),(3,"红楼梦")
insert into study(id,name) values(1,"小米"),(2,"荒天帝"),(3,"段德")

多表查询 如何创建索引 创建多表选择查询_多表查询 如何创建索引

  • 定义:

经常使用多表查询。多表查询就是同时查询两个或两个以上的表(内查询也可以看成两个表)

在 MySQL 中,多表查询主要有 交叉连接,内连接,外连接,子查询

交叉查询

交叉连接,一般用来返回连接表的[迪卡尔积](笛卡尔乘积_百度百科 (baidu.com))

select *
from <name> cross join <name>
where
/*<name>表示表名*/

实例:

select *
from study CROSS join book

多表查询 如何创建索引 创建多表选择查询_c++_02

内连接

内连接使用inner join 关键字连接两张表

select *
from <name> <name> inner join <name> [on 语句]

实例:

select *
from study inner join book
where study.id = 

#其实我们也可以用之前的知识来写

select *
from study,book
where study.id = 

多表查询 如何创建索引 创建多表选择查询_c语言_03

大家可以看到,这里生成了重复的列 在mysql中会自动在后面添加(1)

我们在编程时其实可以,

select study.name,book.*
from study inner join book
where study.id = 

这样改变,去重

多表查询 如何创建索引 创建多表选择查询_算法_04

外连接

左外连接

左连接以左表为基础,显示左表中的所有记录:

显示的记录条数 = 左表中记录的条数

再用左表中的指定列,来和右表中的指定列比较。满足,则输出值;不满足,则输出 NULL

使用left outer join关键字 连接两个表,可简写为left join

select *
from <name> left join <name>
[on 语句]

实例:

当然我们这里所以都是刚好满足的所以我们添加一个数据

INSERT study(id,name) VALUES(10,"hh")

多表查询 如何创建索引 创建多表选择查询_c++_05

select study.name,book.*
from study LEFT JOIN book
on study.id =;

多表查询 如何创建索引 创建多表选择查询_多表查询_06

右外连接

右连接与左连接正好相反,右连接以右表为基础,显示右表中的所有记录:

显示的记录条数 = 右表中记录的条数

再用右表中的指定列,来和左表中的指定列比较。满足,则输出值;不满足,则输出 NULL。

使用right outer join,连接两个表,可以简写为right join

select *
from <name> right outer join<name> [on 语句]

实例:略

全连接

全连接类似于左连接和右连接的综合:

显示记录的条数 = 指定比较字段在两个表中的不同种类数

对于空余字段,则显示 NULL 。也就是说,它能返回两个表中所有的关联信息,以及所有没有被关联到的信息。

实例:

为了让结果跟明显,我们再添加两个数据

mysql是没有全外连接的(mysql中没有full outer join关键字),想要达到全外连接的效果,可以使用union关键字连接左外连接和右外连接

INSERT book(id,book) VALUES(88,"io"),(33,"hi")
select study.name,book.*
from study LEFT JOIN book
on study.id =
UNION
select study.name,book.*
from study RIGHT SJOIN book
on study.id =

多表查询 如何创建索引 创建多表选择查询_c语言_07

嵌套查询(子查询)

子查询可以进行多层嵌套,经常出现在where语句中

select *
from <name>
where <字段> 操作符 (子查询)

实例:

查询,再study表中name=”荒天帝“ ,借的书

select book
from book
where id = (select id from study where name="荒天帝")

多表查询 如何创建索引 创建多表选择查询_算法_08

如有疑问,请留言