Mysql-内连接和外连接
说明
说明:Mysql中的内连接和外连接知识整理
内连接
介绍
基本介绍:内连接实际上就是利用 where 子句对两张(多表)表形成的笛卡尔积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中用的最多的连接查询。
语法1
select 列名 from 表1 inner join 表2 inner join 表3 ON 条件 ....
显示公司所有员工的信息及部门信息。
select E.*,D.dname from emp E inner join dept D on E.deptno=D.deptno where E.job="职员";
mysql> select E.*,D.dname from emp E inner join dept D on E.deptno=D.deptno where E.job="职员";
+-------+-----------+--------+------+------------+------+------+--------+-----------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno | dname |
+-------+-----------+--------+------+------------+------+------+--------+-----------+
| 7934 | 木有钱 | 职员 | 7782 | 1983-01-23 | 1300 | NULL | 10 | 财务部 |
| 7369 | 刘一 | 职员 | 7902 | 1980-12-17 | 800 | NULL | 20 | 研发部 |
| 7876 | 郭十一 | 职员 | 7788 | 1987-06-13 | 1100 | NULL | 20 | 研发部 |
| 7900 | 钱多多 | 职员 | 7698 | 1981-12-03 | 950 | NULL | 30 | 销售部 |
+-------+-----------+--------+------+------------+------+------+--------+-----------+
4 rows in set (0.00 sec)
语法2
select 列名 from 表1 , 表2 , 表3 WHERE 条件 ....
显示公司所有员工的信息及部门信息。
select E.*,D.dname from emp E,dept D where E.deptno=D.deptno and E.job="职员";
mysql> select E.*,D.dname from emp E,dept D where E.deptno=D.deptno and E.job="职员";
+-------+-----------+--------+------+------------+------+------+--------+-----------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno | dname |
+-------+-----------+--------+------+------------+------+------+--------+-----------+
| 7934 | 木有钱 | 职员 | 7782 | 1983-01-23 | 1300 | NULL | 10 | 财务部 |
| 7369 | 刘一 | 职员 | 7902 | 1980-12-17 | 800 | NULL | 20 | 研发部 |
| 7876 | 郭十一 | 职员 | 7788 | 1987-06-13 | 1100 | NULL | 20 | 研发部 |
| 7900 | 钱多多 | 职员 | 7698 | 1981-12-03 | 950 | NULL | 30 | 销售部 |
+-------+-----------+--------+------+------------+------+------+--------+-----------+
4 rows in set (0.00 sec)
外连接
mysql的外连接有两种,左外连接,右外连接。
左外连接
**基本介绍: 如果左侧的表完全显示我们就说是左外连接
语法:select 列名 from 表1 left join 表2 ON 条件 .....**
博主先修改了木有钱职员的部门id,这个id在部门表里没有,以此来演示左连接。
UPDATE `emp` SET `deptno` = '1' WHERE `emp`.`empno` = 7934;
显示公司所有员工的信息及部门信息。
select E.*,D.dname from emp E left join dept D on E.deptno=D.deptno where job='职员';
mysql> select E.*,D.dname from emp E left join dept D on E.deptno=D.deptno where job='职员';
+-------+-----------+--------+------+------------+------+------+--------+-----------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno | dname |
+-------+-----------+--------+------+------------+------+------+--------+-----------+
| 7369 | 刘一 | 职员 | 7902 | 1980-12-17 | 800 | NULL | 20 | 研发部 |
| 7876 | 郭十一 | 职员 | 7788 | 1987-06-13 | 1100 | NULL | 20 | 研发部 |
| 7900 | 钱多多 | 职员 | 7698 | 1981-12-03 | 950 | NULL | 30 | 销售部 |
| 7934 | 木有钱 | 职员 | 7782 | 1983-01-23 | 1300 | NULL | 1 | NULL |
+-------+-----------+--------+------+------------+------+------+--------+-----------+
4 rows in set (0.00 sec)
右外连接
**如果右侧的表完全显示我们就说是右外连接
select 列名 from 表1 right join 表2 ON 条件 .....**
部门表里新增了两个部门测试部、行政部,在员工表里没有对应,我们就来演示一下右连接
select E.*,D.dname from emp E right join dept D on E.deptno=D.deptno;
mysql> select E.*,D.dname from emp E right join dept D on E.deptno=D.deptno;
+-------+-----------+-----------+------+------------+------+------+--------+-----------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno | dname |
+-------+-----------+-----------+------+------------+------+------+--------+-----------+
| 7369 | 刘一 | 职员 | 7902 | 1980-12-17 | 800 | NULL | 20 | 研发部 |
| 7499 | 陈二 | 推销员 | 7698 | 1981-02-20 | 1600 | 300 | 30 | 销售部 |
| 7521 | 张三 | 推销员 | 7698 | 1981-02-22 | 1250 | 500 | 30 | 销售部 |
| 7566 | 李四 | 经理 | 7839 | 1981-04-02 | 2975 | NULL | 20 | 研发部 |
| 7654 | 王五 | 推销员 | 7698 | 1981-09-28 | 1250 | 1400 | 30 | 销售部 |
| 7698 | 赵六 | 经理 | 7839 | 1981-05-01 | 2850 | NULL | 30 | 销售部 |
| 7782 | 孙七 | 经理 | 7839 | 1981-06-09 | 2450 | NULL | 10 | 财务部 |
| 7788 | 周八 | 分析师 | 7566 | 1987-06-13 | 3000 | NULL | 20 | 研发部 |
| 7839 | 吴九 | 总裁 | NULL | 1981-11-17 | 5000 | NULL | 10 | 财务部 |
| 7844 | 郑十 | 推销员 | 7698 | 1981-09-08 | 1500 | 0 | 30 | 销售部 |
| 7876 | 郭十一 | 职员 | 7788 | 1987-06-13 | 1100 | NULL | 20 | 研发部 |
| 7900 | 钱多多 | 职员 | 7698 | 1981-12-03 | 950 | NULL | 30 | 销售部 |
| 7902 | 大锦鲤 | 分析师 | 7566 | 1981-12-03 | 3000 | NULL | 20 | 研发部 |
| NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 测试部 |
| NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 行政部 |
+-------+-----------+-----------+------+------------+------+------+--------+-----------+
15 rows in set (0.00 sec)
结尾
腹有诗书气自华,最是书香能致远。