Mysql-内连接和外连接

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)

结尾

腹有诗书气自华,最是书香能致远。

添加新评论