尚硅谷之MySQL基础
右外连接(RIGHT JOIN)
|
|
恰与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。 |
返回右表中在左表没有匹配行的记录 |
#查询所有部门信息以及该部门员工信息 SELECT did,dname,eid,ename FROM t_employee RIGHT OUTER JOIN t_department ON t_department.did = t_employee.dept_id; |
#查询部门信息,仅保留没有员工的部门信息 SELECT did,dname,eid,ename FROM t_employee RIGHT OUTER JOIN t_department ON t_department.did = t_employee.dept_id WHERE t_employee.dept_id IS NULL; #“从表外键列”是NULL |
|
|
#查询所有员工信息,以及员工的部门信息 SELECT eid,ename,did,dname FROM t_department RIGHT OUTER JOIN t_employee ON t_employee.dept_id = t_department.did ; |
#查询员工信息,仅保留没有分配部门的员工 SELECT eid,ename,did,dname FROM t_department RIGHT OUTER JOIN t_employee ON t_employee.dept_id = t_department.did WHERE t_employee.dept_id IS NULL; #“从表外键列”是NULL |
|
|
外连接(FULL JOIN)
mysql不支持FULL JOIN,但是可以用 left join union right join代替
|
|
#查询所有部门信息和员工信息 SELECT did,dname,eid,ename FROM t_department LEFT OUTER JOIN t_employee ON t_department.did = t_employee.dept_id UNION SELECT did,dname,eid,ename FROM t_department RIGHT OUTER JOIN t_employee ON t_department.did = t_employee.dept_id; |
#查询所有没有员工的部门和没有分配部门的员工 SELECT did,dname,eid,ename FROM t_department LEFT OUTER JOIN t_employee ON t_department.did = t_employee.dept_id WHERE t_employee.dept_id IS NULL UNION SELECT did,dname,eid,ename FROM t_employee LEFT OUTER JOIN t_department ON t_department.did = t_employee.dept_id WHERE t_employee.dept_id IS NULL; |
|
|
自连接
当table1和table2本质上是同一张表,只是用取别名的方式虚拟成两张表以代表不同的意义。然后两个表再进行内连接,外连接等查询
#自连接 #查询员工姓名以及领导姓名,仅显示有领导的员工 SELECT emp.ename,mgr.ename FROM t_employee AS emp, t_employee AS mgr WHERE emp.mid = mgr.eid; #查询员工姓名以及领导姓名,仅显示有领导的员工 SELECT emp.ename,mgr.ename FROM t_employee AS emp INNER JOIN t_employee AS mgr ON emp.mid = mgr.eid; #查询所有员工姓名及其领导姓名 SELECT emp.ename,mgr.ename FROM t_employee AS emp LEFT JOIN t_employee AS mgr ON emp.mid = mgr.eid; |