一: 连接 多表的字段中含null的 多表查询 ----左右连接查询!
例:
一张 emp(emano,ename,sal,deptno) 雇员表, 一张 dept(deptno,dname) 部门表, 雇员 中 有 字段 为 部门 编号,而 部门表 只有 部门编号,与部门名称。
但 雇员表中 有一些 雇员 是没有 部门的, 即 字段 为 null, 如何 通过 查询语句 查出 所有 雇员 信息 以及 雇员 对应的 部门名称?
select e.empno,e.ename,e.sal,d.deptno,d.dname from emp e,dept d where e.deptno=d.deptno;
上面 语句 的确 可以 查出 雇员信息 与 其所属 部门名称,但 问题 就在于 雇员表中 deptno 为 null 的 记录 是 显示不出来的,
mysql 数据库 的查询 有 一特点 : 字段 值 带 null 的 都不参与 运算。 (oracle貌似就可以)
那么 如何 让 部门为 null 的 雇员 也以 null 的形式 查出 ,而不是 直接 忽略跳过呢?
这里 就用到了 左右连接查询!!!(好吧,我承认 数据库课 没好好读......最开始 遇到这问题 头疼死了哈哈)
mysql 中 left join right join
left join是以左表的记录为基础,找对应 右表记录。
换句话说,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。
右表记录不足的地方均为NULL.
这样 写出的 sql 语句为:
select e.empno,e.ename,e.sal,e.deptno,d.dname from emp e left join dept d ON e.deptno=d.deptno;
完美!~~~
补充: 除了 左右 连接, 还有 一个 inner join : 相等 连接 ,即 并不以 任何一张表 为 基础, 只罗列 出 相等的,忽略 连接 查找 为 null的。