概念
因为内连接中,连接的两个表中必须要有可以连接的字段才能,进行有效的操作。
而外连接就是操作没有必然联系的两个表。
左连接:两个表连接之后,保留左边的。即查询的结果条数始终大于等于左边的表。
右连接:同理。
语法中的
OUTER可以省略。
案例
-- 引入:查询男朋友 不在男神表的的女神名SELECT * FROM beauty;SELECT * FROM boys;-- 左外连接SELECT b.*,bo.*FROM boys boLEFT OUTER JOIN beauty bON b.`boyfriend_id` = bo.`id`WHERE b.`id` IS NULL;-- 案例1:查询哪个部门没有员工-- 左外SELECT d.*,e.employee_idFROM departments dLEFT OUTER JOIN employees eON d.`department_id` = e.`department_id`WHERE e.`employee_id` IS NULL;-- 右外SELECT d.*,e.employee_idFROM employees eRIGHT OUTER JOIN departments dON d.`department_id` = e.`department_id`WHERE e.`employee_id` IS NULL;-- 案例2:查询编号>3的女神的男朋友信息,如果有则列出详细,如果没有,用null填充SELECT b.id,b.name,bo.*FROM beauty bLEFT OUTER JOIN boys boON b.`boyfriend_id` = bo.`id`WHERE b.`id`>3;-- 案例3:查询哪个城市没有部门SELECT cityFROM departments dRIGHT OUTER JOIN locations lON d.`location_id`=l.`location_id`WHERE d.`department_id` IS NULL;-- 案例4:查询部门名为SAL或IT的员工信息SELECT e.*,d.department_name,d.`department_id`FROM departments dLEFT JOIN employees eON d.`department_id` = e.`department_id`WHERE d.`department_name` IN('SAL','IT');SELECT * FROM departmentsWHERE `department_name` IN('SAL','IT');-- 全外,但是MySQL不支持该连接-- 全外等价于,左连接+右连接。即两个表中对方没有的都使用Null填充。USE girls;SELECT b.*,bo.*FROM beauty bFULL OUTER JOIN boys boON b.`boyfriend_id` = bo.id;
