07多表查询

消除笛卡尔积,必须有关联字段;

SELECT *

FROM emp,dept

WHERE emp.deptno=dept.deptno;

都习惯与将关联字段设置为同名;

任何时候多表查询都必须存在有关联关系,没有关联关系是没有多表查询的;

强烈建议用别名;

SELECT e.*,d.dname

FROM emp e ,dept d

WHERE e.deptno=d.deptno;

 

案例1:要求查询出每个雇员的编号、姓名、职位、基本工资、部门名称、部门位置

SELECT e.empno,e.ename,e.job,e.sal,d.dept,d.loc

FROM emp e ,dept d

WHERE e.deptno=d.deptno;

 

案例2:要求查询出每个雇员的编号、姓名、职位、基本工资、工资等级

SELECT e.empno,e.ename,e.job,e.sal,s.grade

FROM emp e ,salgrade s

WHERE e.sal BETWEEN s.losal AND s.hisal;

 

案例3:要求查询出每个雇员的编号、姓名、职位、基本工资、部门名称、工资等级

SELECT e.empno,e.ename,e.job,e.sal,d.dept,s.grade

FROM emp e ,dept d,salgrade s

WHERE e.deptno=d.deptno AND e.sal BETWEEN s.losal AND s.hisal;

 

以上用的where字句都是使用了内连接;内连接中不满足条件的不出现;

外连接:左外连接、右外连接、全外连接;如果考虑数据不全的时候就使用外连接;

左外连接

SELECT e.empno,e.ename,e.job,e.sal,d.dept,d.loc

FROM emp e ,dept d

WHERE e.deptno=d.deptno(+);--左表不满足条件的出现了;

 

右外连接

SELECT e.empno,e.ename,e.job,e.sal,d.dept,d.loc

FROM emp e ,dept d

WHERE e.deptno(+)=d.deptno;--右表不满足条件的出现了;

 

SQL:1999语法

左外连接: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);

 

集合查询

UNION:取消重复元素,将所有集合合并,如果要重复数据用UNION ALL

UNION ALL:

SELECT * FROM EMP

UNION ALL

SELECT * FROM EMP WHERE DEPTNO=10;

INTERSECTT:交集

MINUS:差集

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值