皇家赌场手机版oracle表连接——处理连接过程中

一般来说,我们为了得到更完整的结果,我们需要从两个或更多的表中获取结果,我一般都是用select xxx,xxx from 表1,表2 where 表1.xxx=表2.xxx,我们一般都是进行的是这般的操作,其实mysql中还有一种操作,那就是join的操作,例如底下有两个表:

  一个数据表基本上很难满足我们的查询要求,同时,将所有的数据都保存在一个表格中显然也不是一种好的数据库设计,为了避免数据的冗余,删除、更新异常,我们通常需要建立一张外键表,通过表连接,来获取我们自己想要得到的数据,所以在数据查找中,表连接是一个经常使用到的操作,下面我们来看看两个或者几个表有哪些方式是可以连接的。

请看 "Persons" 表:

  经常遇到的问题:我们或许在表连接的过程中用于连接的另外一张表数据为空,导致某些数据得不到。我们要怎么解决呢?????

接下来请看 "Orders" 表:

  我们就先从介绍表连接的方式开始,在介绍的过程中,就会得到解决。

以上的这两个表,然后我们把它们进行连接查询


SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM Persons, OrdersWHERE Persons.Id_P = Orders.Id_P

 

结果集:

假如我们有下面两张数据表

如果使用关键词JOIN来从两个表中获取数据

请看 "Persons" 表:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsINNER JOIN OrdersON Persons.Id_P = Orders.Id_PORDER BY Persons.LastName
Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

结果集:

请注意,"Id_P" 列是 Persons 表中的的主键。这意味着没有两行能够拥有相同的 Id_P。即使两个人的姓名完全相同,Id_P 也可以区分他们。

则inner join 与上面的普通查询没有区别

接下来请看 "Orders" 表:

不同的 SQL JOIN

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

JOIN: 如果表中有至少一个匹配,则返回行 LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行 FULL JOIN: 只要其中一个表中存在匹配,就返回行

请注意,"Id_O" 列是 Orders 表中的的主键,同时,"Orders" 表中的 "Id_P" 列用于引用 "Persons" 表中的人,而无需使用他们的确切姓名。

LEFT JOIN 关键字语法

请留意,"Id_P" 列把上面的两个表联系了起来。

"Persons" 表:


"Orders" 表:

方式1:根据两个或多个表中的列之间的关系

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsLEFT JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName

  我们可以通过引用两个表的方式,从两个表中获取数据:

结果集:

  谁订购了产品,并且他们订购了什么产品?

SQL RIGHT JOIN 关键字

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM Persons, OrdersWHERE Persons.Id_P = Orders.Id_P 

"Persons" 表:

 

"Orders" 表:

结果集:

本文由皇家赌场手机版发布于首页,转载请注明出处:皇家赌场手机版oracle表连接——处理连接过程中

相关阅读