您的位置:首页 > 数据库 > Oracle

ORACLE数据库---多表链接查询

2016-07-24 17:24 477 查看
ORACLE多表连接查询
一.概念

1.主键 PRIMARY KEY

约束唯一标识数据库表中的每条记录。

a.主键必须包含唯一的值。

b.主键列不能包含 NULL 值。

b.每个表都应该有一个主键,并且每个表只能有一个主键。

 

2.外键 FOREIGN KEY

一个表中的FOREIGN KEY指向另一个表中的PRIMARYKEY。

另一张表中与这张表的某个字段的类型及字段名相同的字段,一般是用作关联两张或两张以上的数据表时用的。

 

3.关系

外键一定是另外某个表的主键

例如: WHEREemp.deptno=dept.deptno

 

 

二.普通查询

概念:无条件的连表查询,会产生笛卡尔积

范例:

SELECT * FROM emp,dept

 

 

三.内连接查询  重点

连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。

1、等值连接

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

语法:

SELECT column_name(s)

FROM table1,table2

WHERE table1.column_name=table2.column_name

 

说明:

在表中应存在至少一个匹配时,才会关键字返回行。

 

2、自连接

自己和自己的镜像进行比较,使用内连接或外连接把一个表中的行同该表中另外一些行连接起来.

SELECT ta.column_name,tb.column_name

FROM table1 ta ,table1 tb

WHERE ta.column_name1=tb.column_name2

 

说明:

它主要用在查询比较相同的信息。为连接同一个表,必须为该表在FROM子句中指定两个别名,这样才能在逻辑上把该表作为两个不同的表使用。

 

 

四.外连接查询  重点

概念:即在等值连接的基础上,加上被连接表的不匹配数据.

1.左连接

从左表(table1)那里返回所有的行,即使在右表(table2)中没有匹配的行。

语法:

SELECT *

FROM table1,table2

WHERE table1.column_name=table2.column_name(+)

 

2.右连接

从右表(table2)那里返回所有的行,即使在左表(table1)中没有匹配的行。

语法:

SELECT *

FROM table1,table2

WHERE table1.column_name(+)=table2.column_name

 

五.1999语法(了解)

(一)内连接

1.等值连接

关键字:INNER JOIN ...ON

SELECT column_name(s)

FROM table_name1

INNER JOIN table_name2

ON table_name1.column_name=table_name2.column_name

 

(二)外连接

2.左(外)连接

关键字:LEFT {OUTER}JOIN ...ON

SELECT column_name(s)

FROM table_name1

LEFT {OUTER}JOIN table_name2

ON table_name1.column_name=table_name2.column_name

 

3.右(外)连接

关键字:RIGHT {OUTER}JOIN ...ON

SELECT column_name(s)

FROM table_name1

RIGHT {OUTER}JOIN table_name2

ON table_name1.column_name=table_name2.column_name

 

4.交叉连接(CROSS JOIN)

产生笛卡尔积

范例:

SELECT * FROMempCROSSJOINdept;

 

5.自然连接(NATURAL
JOIN)

自动进行关联字段的匹配

范例:

SELECT * FROM emp
NATURALJOIN dept;

 

(三)子句

1.USING

直接指定关联的操作列

范例:

SELECT * FROMemp eJOIN dept dUSING(deptno);

SELECT * FROMemp eJOIN dept dUSING(deptno)WHERE deptno=20;

 

2.ON

表示用户自己编写连接的条件

范例:

SELECT * FROMemp e

JOIN dept d ON(e.deptno=d.deptno)WHERE e.deptno=20;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: