日期:2014-05-16 浏览次数:20586 次
多表连接:
查询的一种,数据来源不再是单一的一个表,我们可以重多个表中提取相关联的数据,比如,从emp和dept表中找出人员
所在的部门名称,----多个表来联合查询
1.查询的时候,可以from多个表
SELECT * FROM EMP,DEPT
这样会产生一个笛卡尔集
表示:两个表任何组合的结果
2.需求:取关联数据
我的部门20号,我想要20号部门的名称====连接条件
select emp.ename,dept.dname from emp,dept where
emp.deptno=dept.deptno
3.语法格式:
select 字段 from 表1,表2 where 表1.列=表2.列
select
empno,ename,d.deptno,dname from emp e,dept d where e.deptno=d.deptno
当然,你可以为表定义一个别名,但是不能使用as(字段重命名可以使用)
不同的连接条件可以使用and或or
select empno,ename,d.deptno,dname,e.sal from emp
e,dept d where e.deptno=d.deptno And sal>1600
?
4.使用不等值连接
连接条件:一个表中的记录,在另一个表中能够找到匹配的记录即可
Select e.*,g.grade
From emp e,salgrade g Where e.sal Between g.losal And g.hisal
?
5.外连接:把不满足条件的数据显示出来
Select * From EMP E,DEPT D Where
E.DEPTNO=D.DEPTNO(+)
外连接可以在左表,也可以在右表
6.自连接
从同一个表中联合查询
Select E.ENAME,P.ENAME From EMP E,EMP P
Where E.MGR=P.EMPNO
-----sql1999:
7.交叉连接:
其结果是笛卡尔集,是没加任何条件所产生出来的数据集合
8.自然连接:默认情况下,以两个表中有相同名称的列来进行连接查询
Select * From EMP Natural Join
DEPT
其效果相当于
select * from emp,dept where emp.deptno=dept.deptno
9.使用using子句来查询
select * from emp join dept using(deptno)
10.使用on子句
使用on来指定连接具体条件
Select * From EMP Join DEPT On?
emp.deptno=dept.deptno And EMP.DEPTNO=20
多个表连接查询
Select? E.ENAME,E.SAL,D.DNAME,S.GRADE
FROM EMP E Join DEPT D On
E.DEPTNO=D.DEPTNO
Join SALGRADE S On E.SAL Between S.LOSAL And
S.HISAL
11.外连接:
与内连接的区别:
内连接========查询条件相等的记录(能够匹配的)
外连接========条件相等
的+没匹配的
Select * From EMP E Left Outer Join DEPT D On E.DEPTNO=D.DEPTNO
Select
* From EMP E Right Outer Join DEPT D On E.DEPTNO=D.DEPTNO
Select *
From EMP E Full Outer Join DEPT D On E.DEPTNO=D.DEPTNO