数据库的Join操作

来源:互联网 发布:挂起网络 编辑:程序博客网 时间:2024/05/20 00:49

join clause是指在关系数据库中利用两张(或多张)表中相同的属性,讲两张(或多张)表的记录结合在一起的操作。
Join 操作主要分为三大类:

  • 交叉连接(Cross join);
  • 自然连接(Natural join);
  • 内连接(Inner join);
  • 外连接(Outer join):左连接Left outer join,右连接Right outer join,全连接Full outer join;
  • 自连接

示例

这里写图片描述

Department.DepartmentID is the primary key, while Employee.DepartmentID is a foreign key.

CREATE TABLE department( DepartmentID INT, DepartmentName VARCHAR(20));CREATE TABLE employee( LastName VARCHAR(20), DepartmentID INT);INSERT INTO department VALUES(31, 'Sales');INSERT INTO department VALUES(33, 'Engineering');INSERT INTO department VALUES(34, 'Clerical');INSERT INTO department VALUES(35, 'Marketing');INSERT INTO employee VALUES('Rafferty', 31);INSERT INTO employee VALUES('Jones', 33);INSERT INTO employee VALUES('Heisenberg', 33);INSERT INTO employee VALUES('Robinson', 34);INSERT INTO employee VALUES('Smith', 34);INSERT INTO employee VALUES('Williams', NULL);

交叉连接

SELECT *FROM employee CROSS JOIN department;

SELECT *FROM employee, department;

返回的是两张(或多张)表的笛卡尔积。那两张表举例,即第一张表的每一条记录都与第二张表的每一条记录连接。

交叉连接在实际中往往仅用来测试数据库的性能。

自然连接( ⋈)

自然连接是一个二元操作:R ⋈ S。通过对两张表的同名属性的值取等来完成连接,并且返回的结果中,同名属性只保留一列:

SELECT *FROM employee NATURAL JOIN department;

这里写图片描述

如果自然连接时没有同名的属性,则会进行交叉连接。

内连接

SELECT *FROM employee INNER JOIN department ON employee.DepartmentID = department.DepartmentID;

内连接可以看做是交叉连接加上where条件的操作:

SELECT *FROM employee, departmentWHERE employee.DepartmentID = department.DepartmentID;

这里写图片描述

左连接

SELECT *FROM employee LEFT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;

这里写图片描述

Table(A) LEFT OUTER JOIN Table(B):首先,完全保留“左表” Table(A)中的所有记录;如果对于A中的一条记录,on语句的匹配记录为0条,则在返回结果中,B的每一个属性用null表示。这一特点反应在上面的示例中就是“Williams”那一行。

右连接

右连接的特性参照左连接,类似的,保全所有“右表”的记录,无法匹配的“左表”所在行全用null表示。反映在示例中就是“Marketing”那一行:

SELECT *FROM employee RIGHT OUTER JOIN departmentON employee.DepartmentID = department.DepartmentID;

这里写图片描述

全连接

参照“左连接”和“右连接”的定义,不难理解“全连接”即指保留两张表所有的记录,无法匹配的记录的相应部分用null表示:

SELECT *FROM employee FULL OUTER JOIN departmentON employee.DepartmentID = department.DepartmentID;

这里写图片描述

自连接

所谓的自连接无非就是所有参与连接的表为同一张表而已。

总结

交叉连接就是笛卡尔积,是所有连接的基础操作;
自然连接不需要手写条件,但要求两张表有同名的属性才有意义,所以往往不够灵活;
内连接可以自己指定条件,所以很灵活和实用;
外链接在内连接的基础上增加了“保全”机制而已;

综上所述,不要被这一个个的专有名词给搞混了,其实本质上差不多,等到运用的时候根据需要自然知道使用那一种连接。

0 0
原创粉丝点击