目录:
连接是在多个表之间通过一定的连接条件,使表之间发生关联,进而能从多个表之间获取数据。
在WHERE子句中书写连接条件
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
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子句可以指定用某个或某几个相同名字和数据类型的列作为连接条件。
SELECT deptno,e.ename,d.dname
FROM emp e
JOIN dept d USING(deptno)
WHERE deptno=20
注:
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