咱们在运用MySql数据库时,总是会碰到需求查询多个表的状况,下面就让小编介绍一些多表查询的方法方法吧。

一、多表查询的定义

    所谓多表查询顾名思义便是一次性查询多个数据表。在咱们的运用过程中,咱们碰到的多表查询的方法有内衔接查询、外衔接查询、自衔接查询、联合查询、子查询、标量子查询、行子查询、列子查询、表子查询。

二、 多表查询的具体运用

注:下面一切查询都是根据下面展现的表student与表course。 表student的内容:

数据库的多表查询
表course的内容:
数据库的多表查询

1.内衔接查询

1)隐式内衔接

     隐式查询实际上相似直接运用select * from 表 where 条件字段=条件值,只不过区别是隐式查询需求查询的表有两个、后面跟的条件别离坐落两个不同的表;但相同的是两者都有关键字where。 (1)根本格局

select 需求显现的字段 from1,表2 [where1条件=表2条件];

(2)运用示例 示例1:显现表studnet的StudentId字段与表course的StudentId字段持平的一切数据 解决方案: 代码展现:

 select * from student s,course c where s.StudentId=c.StudentId;

图片展现:

数据库的多表查询

示例2:显现表studnet的StudentId字段与表course的StudentId字段持平一切数据的StudentName值与CourseName值

 select s.StudentName,c.CourseName from student s,course c where s.StudentId=c.StudentId;

数据库的多表查询
(阐明:上述查询代码form后面接上的 student s,course c中s是student的别号,c是course的别号。)

2)显现内衔接

    在显现内衔接查询中,运用的关键字为[inner] join……on……,但在咱们运用的过程中inner能够省掉不码。 (1)根本格局

select 需求显现的数据 from1 [inner] join2 on1条件=表2条件;

(2)运用示例 示例1:显现表studnet的StudentId字段与表course的StudentId字段持平的一切数据 解决方案: 代码展现:

select * from student s inner join course c on s.StudentId=c.StudentId;

图片展现:

数据库的多表查询
示例2:显现显现表studnet的StudentId字段与表course的StudentId字段持平一切数据的StudentName值与CourseName值

 select s.StudentName,c.CourseName from student s inner join course c on s.StudentId=c.StudentId;

数据库的多表查询

2.外衔接查询

    在显现外衔接中,不管是左外衔接还是右外衔接,它们运用的一起关键字为……join ……on……。

1)左外衔接查询

(1)根本格局

select 字段列表 form 表1 left [outer] join2 on 条件;

(2)查询规模 左外查询查询的数据包括表1的数据与表1交表2的数据,即

数据库的多表查询

(3)运用示例 示例1:查询表student中字段StudnetId值等于course表中StudentId的值的一切数据

select * from course c left join student s on c.StudentId=s.StudentId;

数据库的多表查询

示例2:咱们需求查找student表中学生选择的课程名称,那么咱们能够用下面这用方法查询

select c.CourseName,s.StudentName from course c left join student s on c.StudentId=s.StudentId;

数据库的多表查询

2)右外衔接查询

(1)根本格局

select 字段列表 form 表1 right [outer] join2 on 条件;

(2)查询数据阐明 右外衔接查询查询得到的数据来源与表2以及表1与表2交集部分之和的数据,即

数据库的多表查询

(3)运用示例

示例1:同上面示例1

select * from student s right join course c on c.StudentId=s.StudentId;

数据库的多表查询
示例2:同上述示例2

select c.CourseName,s.StudentName from student s right join  course c on c.StudentId=s.StudentId;

数据库的多表查询

3)两种外衔接查询之间的联络

    经过上述两个示例,咱们很清晰的能够看出来,当咱们运用右外衔接查询想要查询出与左外衔接查询一样的数据时,咱们只需求将两个表的位置彼此互换即可。在运用过程中,一般运用左外衔接查询次数较多。一般的右外衔接查询也能够转换成左外衔接查询。

3.自衔接查询

    所谓自衔接查询,它便是先经过将一张表经过取别号的方法看成两张表,再经过内衔接查询或外衔接查询的一个过程。

1)查询格局

查询格局能够见上述两种查询。

2)运用示例

示例1:经过自衔接的方法查询表中的一切数据

select * from Student s1 join Student s2 on s1.StudentName=s2.StudentName;

数据库的多表查询

3)运用规模

    经过上图,咱们不难看出自衔接就相当于查询一个表两次,那么咱们什么时候运用自衔接查询合适呢?在咱们建立的表中,当某一个字段的值指向另一个字段时,咱们在查询的过程中能够运用自查询,来查询两个字段的指向联系。

4.联合查询

    联合查询,便是经过union或许union all将两次的查询成果在一张表上出现出来。但union与union all的区别是,union all是将两次查询成果直接相衔接,不做去重处理;而union不但将两次成果相衔接,还会有出重操作。不过,需求注意的是:联合查询的多张表需求有相同的行数以及相同的字段。

1)根本格局

select 需求显现字段 from1 [条件]
union
select 需求显现字段 from2 [条件]

2)运用示例

例如,显现表student中CourseId为”c002″与StudentId大于”s002″的数据

数据库的多表查询

总结

    当咱们需求查询多个表或许查询一个表中存在某种联系的两列数据时,咱们能够运用多表查询。在上述的多表查询的方法中,衔接查询便是直接查询一个或许两个表中契合某一个条件的一切数据,而联合查询得到的数据便是将两次查询的成果连在一张表中出现出来。