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;
原文链接:https://www.f2er.com/oracle/213454.html