99标准多表联查

99标准的多表连接查询 (内连接查询)  两个表的地位是相等的,查询的是两个表中“等值”列
 语法: select ...from 表名1  [inner] join  表名2 on 连接条件  [where]
 
select empno,ename,job,sal,dname from emp e ,dept d 
where e.deptno=d.deptno and dname='sales';
-- e.deptno=d.deptno 称为连接条件
-- dname='sales' 限定条件(筛选条件)  99年的时候 XXX  这样不好,将连条件与限定条件放在一起了,不容易区分
--所以99标准中,将连接条件与限定条件进行了区分,连接条件使用on,限定条件使用where
select empno,ename,job,sal,dname from emp e
inner join dept d  on e.deptno=d.deptno
where dname='sales';
--三表连接
select stuname,clazzname,schoolname from student s
inner join clazz c on s.clazzid=c.clazzno
inner join school sc on c.place=sc.schoolid
where clazzname like '%java%';  --模糊查询 %代表的是任意个字符 _代表的是一个字符

外连接查询 :查询中的两个表有主次关系,可以查询一个表的所有数据
 --查询所有员工的信息,包含没有部门的员工


--外连接
 --查询的是所有的员工的信息,包含没有部门的员工
select empno,ename,job ,sal ,dname from emp e LEFT JOIN dept d on e.deptno=d.deptno;
select empno,ename,job ,sal ,dname from dept d right join emp e on e.deptno=d.deptno;
--查询所有部门的信息,包含没有员工的部门
select empno,ename,job ,sal,dname,loc from   dept d left join emp e on e.deptno=d.deptno;
select empno,ename,job ,sal,dname,loc from emp e right join dept d on e.deptno=d.deptno;
--查询员工表的所有的信息和部门表的所有信息,包含没有部门的员工和没有员工的部门
 (mysql不支持,oracle支持)
select empno,ename,job ,dname ,loc from emp e    full  outer  join dept d
on e.deptno=d.deptno;
自连接查询 :一张表当作两张表来使用
 
  --查询入职时间早于领导 的员工信息 92
select e.empno,e.ename,e.hiredate as 员工入职时间,m.ename as 领导姓名 ,m.hiredate as 领导的入职时间
 from emp e ,emp m where e.mgr=m.empno  and  e.hiredate <m.hiredate;
 -- 99 
select e.empno,e.ename,e.hiredate as 员工入职时间,m.ename as 领导姓名 ,m.hiredate as 领导的入职时间
 from emp e inner join emp m on e.mgr=m.empno 
where  e.hiredate <m.hiredate;

上一篇:数据挖掘面试题(1)


下一篇:C# 从Excel2003将数据导入到SQL2005,数据发生截断的问题分析