MultiJoinTable.md

多表连接

目录:

连接

笛卡尔积

SELECT emp.ename,dept.deptno
FROM emp,dept

注:emp表14行,dept表4行,上面得到的结果有14*4=56行。

等值连接

SELECT emp.ename,dept.deptno
FROM emp,dept
WHERE emp.deptno=dept.deptno

表别名

SELECT e.ename,d.dname
FROM emp e,dept d
WHERE e.deptno=d.deptno

非等值连接

SELECT e.ename,e.sal,s.grade
FROM emp e,salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal

外部连接

在多表连接时,可以使用外部连接来查看哪些行,按照连接条件没有被匹配上。

外部连接的符号是(+)。

SELECT e.ename,d.dname,d.deptno
FROM emp e,dept d
WHERE e.deptno(+)=d.deptno

自身连接

也叫自连接,是一个表通过某种条件和本身进行连接的一 种方式,就如同多个表连接一样。

SELECT e.ename,m.ename 经理
FROM emp e,emp m
WHERE e.mgr=m.empno

SQL:1999语法的连接

ANSI SQL:1999标准的连接语法

交叉连接

交叉连接会产生两个表的交叉乘积,和两个表之间的笛卡尔积是一样的;

使用CROSS JOIN子句完成。

SELECT e.ename,d.dname
FROM emp e
CROSS JOIN dept d

自然连接

SELECT ename,dname
FROM emp
NATURAL JOIN dept

USING子句

自然连接是使用所有名称和数据类型相匹配的列作为连接条件,而USING子句可以指定用某个或某几个相同名字和数据类型的列作为连接条件。

SELECT deptno,e.ename,d.dname
FROM emp e 
JOIN dept d USING(deptno)
WHERE deptno=20

注:

ON子句

SELECT e.deptno,e.ename,d.dname
FROM emp e
JOIN dept d
ON e.deptno=d.deptno
WHERE e.deptno=20

左外连接

左外连接以FROM子句中的左边表为基表,该表所有行数据按照连接条件无论是否与右边表能匹配上,都会被显示出来。

SELECT e.deptno,e.ename,d.dname
FROM emp e
LEFT OUTER JOIN dept d
ON e.deptno=d.deptno

右外连接

右外连接以FROM子句中的右边表为基表,该表所有行数据按照连接条件无论是否与左边表能匹配上,都会被显示出来。

SELECT e.deptno,e.ename,d.dname
FROM emp e
RIGHT OUTER JOIN dept d
ON e.deptno=d.deptno

全外连接

全外连接返回两个表等值连接结果,以及两个表中所有等值连接失败的记录。

SELECT e.deptno,e.ename,d.dname
FROM emp e
FULL OUTER JOIN dept d
ON e.deptno=d.deptno