若是一个查询同时涉及两个以上的表,则称之为连接查询,连接查询是关系数据库中最主要的查询,主要包括等值连接查询、非等值连接查询、自身连接查询、外连接查询和复合条件连接查询。
这篇博文咱们来对多表连接进行学习。数据库
SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2;
【连接的分类】性能
一个用户查询请求涉及到多个表的时候,连接两个表的条件为=时,就是等值连接查询;其余的运算符连接的就是非等值查询。 注意:连接条件中的各连接字段类型必须是可比的,但没必要是相同的,整型和实型是可比的,可是字符型和整型就不可比。学习
内链接,也被称为天然链接,只有两个表相匹配的行才能在结果集中出现。返回的结果集选取了两个表中全部相匹配的数据,舍弃了不匹配的数据。spa
外链接不只包含符合链接条件的行,还包含左表(左链接时)、右表(右链接时)或两个边接表(全外链接)中的全部数据行。设计
连接两个表的条件为=时,就是等值连接查询blog
SQL> SELECT emp.empno, emp.ename, emp.deptno, dept.deptno, dept.loc 2 FROM emp, dep
3 WHERE emp.deptno=dept.deptno;
注意:咱们还可使用And运算符添加其余查询条件,如:数学
注意:咱们还能够用列别名提升性能和限制歧义列名table
如:class
SQL> SELECT e.ename, e.sal, s.grade 2 FROM emp e, salgrade s 3 WHERE e.sal 4 BETWEEN s.losal AND s.hisal;
一个表与本身进行链接,这种链接称为表的自身链接查询。
具体实现的时候,咱们能够把本身的表起两个别名,一个是first, 一个是second.在设计的时候能够把这两个表想成是彻底两个同样的表,可是各自的字段咱们均可以只有调用访问。
SQL> SELECT worker.ename||' leader is '||manager.ename 2 FROM emp worker, emp manager 3 WHERE worker.mgr = manager.empno;
<--笛卡尔积写法--> SQL> SELECT emp.empno, emp.ename, emp.deptno,dept.deptno, dept.loc FROM emp, dept;
<--交叉链接写法--> SELECT emp.empno,emp.ename,emp.sal,emp.deptno,dept.loc FROM emp CROSS JOIN dept;
SELECT empno,ename,sal,deptno,loc FROM emp NATURAL JOIN dept;
天然链接是使用全部名称和数据类型相匹配的列做为链接条件,而USING子句能够指定用某个或某几个相同名字和数据类型的列做为链接条件,如:
SELECT e.ename,e.ename,e.sal,deptno,d.loc FROM emp e JOIN dept d USING (deptno) WHERE deptno = 20 ;
SELECT e.empno, e.ename, d.loc,m.ename FROM emp e JOIN dept d ON e.deptno = d.deptno JOIN emp m ON e.mgr = m.empno;
<--左外链接--> SELECT e.ename,e.deptno,d.loc FROM emp e LEFT OUTER JOIN dept d ON (e.deptno = d.deptno);
<--右外链接--> SELECT e.ename,e.deptno,d.loc FROM emp e RIGHT OUTER JOIN dept d ON (e.deptno = d.deptno);
<--全链接--> SELECT e.ename,e.deptno,d.loc FROM emp e FULL OUTER JOIN dept d ON (e.deptno = d.deptno);