Oracle学习day-28:多表查询

2019-08-19  本文已影响0人  开源oo柒

一、多表连接查询

1.多表连接语法

主要解决目标数据分布在不同的表中(如果目标数据不再一张表,可以通过多表连接查询解决。

(1)多表链接的语法:
Select 表名1.列名1,表名2.列名2,...from 表名1,表名2...where子语句;

(2)多表链接需要注意:

1)先确定需要查询的列分布那些表中,在确定表之间关联关系(主外键关联关系)。

2)通过添加where子句限制查询结果,避免笛卡尔乘积。

(3)笛卡尔积:

笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积,又称直积,表示为X*Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。

2.等值连接

在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

1) 当被连接的多个表中存在同名字段时,须在该字段前加上"表名."前缀。

2) 使用表别名可以简化查询。

3)使用表名(表别名)前缀可提高查询效率。

4)可使用AND 操作符增加查询条件。

3.使用表别名

为表起别名,与列别名相似,在from后的表名空格加上别名;

from 表名  别名,...表名 别名,

4.非等值连接

二、自连接、外连接、内链接

1.自连接

表示表格自身连接自身(代表父子关系:递归);

2.外连接

只限制一张表中的数据必须满足连接条件,而另一张表中的数据可以不满足连接条件的连接方式。

(1)左连接:两个表在连接过程中除返回满足连接条件的行以外,还返回左表中不满足条件的行。

实现方法:

(2)右连接:两个表在连接过程中除返回满足连接条件的行以外,还返回右表中不满足条件的行。

实现方法:

(3)全外连接: 两个表在连接过程中除返回满足连接条件的行以外,还返回两个表中不满足条件的所有行,这种连接称为全外连接。

3.自然链接

Natural join基于两个表中的全部同名列建立连接。

1)从两个表中选出同名列的值均对应相等的所有行;

2)如果两个表中同名列的数据类型不同,则出错;

3)不允许在参照列上使用表名或者别名作为前缀;

4)自然连接的结果不保留重复的属性;

(1)using子句:

如果不希望参照被连接表的所有同名列进行等值连接,自然连接将无法满足要求,可以在连

接时使用USING子句来设置用于等值连接的列(参照列)名。

注意:using子句引用的列在sql任何地方不能使用表名或者别名做前缀。

4.内连接

进行连接的两个表对应的相匹配的字段完全相同的连接。只返回满足连接条件的数据。

5.交叉连接

交叉连接通过cross产生了一个笛卡尔积,其效果等同于在两个表进行连接时未使用where子句限定连接条件;

注意:在笛卡尔积中, 有很多数据是无意义的, 所以需要消除,可以通过where子句来消除。

上一篇下一篇

猜你喜欢

热点阅读