那么为什么会出现这种现象呢?笛卡尔积
为了避免笛卡尔积的条件,需要用WHERE加入有效的连接条件
注:如果给表起了别名,过了条件中只能使用别名,不能使用原来的表名
和刚才一样,这里的OUTER可以省略
UNION ALL所需要的资源比UNION少,如果确定结果没有重复记录,建议使用UNION ALL,提高数据查询速度。练习
这里有的同学可能会误解为什么是判断B表的字段是不是NULL为什么不是A表的?
这里解释一下,JOIN之后的操作实质上就是从笛卡尔集中取出数据,那么在查询出A表的外连接的时候,表会变成什么样呢,可以一起来看看
可能有人会说,这里A表B表的字段都是NULL,为什么不判断B表的呢?同理
在这里我想说的是,这里尚硅谷给的例子比较特殊,用的是外键去判断,如果这里的条件不是用等值的外键去判断呢,假设A没有这个字段,是不是只有B才有这个字段,也就是说当前获取的集合里面只能通过B表去判断是否为NULL!!!
注:可以看出来内连接和刚才的等值连接很像,只是所使用的语法不同,其实从实质上两个可以理解成相同的,在SQL92规范中,内连接就是等值连接,而外连接只需要用+,但是MySQL不支持这种写法,现在的SQL99虽然写起来繁琐,但是比较好分辨。复制代码
- #左外连接
- SELECT last_name,department_name
- FROM employees ,departments
- WHERE employees.department_id = departments.department_id(+);
- #右外连接
- SELECT last_name,department_name
- FROM employees ,departments
- WHERE employees.department_id(+) = departments.department_id;
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |