关系数据库中的查询往往不是仅限于单表的,而是在很多表之间的连接查询。连接包括以下几种:
一、内部连接;二、外部连接;三、完全连接;四、交叉连接。今天就介绍第一种——内部连接。
首先看一下内部连接的语法结构:
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
当然连接不止限于两个表之间的,可以是很多的。内部连接和关系代数中的自然连接很类似。顺便复习一下关系代数中的自然连接。
自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。若R和S具有相同的属性组B,则自然连接的形式定义为:
举个例子如下:
部门表和雇员表相同的属性组是 DeptName,自然连接时就把相同属性组中,属性值相同的元组组合在一起形成新的元组。
复习完自然连接,再看内部连接,所有的SQL查询都是遵循关系代数的,关系代数学的好坏,直接关系到SQL语句的理解。所以,像连接、投影、除法等基本的关系代数一定要弄清楚。
接下来以Northwind数据库为例介绍内部连接查询。
1、先弄一个简单的例子:在Microsoft SQL Server Management Studio 中新建查询,输入以下语句:
SELECT *
FROM Products
INNER JOIN Suppliers
ON Products.SupplierID = Suppliers.SupplierID
部分结果如图:
从结果可以看都,把Products和Suppliers表中SupplierID属性列中值相等的元组连接在了一起。当然可以不使用 SELECT * 来选择全部列,而是选择一部分。另外可以再加上where子句来缩小范围。比如下面的语句:
SELECT p.ProductID, s.SupplierID, p.ProductName, s.CompanyName
FROM Products p
INNER JOIN Suppliers s
ON p.SupplierID = s.SupplierID
WHERE p.ProductID < 4
结果如下:
当然可以改写成等价的用SELECT ……WHERE来实现的连接查询。如上面的例子可以改写为:
SELECT p.ProductID, s.SupplierID, p.ProductName, s.CompanyName
FROM Products p,Suppliers s
WHERE p.SupplierID = s.SupplierID AND p.ProductID < 4
结果是一样的。
需要说明的是写内部连接时一般省略 INNER关键字,而只用JOIN,因为默认情况下就是内部连接。
好了,内部连接就到这里……,熟练应用才是王道。。。。