美文网首页
MySQL5.5多表之连接查询

MySQL5.5多表之连接查询

作者: 三斤耳朵 | 来源:发表于2017-11-08 10:10 被阅读944次

连接查询

关系型数据库管理系统中,通常将每个实体的所有信息存放在一张表中,当查询数据时,通过连接操作查询多个表中的实体信息,当两个或多个表中存在相同意义的字段时,便可以通过这些字段对不同的表进行连接查询,连接查询包括交叉连接查询、内连接查询、外连接查询,本节将针对这些连接查询进行详细的讲解。

1、交叉连接查询

交叉连接返回的结果是被连接的两个表中所有数据行的笛卡尔积。

简化说明为:两列数据各从各列中取一个组成不同的组合,一共有多少种方式。

那为了我们能够进行数据查询,我们首先要往我们的数据库中插入部分数据。

insert into class (classname) values ('软件161'),('移应161'),('移应171');

注意:我们这里要先插入class表格的数据,再插入student表格的数据,这是由我们外键约束决定的:必须要先有班级才能将学生归为该班内。

insert into student(name , classid) values ('赵','1'),('钱','2'),('孙','3'),('李','2');

之后再插入学生数据,这个学生分班情况,要和学校实际有的班级相对应,既符合逻辑又符合外键。

然后咱们再来做咱们的交叉连接,首先是交叉连接的基本格式:

SELECT * FROM table1 CROSS JOIN table2;

那我们实际项目中的交叉连接应该怎么写?

最后我们通过查询交叉连接查询出来的内容应该是有3X4,这么多条的。

不过,实际开发中这种业务需求是很少见的,一般不会使用交叉连接,而是使用具体的条件对数据进行有目的的查询。

2、内连接

内连接(Inner Join)又称简单连接或自然连接,是一种常见的连接查询。

内连接使用比较运算符对两个表中的数据进行比较,并列出与连接条件匹配的数据行,组合成新的纪录。

也就是说只有满足内连接条件的记录才能出现在查询结果中。

SELECT row_name FROM table1 [INNER可以省略] JOIN table2 ON table1.row_name = table2.row_name;

row_name指的是字段,那我们来看一下具体查询

SELECT * FROM class JOIN student ON class.id = student.classid;

查询的结果是我们对应班级的同学被归类到对应的班级上了。

当然了,我们实现需求的方法不止一个,对吧:

SELECT class.classname , student.name FROM class,student WHERE class.id = student.classid;

从查询结果看,使用WHERE子句查询结果与使用INNER JOIN 的查询结果是一致的。

需要注意的是,这两个语句的查询结果虽然相同,但是INNER JOIN是内连接语句,WHERE是条件判断语句,在WHERE语句后可以直接添加其他条件,而INNER JOIN语句不可以。

2.1、自连接

如果在一个连接查询中,涉及的两个表是同一个表,这种查询称为自连接查询。

自连接是一种特殊的内连接,它是指相互连接的表在物理上为同一个表,但逻辑上分为两个表,例如要查询‘李’这个同学班级里面还有哪些同学。

SELECT p2.* FROM student p1 JOIN student p2 ON p1.classid = p2.classid where p1.name='李';

但是在教学过程中,学生出现了这样的一个问题,命令行如下:

SELECT p2.* FROM student p1 JOIN student p2 ON p1.classid = p2.classid where p2.name='李';

查询结果如下:

原因分析:

原因分析方法:数据库学习时分析原因的方法类似于断点调试法,将命令行分段修改,查找原因。

SELECT * FROM student p1 JOIN student p2 ;

SELECT p2.* FROM student p1 JOIN student p2 where p2.name='李';

SELECT p2.* FROM student p1 JOIN student p2 ON p1.classid = p2.classid ;

3、外连接

内连接查询中,返回的结果只包含符合查询条件和连接条件的数据,然而有时还需要包含没有关联的数据,即返回查询结果中不仅包含符合条件的数据,而且还包括左表(左连接或左外连接)、右表(右连接或右外连接)或两个表(全外连接)中的所有数据,此时就需要使用外连接查询,外连接分为左连接和右连接。

首先我们先看一下外连接的语法格式

SELECT row_name FROM table1 LEFT||RIGHT [OUTER可以省略] JOIN table2 ON table1.row_name = table2.row_name WHERE condition.

那同样的两张表格怎样区分左表和右表呢?这个内容就简单粗暴了:以JOIN关键字做区分,关键字左边的被称为左表,关键字右边的被称为右表。

废话不多说,咱们直接上案例代码

为了显示效果的不同,我们先向class表中插入一条数据

insert into class (classname) values ('软件171');

3.1左连接

我们利用一下左连接,查出如下效果。

左连接的结果包括LEFT JOIN子句中指定的左表的所有记录,以及满足连接条件的记录。如果左表的某条记录在右表中不存在,则在右表中显示为空。

从实际的结果来看,显示了五条记录,并且软件171班没有记录在册的学生。

咱们同学开动一下脑筋,右连接应该有什么样的一个效果?

复合条件连接查询

符合条件查询就是在连接查询的过程中,通过添加过滤条件来限制查询结果,是查询结果更加精确。

本文多出自于传智播客教学内容。

相关文章

  • MySQL5.5多表之连接查询

    连接查询 关系型数据库管理系统中,通常将每个实体的所有信息存放在一张表中,当查询数据时,通过连接操作查询多个表中的...

  • SQL语句常用命令整理---多表查询

    多表查詢之关连查询 多表数据连接查询,简称连接查询。本篇我们来一同学习多表连接查询的相关用法,主要內容有: 内连接...

  • MySQL 基础 6 多表查询

    1.1 多表查询的概述 1.1.1 多表查询的分类 1.1.1.1连接查询 交叉连接:cross join交叉连接...

  • 003 多表查询, 事务和DCL.

    多表查询 多表查询: 笛卡尔积.内连接查询隐式内连接 : 使用where.eg: select * from ...

  • Fourth Day

    /-----------------------------------多表连接查询---------------...

  • Oracle详解(Ⅱ):世界上目前已知最好的关系型数据库

    多表查询 多表连接基本查询 使用一张以上的表做查询就是多表查询 这样会出现的结果就是:笛卡儿积连接查询的时候一般在...

  • Oracle连接_子查询

    多表查询:多张表关联在一起进行查询,在多表查询中会频繁的使用表的别名。连接:内连接(等值连接):select 列名...

  • 2018-08-30

    今天学习了Oracle的多表连接,组函数,分组查询,子查询,常用函数。 多表连接有三种类型:内连接,外连接,自连接...

  • SQL-连接查询

    连接查询 又叫:多表查询、多表连接含义:当查询的子都啊来自多个表时,就会用到连接查询 笛卡尔乘积现象:表1有m行,...

  • python面试题01

    1、什么是多表关联查询,有几种多表关联的查询方式,分别是什么? 多表关联查询概念: 多表关联查询分类:1.1内连接...

网友评论

      本文标题:MySQL5.5多表之连接查询

      本文链接:https://www.haomeiwen.com/subject/oyzkmxtx.html