九, 表查询 三

左、右连接

关于左、右连接指的是查询判断条件的参考方向
即:
左外连接:
左表不加限制,保留左表的数据,匹配右表,右表没有匹配到的行中的列显示为null。

右外连接:
右表不加限制,保留右表的数据。匹配左表,左表没有匹配到的行中列显示为null。

完全外连接:
左右表都不加限制。即右外连接的结果为:左右表匹配的数据+左表没有匹配到的数据+右表没有匹配到的数据。

语法:

   LEFT/RIGHT/FULL OUTER JOIN。 通常省略OUTER关键字, 写成:LEFT/RIGHT/FULL JOIN

(+)号的作用:
+号可以理解为补充的意思,加在那个表的列上就代表这个表的列为补充。加在右表的列上代表右表为补充,为左连接。加在左表的列上代表左表为补充,为右连接。注意:完全外连接中不能使用+号。

关于使用(+)的一些注意事项:
操作符只能出现在WHERE子句中,并且不能与OUTER JOIN语法同时使用。

1.当使用(+)操作符执行外连接时,如果在WHERE子句中包含有多个条件,则必须在所有条件中都包含(+)操作符。

2.操作符只适用于列,而不能用在表达式上。

3.操作符不能与OR和IN操作符一起使用。

4.操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。

注意:等值连接是只把满足条件的两个表的行相连,然后显示出来。完全外连接是把匹配查询条件的行、左表没有匹配到的、右表没有匹配到的都显示出来。

交叉连接(CROSS JOIN):
用于产生笛卡尔积

SELECT * FROM emp CROSS JOIN dept;

笛卡尔积本身并不是属于无用的内容,在某些情况下还是需要使用的。

自然连接(NATURAL JOIN):
自动找到匹配的关联字段,消除掉笛卡尔积

SELECT * FROM emp NATURAL JOIN dept;

但并不是所有的字段都是关联字段,设置关联字段需要通过约束指定
JOIN…USING子句:
用户自己指定一个消除笛卡尔积的关联字段

SELECT * FROM emp JOIN dept USING(deptno);

JOIN…ON子句:
用户自己指定一个可以消除笛卡尔积的关联条件

SELECT * FROM emp JOIN dept ON(emp.deptno=dept.deptno);

连接方向的改变:
左(外)连接:LEFT OUTER JOIN…ON;
右(外)连接:RIGHT OUTER JOIN…ON;
全(外)连接:FULL OUTER JOIN…ON; –> 把两张表中没有的数据都显示

SELECT * FROM emp RIGHT OUTER JOIN dept ON(emp.deptno=dept.deptno);

猜你喜欢

转载自blog.csdn.net/nedved_l/article/details/79657047