Oracle学习day-28:多表查询
一、多表连接查询
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子句来消除。