外连接有三种方式:左连接,右连接和全连接。
LEFT|RIGHT [OUTER] JOIN ON 条件
左连接:根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配,
找不到与左表匹配的,用null表示
右连接:根据
右
表的记录,在被连接的左表中找出符合条件的记录与之匹配,
找不到与左表匹配的,用null表示
mysql> -- 插入一条数据,此时的部门字段为6 ,但是部门表里不存在id为6的记录mysql> INSERT employee(username,age,salary,sex,depId,pId) VALUES('李莫愁','28','5992.12','女',6,3);mysql> SELECT * FROM employee;+----+-----------+------+---------+------+-------+------+| id | username | age | salary | sex | depId | pId |+----+-----------+------+---------+------+-------+------+| 1 | 张三 | 21 | 5432.12 | 男 | 1 | 1 || 2 | 李四 | 32 | 6432.00 | 男 | 2 | 2 || 3 | 王五 | 26 | 5932.92 | 女 | 3 | 3 || 4 | 赵六 | 32 | 6232.14 | 男 | 4 | 4 || 5 | 田七 | 19 | 4932.92 | 保密 | 1 | 3 || 6 | Mr Adword | 55 | 9432.99 | 男 | 4 | 5 || 7 | 田七 | 19 | 4932.92 | 保密 | 1 | 3 || 8 | 孙八 | 62 | 9932.14 | 男 | 2 | 4 || 9 | Mr lili | 45 | 9132.99 | 女 | 1 | 5 || 10 | 李莫愁 | 28 | 5992.12 | 女 | 6 | 3 |+----+-----------+------+---------+------+-------+------+mysql> SELECT * FROM department;+----+---------+| id | depName |+----+---------+| 1 | 开发部 || 3 | 教学部 || 2 | 视频部 || 4 | 运营部 |+----+---------+mysql> -- 内连接查询,查询用户所属部门名称、用户的信息,此时信息中并没有部门id为6的那条员工的记录mysql> SELECT e.id,e.username,d.depName FROM employee AS e JOIN department AS d ON d.id=e.depId;+----+-----------+---------+| id | username | depName |+----+-----------+---------+| 1 | 张三 | 开发部 || 2 | 李四 | 视频部 || 3 | 王五 | 教学部 || 4 | 赵六 | 运营部 || 5 | 田七 | 开发部 || 6 | Mr Adword | 运营部 || 7 | 田七 | 开发部 || 8 | 孙八 | 视频部 || 9 | Mr lili | 开发部 |+----+-----------+---------+9 rows in set (0.00 sec)mysql> -- 左连接查询,此时显示了部门id为6的那条员工的记录,并用NULL代替mysql> SELECT e.id,e.username,d.depName FROM employee AS e LEFT OUTER JOIN department AS d ON d.id=e.depId;+----+-----------+---------+| id | username | depName |+----+-----------+---------+| 1 | 张三 | 开发部 || 2 | 李四 | 视频部 || 3 | 王五 | 教学部 || 4 | 赵六 | 运营部 || 5 | 田七 | 开发部 || 6 | Mr Adword | 运营部 || 7 | 田七 | 开发部 || 8 | 孙八 | 视频部 || 9 | Mr lili | 开发部 || 10 | 李莫愁 | NULL |+----+-----------+---------+