INNER JOIN (内连接):两边表同时有对应的数据,即任何一边缺失数据就不显示。
LEFT JOIN (左连接)会读取左边数据表的全部数据,即便右边表无对应数据。
RIGHT JOIN (右连接) 会读取右边数据表的全部数据,即便左边表无对应数据。
FULL JOIN (外连接) 返回两个表中的行,left join + right join。
注意on与where有什么区别:
两个表连接时用on,在使用left jion时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
例题:
题目:查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括暂时没有分配具体部门的员工(请注意输出描述里各个列的前后顺序)
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
解:
select e.last_name,e.first_name,de.dept_no
from employees e left join dept_emp de
on de.emp_no = e.emp_no
------来源牛客网sql5