数据库的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;
自连接
所谓的自连接无非就是所有参与连接的表为同一张表而已。
总结
交叉连接就是笛卡尔积,是所有连接的基础操作;
自然连接不需要手写条件,但要求两张表有同名的属性才有意义,所以往往不够灵活;
内连接可以自己指定条件,所以很灵活和实用;
外链接在内连接的基础上增加了“保全”机制而已;
综上所述,不要被这一个个的专有名词给搞混了,其实本质上差不多,等到运用的时候根据需要自然知道使用那一种连接。
- 数据库的Join操作
- 【转载】数据库JOIN操作
- 浅谈数据库中join操作
- 浅谈数据库中join操作
- hive的join操作
- hive的join操作
- SQL的join操作
- pairRDD的join操作
- mysql的join操作
- mysql的join操作
- 数据库 join的解析
- 数据库的join
- 数据库的join连接
- 数据库join及其join子句的意义
- mysql数据库join、left join与right join 的区别
- 数据库查询中的连接操作(join)
- Idea数据库操作(Inner Join)
- Idea数据库操作(Left Join)
- IO流四种基本的文件复制方式的复制及速度比较
- java使用ftpapi上传文件
- 关于数据集dataset的排序
- 局域网时间同步的方法
- mysql多版本并发控制
- 数据库的Join操作
- 12.UISwitch
- 统一编程接口——外观模式
- 括号配对问题
- windows redis 学习指南
- hadoop伪分布式安装
- Android 通知栏NotificationManager设置
- Spring 4.2.4.RELEASE MVC 学习笔记 - 5 - Log4j(咋个办呢 zgbn)
- 使用windows2003多台服务器网络负载平衡注意事项