问题阐述

为了方便查看多个数据表内容,如何通过SQL 语句实现多表查询?

专家解答

在实际项目开发过程中,经常需要将不同的信息存储在不同的表中,表与表之间通过某字段互相联系,从而使表的指针形成一种联动关系,从而可以通过SQL 语言的SELECT 语句实现多表查询。在SQL 语言中,通过where 子句实现多表查询,所要查找的字段名最好以“表名.字段名”格式表示,这样可以防止因表之间字段重名而造成无法获知字段属于哪个表。在where 子句中多个表之间所形成的联动关系应按“表1.字段=表2.字段and 其他查询条件”形式书写。综上所述,实现多表查询应按如下形式书写:

SELECT 字段名 from 表1,表2 ... where 表1. 字段 , 表2.字段 and 其他查询条件;

另外,为了提高SQL 语句的可读性,经常采取为表取别名的方式对表进行查询。使用表别名可以通过两种方式为表指定别名。

在MySQL 中,可以通过关键字as 指定返回查询结果的表别名,其语法结构如下:

SELECT 字段名 from 表名 as 表别名 where 条件...;

应用as 关键字为一般形式,其实现过程就像将两张表上的数据表插入第三张表中,并将返回的数据组合成表展现给用户。

在表名后直接加表的别名从而指定表的别名。其语法结构如下:

SELECT 字段名 from 表名 表别名 where 条件...;

多表查询的示例如下所示:

SELECT 字段名 from students as stu, studentinfo as stu_info where stu.id=stuinfo.sid;

另外,在SQL 语言中,使用union 或all 关键字可以将多张表的信息合并输出。其中union关键字可以将多个select 语句的查询结果合并输出,并且可以删除重复行,而使用all 关键字可以将多个select 语句的查询结果合并输出,但不删除重复行。

注意:

别名通常是一个缩短的表名,用于在连接中引用表中的列名,如果连接中的多个表中有相同的名称列存在,则要求必须使用表名或表的别名限定列名。另外,如果定义了表的别名就不能使用表名。

专家点评

在实际数据库查询过程中,往往会查询多个数据表中的多个字段,或者在查询过程中形成内联或相互制约条件,逐条地查询不仅费时费力,在查询过程中也不直观。通过多表查询,可以向用户展示用户所需要查看的列表及数据,从而避免不必要的麻烦。