1,内连接
内连接不是一个表内的连接,是两个及多个表的连接。内连接是多个表之间根据指定的条件进行连接,然后返回满足这些条件的行。
格式:select 查询的东西 from 表1 inner JOIN 表2 on 查询的条件
以下是举例:
name | salary | age | employee_id |
张三 | 1000 | 19 | 10 |
李四 | 3600 | 26 | 30 |
王五 | 2700 | 23 | 40 |
department_name | employee_id | contact | xxxx |
销售部 | 30 | 123 | xxxx |
管理部 | 14 | 444 | xxxx |
后勤部 | 29 | 666 | xxxx |
管理部 | 10 | xxxx | |
销售部 | 65 | 876 | xxxx |
后勤部 | 40 | xxxx |
上面的表是一个公司的员工表和部门表,现在我想查询员工的薪水和联系方式,薪水在employees表,联系方式在department表,如果我想查询它们两个,就需要连接两个表。
代码为:select e.salary, d.contact from employees e inner JOIN department d on e.employee_id=d.employee_id ;
on后面的条件是连接两个表的条件,我们可以看到两个表中唯一相同的就是都有employee_id,所以也只有employee_id可以做连接条件,条件是e.employee_id=d.employee_id;
2,左右外连接
左右外连接就是在内连接的基础上,意思就是它会返回内连接的结果,也会返回不是内连接的结果,结合上面的两个表来举例子,employees中有三个人,这三个人在department表中都能找到对应的id,现在我想查询员工的薪水和联系方式,那么就要连接两个表,但是我们现在看张三和王五的联系方式在department表中没有,如果用内连接来做,那么张三和王五的就不会被查询到,但是现在我用外连接来做,那么这个代码既会返回内连接的结果,也会返回张三和王五,只不过他俩的联系方式是空值,它会返回内连接的结果,如下:
1000 | NULL |
3600 | 123 |
2700 | NULL |
左连接格式:select e.salary, d.contact from employees e LEFT OUTER JOIN department d on e.employee_id=d.employee_id ;
右连接格式:select e.salary, d.contact from employees e RIGHT OUTER JOIN department d on e.employee_id=d.employee_id ;
左连接是返回左表的所有行(包含左表的空行),右连接是返回右表所有的行(包含右表的空行)。
3,全外连接
这个就很简单了,全外连接就是左外连接和右外连接的结合体,就是左右外连接通过union关键字结合在一起形成了全外连接,大概就像南朝鲜和北朝鲜合并成为一个完整的岛国。