多表查询,就是多个表之间相互关联,利用这些表之间的关联来达到由一个或是多个表查询到另外一个或多个表中数据的目的。例如:学生表中有学生所修课程的id号(此id既是课程表的主键id,又作为学生表中的外键id),课程表中有教师的姓名id,这样就能由学生表中查询到所修课程的id号,再由课程id号查询到老师的姓名。多表查询一定要弄清楚多个表之间的关联是什么,才能在数据查询时不会出现查询到的结果是错误数据的情况。下面介绍一下表之间的关系与多表查询的方法。
一、关系表
SQL(用于访问和处理数据库的标准的计算机语言)最强大的功能之一就是能在数据检索查询的执行中联结(join)表,关系表的设计就是要保证把信息分解成多个表,一个数据一个表,各个表通过某些常用的值相互关联(将一个表的主键作为外键或者是关联字段存放入另一个表中。外键:在一个表中,定义一个字段,这个字段中存储的是另外一个表的主键)。表关系:即表与表之间的关系。表关系有:
(1)、一对一
有两个表,在A表中的某一行只与B表中的某一行相关,同时B表中的某一行,也只与A中的一行相关,这样的关系称为一对一关系。例如:每个人都有自己的身份证号码,而众多的身份证号码中,每一个号码都对应着唯一的那一个人。
(2)、一对多
有多张表,A表中的行可以与B表中的一到多个行相关联,但是B表中的一行只能与A表中的一行相关联,这样的关系称为一对多关系。例如:一个人可以拥有多辆汽车,由这个人可以查到这人所拥有的多辆汽车,但从汽车角度进行查询,每一辆车都只对应着这一个人。
(3)、多对多
有两个表,A表的一行可以与B表中的一到多个行相关联,同时,B表中的一行可以与A表中的一到多个行相关联,类似于这样的关系称为多对多关系。例如:学生选课,一个学生可以选修多门课程,每门课程可供多个学生选择。
二、表联结
(1)、联结是一种机制,用来在一条SELECT语句中关联表,因此称之为联结。
(2)、使用特殊的语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行。
(3)、SQL对一条SELECT语句中可以联结的表的数量没有限制。
(4)、应该保证所有联结都有WHERE子句对笛卡尔积结果进行过滤,否则MySQL将返回比想要的数据