SQL 多表查询

来源:互联网 发布:2016年淘宝大数据分析 编辑:程序博客网 时间:2024/06/06 04:13
-- 多表查询基本概念   在之前所使用的查询操作之中,都是从一张表之中查询出所需要的内容,那么如果现在一个查询语句需要显示多张表的数据,则就必须应用到多表查询的操作,而多表查询的语法如下:   SELECT [DISTINCT] * | 字段 [别名] [,字段 [别名] ,…]FROM 表名称 [别名], [表名称 [别名] ,…][WHERE 条件(S)][ORDER BY 排序字段 [ASC|DESC] [,排序字段 [ASC|DESC] ,…]];-- 使用别名进行多表查询:SELECT * FROM emp e,dept d WHERE e.deptno=d.deptno;注意:任何情况下,如果要实现多表查询,永远都有一个前提,要关联的数据表一定要存在有关联的字段,或者是关联的条件。不存在这些要求的,一定不能够使用多表查询。-- 多表查询基本使用-- 查询每个雇员的编号,姓名,职位,工资,部门名称,部门位置。SELECT e.empno,e.ename,e.job,e.sal,d.dname,d.locFROM emp e,dept dWHERE e.deptno=d.deptno;-- 查询每个雇员的编号,姓名,职位,工资,工资等级。SELECT e.empno,e.ename,e.job,s.gradeFROM emp e,salgrade sWHERE e.sal BETWEEN s.losal AND s.hisal;-- 查询每个雇员的编号,姓名,职位,工资,工资等级,部门名称。SELECT e.empno,e.ename,e.job,s.grade,d.dnameFROM emp e,dept d,salgrade s WHERE e.deptno=d.deptno AND e.sal BETWEEN s.losal AND s.hisal ;-- 多表查询的连接:-- 数据库查询连接分为两种:内连接与外连接。-- 内连接内连接:即最常见的等值连接,例:SELECT e.empno,e.ename,e.job,e.sal,d.dnameFROM emp e,dept dWHERE e.deptno=d.deptno;--  JOIN...ON() 子句  -- 表A JOIN 表B ON(指定一个可以消除笛卡尔积的关联条件)SELECT e.empno,e.ename,e.job,e.sal,d.dnameFROM emp e JOIN dept dON(e.deptno=d.deptno);--  JOIN...USING() 子句  -- 表A JOIN 表B USING(指定一个可以消除笛卡尔积的关联字段)  SELECT e.empno,e.ename,e.job,e.sal,d.dnameFROM emp e JOIN dept dUSING(deptno);--注意:USING()指定的关联字段后,SELECT不能出现被关联表的关联字段。-- 自然连接(寻找关联字段作为内连接的等值连接)--  NATURAL JOIN  子句  ***提示:两个表必须有关联字段才可以-- 表A NATURAL JOIN 表B SELECT e.empno,e.ename,e.job,e.sal,d.dnameFROM emp e NATURAL JOIN dept d;--自身关联--要求查询出每一个雇员的编号,姓名,职位,领导的名字SELECT e.empno,e.ename,me.enameFROM emp e,emp meWHERE e.mgr=me.empno;SELECT a.empno,a.ename,b.enameFROM emp a JOIN emp b ON(a.mgr=b.empno);-- 外连接-- 外连接:分为左外连接,右外连接和全外连接。-- 左外连接左外连接就是在等值连接的基础上加上主表中的未匹配数据。如果需求是查询结果 加上主表中未匹配的数据行。则需要使用 左外接实现。-- 左外连接 left outer join 或者 left joinSELECT e.empno,e.ename,e.job,d.deptno,d.dnameFROM emp e LEFT OUTER JOIN dept dON e.deptno=d.deptno;-- Oracle 支持另一种写法SELECT e.empno,e.ename,e.job,d.deptno,d.dnameFROM emp e , dept dWHERE e.deptno=d.deptno(+);-- 右外连接右外连接是在等值连接的基础上加上被连接表的不匹配数据如果需求是查询结果 希望显示出所有部门信息。则需要使用 右外连接实现。-- 右外连接 right outer join 或者 right joinSELECT e.empno,e.ename,e.job,d.deptno,d.dnameFROM emp e RIGHT OUTER JOIN dept dON e.deptno=d.deptno;--Oracle支持的另一种写法SELECT e.empno,e.ename,e.job,d.deptno,d.dnameFROM emp e , dept dWHERE e.deptno(+)=d.deptno;-- 全外连接全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上左连接与右连接的问题上,如果希望显示出主表为匹配的数据行,以及右表也未匹配的数据行。那么就需要使用全外连接。-- 全外连接 full outer join 或者 full joinSELECT e.empno,e.ename,e.job,d.deptno,d.dnameFROM emp e FULL OUTER JOIN dept dON e.deptno=d.deptno;
本文中使用的数据表可在 《SQL 基本语句》文章中查看点击打开链接
原创粉丝点击