SELETE复杂查询——多表连接查询

    在SQL中,操作多个表的数据称为连接。在oracle中有两种连接格式,ANSI SQL连接格式和Oralce特有的连接格式。一般where子句中的连接条件是数据表中指定用于连接的字段。在一个表中指定外键,在另一个表中指定与其相关联的主键。

一、内连接

语法:select  table1.column,table2.column

         From  table1,table2

         Where  table.column1 = table2.column2;

     1、如:scott方案中emp中包含了deptno这个字段,为显示部门名称。可以使用连接查询从emp表和dept表中获取字段值。

Select emp.empno, emp.ename, emp.job, emp.hiredate, emp.sal, dept.dname from emp,dept  where  emp.deptno = dept.deptno;

在dept表中,deptno是主键列,emp中是deptno的外键列。两者建立了主外键的关联。

     2、如查询部门20的员工信息:

Select emp.empno, emp.ename, emp.job, emp.hiredate, emp.sal, dept.dname from emp,dept  where  emp.deptno = dept.deptno  and emp.deptno = 20;

     3、设置表别名,简化SQL代码:

Select  x.empno, x.ename, x.job, x.hiredate, x.sal, y.dname  from  emp x,dept y  where  emp.deptno = dept.deptno  and  emp.deptno = 20;

     4、使用内连接的ANSI SQL表示方式如下:

Select  x.empno, x.ename, x.job, x.hiredate, x.sal, y.dname  from  emp x  inner join  dept y  on  emp.deptno = dept.deptno  where  emp.deptno = 20;

Inner join连接左右两个表,on字句指定两个标的连接条件,where字句来指定条件字句。

 二、外连接

1、外连接分为两类,分别是保存左侧表内容的左外连接和保存右侧表内容的右外连接。

语法如下:

-------左外连接:当(+)出现在等号左边时,将返回table2表的所有数据

SELECT table1.column,table2.column

FROM table1,table2

WHERE table1.column(+)=tables2.column;

-------右外连接:当(+)出现在等号右边时,将返回table1表的所有数据

SELECT table1.column.table2.column

FROM table1,table2

WHERE table1.column=table2.column(+);

如:为返回emp表中的所有数据,将使用右外连接来实现

SELECT x.empno,x.ename,x.job,x.hiredate,x.sal,y.dname

FROM emp x,dept y

WHERE x.deptno = y.deptno(+);

2.使用ANSI SQL的连接、右连接及全连接语法

SELECT  table1.column,table2.column

FROM  table1  LEFT/RIGHT/FULL  OUTER  JOIN  table2

ON  table1.column_name = table2.column_name;

如:左连接

SELECT  x.empno,x.ename,x.job,x.hiredate,x.sal,y.dname

FROM  emp x LEFT OUTER JOIN dept y ON x.depno=y.deptno;

全连接中除了包含连接的数据外,还包含表中不符合连接条件的数据

三、交叉连接

 

交叉连接是A表中记录行和B表中的记录行数相乘得到的笛卡尔积,如果在进行连接查询时不指定任何连接条件,将产生交叉查询。

如:

SELECT x.empno,x.ename,x.job,x.hiredate,x.sal,y.dname

FROM emp x,dept y;

ANSI SQL标准用CROSS JOLN L来实现交叉查询

SELECT  x.empno,x.ename,x.job,x.hiredate,x.sal,y.dname

FROM  emp x CROSS JOIN dept y;

四、自然连接

如果两个表中有相同的名字和数据类型的列(必须同时满足),那么可以使用自然连接来自动匹配数据类型和列名。使用NATURAL JOIN满足

SELECT  x.empno,x.ename,x.job,x.hiredate,x.sal,y.dname

FROM  emp x  NATURAL JOIN  dept y;

 

 

原文地址:https://www.cnblogs.com/Metamorphosis/p/3494911.html