什么是多表查询?
从多个表中获取数据
1.1 笛卡尔集
1.2 等值连接
连接的类型有:等值连接、不等值连接、外连接、自连接
等值连接:
示例:查询员工信息,要求显示:员工号,姓名,月薪,部门名称
select e.empno,e.ename,e.sal,d.name from emp e,dept d where e.deptno = d.deptno
1.3 不等值连接
示例:查询员工信息,要求显示:员工号,姓名,月薪,部门名称
select e.empno,e.ename,e.sal,s.grade from emp e ,salgrade s where e.sal between s.losal and s.hisal
1.4 外连接
示例:查询员工信息,要求显示:部门号,部门名称,人数
select d.deptno 部门号,d.dname 部门名称,count(e.empno) 人数 from emp e,dept d where e.deptno = d.deptno group by d.deptno,d.dname
核心:通过外连接,把对于连接条件不成立的记录,仍然包含在最后的结果中
左外连接:当连接条件不成立的时候,等号左边的表仍然被包含
右外连接:当连接条件不成立的时候,等号右边的表仍然被包含
例如左外连接:
select A.a,B.a from A LEFT JOIN B ON A.b=B.b;
等价于
select A.a,B.a from A,B where A.b = B.b(+);
再举个例子,这次是右外连接:
select A.a,B.a from A RIGHT JOIN B ON A.b=B.b;
等价于
select A.a,B.a from A,B where A.b (+) = B.b;