数据库中的各个表中存储着不同的数据,用户往往需要用多个表中的数据来组合、提炼出所需要的信息。如果一个查询需要对多个表进行操作,就称为连接查询。连接查询的结果集或结果表称为表之间的连接。查询实际上是通过各个表之间共同列的关联性来查询数据的,它是关系型数据库查询最主要的特征。
实现连接的结果是在向数据库增添新类型的数据方面没有限制,具有很大的灵活性。通常总是通过连接创建一个新表,以包含不同表中的数据。如果新表有合适的域,就可以将它连接到现有的表。
1.简单连接操作
最简单的连接方式是在SELECT语句的FROM子句中用逗号将不同的基表隔开,使用WHERE子句创建的同等连接是使第一个基表中一个或者多个列中的值与第二个基表中相应的一个或者多个列的值相等的连接。这样在查询结果中只显示两个基表中列的值相匹配的行。但是值得注意的是,无论不同表中的列是否具有相同的列名,都相应的通过增加表名来限制列名。
例如,在数据库“销售关系系统”中,从“业务员信息”和“客户信息”连个表中,查询“业务员编号”大于1004,并且在SELECT列表中增加一个列“业务员编号”:
SELECT 业务员信息.业务员编号,业务员信息.业务员编号,客户信息.客户姓名,客户信息.客户地址,客户信息.联系电话
FROM 业务员信息,客户信息
WHERE 业务员信息.业务员编号=客户信息.所属业务员编号 AND 业务员信息.业务员编号>1004
执行后,便是我们条件的结果。
在该查询中,我们也可以使用相关名称,“业务员信息”表用别名A代替,“客户信息”表用B代替,当引用这连个表时,除了FROM子句外,在SELECT语句的任何地方都可以使用A和B,那么我们上述的语句就变成了:
SELECT A.业务员编号,A.业务员编号,B.客户姓名,B.客户地址,B.联系电话
FROM 业务员信息 A ,客户信息 B
WHERE A.业务员编号=B.所属业务员编号 AND A.业务员编号>1004
其执行结果,和前面的完全相同。
这也为后面的多个表的连接的 学习奠定了基础。例如,在数据库“珠宝销售系统”中,基于“珠宝信息”、“珠宝商信息”和“销售明细信息”三个表创建一个查询。要求返回“珠宝信息”表中的列“珠宝名称”,“珠宝商信息”表中的列“珠宝商姓名”和“销售明细信息”表中的列“利润”:SELECT A.珠宝名称,B.珠宝商姓名,C.利润
FROM 珠宝商信息 AS A ,珠宝商信息 AS B,销售明细信息 AS C
WHERE A.珠宝代号=C.珠宝代号 AND A.珠宝商编号=B.珠宝商编号
执行后,便是所查询结果集。
2.内连接
内连接是最常用的连接查询,一般用INNER JION关键字来指定内连接。但是,INNER不是必需的。如果只用JOIN关键字,还必须定义一个ON子句。内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接的列值。
2.1等值连接
所谓等值连接解释在连接条件中使用等于号(=)运算符比较被连接列的值,其查询结果中列出被连接表中的所有列,包括其中的重复列。换句话说,基表之间的连接通过相等的列值连接起来的查询就是等值连接查询。
等值连接查询可以用两种表示方式来指定连接条件。例如,在数据库“销售关联系统”中,基于“商品信息”和“供应商信息”两个表创建一个查询。限定查询条件为两个表中的“供应商编号”相等时返回,并要求返回的列为“商品信息”表中的“商品名称”和“供应商信息”表中的列“供应商名称”、“联系人姓名”。
SELECT A.商品名称,B.供应商名称,B.联系人姓名,A.单价
FROM 商品信息 A,供应商名称 B
WHERE A.供应商编号=B.供应商编号
在上述语句的WHERE子句中,用"="指定查询为等值连接查询。
还可以在查询语句的FROM子句中使用INNER JOIN关键字连指定查询是等值连接查询。
SELECT A.商品名称,B.供应商名称,B.联系人姓名,A.单价