/*多表查询
from t1,t2.....
1:内连接 n张表操作 有n-1有效条件 只返回符合条件的记录数
有效条件是表连接条
a:等值连接 (= 做连接的条件 )
eg: select * from emp e,dept d where e.deptno =d.deptno
b:非等值连接 in between > < ....like
c:自连接 (同表查询)
eg: select * from emp e,emp m where m.mgr =e.deptno
2:外连接 n张表操作 有n-1有效条件
返回符合条件的记录数与主表的所有记录
1:左外连接
select * from A left join B
on A.XX=B.xx;
或者
select * from A ,B where A.XX=B.xx(+);
2:右外连接
select * from A right join B
on A.XX=B.xx;
或者
select * from A ,B where A.XX(+)=B.xx;
3:全外连接
select * from A full outer join B
on A.XX=B.xx;
3:笛卡尔积 n张表操作 如果有效条件 低于n-1个 就会产生
*/
select * from emp;
select * from dept;
eg:
/*查询雇员信息与雇员所在部门信息*/
--sql 标准 oracle 标准
select * from emp e join dept d on e.deptno=d.deptno;
select * from emp e,dept d where
e.deptno=d.deptno;
/*查询雇员姓名与薪资 薪资等级信息 */
select * from salgrade;
select e.*,s.grade from emp e ,salgrade s
where e.sal between s.losal and s.hisal;
/*查询雇员姓名,所在部门名称 薪资 薪资等级信息 */
select * from emp e,dept d,salgrade g
where e.deptno=d.deptno
and e.sal between g.losal and g.hisal;
/*查询出 雇员姓名 与雇员的经理的姓名 */
select e.ename,m.ename from emp e,emp m
where e.mgr=m.empno ;
/*查询所有雇员姓名与部门名称 没有部门的雇员也要显示*/
select * from emp;
/* (+) 所在的一边为从表 另外一端就是主表
查询语句中 主表出现的位置在左边就是 左外连接
主表出现的位置在右边就是 右外连接
*/
select e.ename,d.dname from emp e,dept d
where e.deptno=d.deptno(+);
select e.ename,d.dname from emp e left join dept d
on e.deptno=d.deptno;
/*查询所有雇员姓名与部门名称 没有雇员的部门名也要显示*/
select e.ename,d.dname from emp e,dept d
where e.deptno(+)=d.deptno;
select e.ename,d.dname from emp e right join dept d
on e.deptno=d.deptno;
/*查询所有雇员姓名与部门名称 没有部门的雇员也要显示
没有雇员的部门名也要显示
*/
/*全外连接 */
select e.ename,d.dname from emp e full outer join dept d
on e.deptno=d.deptno;