课程course表:
交叉连接:
结果为两张表的笛卡尔积:
内连接(inner join ,inner 可以省略)
显示内连接和隐示内连接获得的查询结果是一样的,都是A表和B表的交集(例:A.id = B.id),但是只能查到有关系的信息,如果A表的一条数据的与B表关联的字段没有对应的信息(如:A.id = null),即:这条数据在B表中没有对应的信息,则无法获得。
外连接(outer join,outer可以省略)
左外连接获得的查询结果是左边的表A的全部信息和A,B两张表的交集,左边A表的全部包含A表中在B表中没有对应关系的信息。
右外连接获得的查询结果是右边的表B的全部信息和A,B两张表的交集,右边B表的全部包含B表中在A表中没有对应关系的信息。
一般所说的左连接,外连接是指左外连接,右外连接。做个简单的测试你看吧。先说左外连接和右外连接:
[TEST1@orcl#16-12月-11] SQL>select * from t1
ID NAME
---------- --------------------
1 aaa
2 bbb
[TEST1@orcl#16-12月-11] SQL>select * from t2
IDAGE
---------- ----------
1 20
3 30
左外连接:
[TEST1@orcl#16-12月-11] SQL>select * from t1 left join t2 on t1.id=t2.id
ID NAME IDAGE
---------- -------------------- ---------- ----------
1 aaa 1 20
2 bbb
右外连接:
[TEST1@orcl#16-12月-11] SQL>select * from t1 right join t2 on t1.id=t2.id
ID NAME IDAGE
---------- -------------------- ---------- ----------
1 aaa 1 20
3 30
从上面的显示你可以看出:左外连接是以左边的表为基准。通俗的讲,先将左边的表全部显示出来,然后右边的表id与左边表id相同的记录就“拼接”上去,比如说id为1的记录。如果没有匹配的id,比如说t1中id为2的t2中就没有。那边就以null显示。
右外连接过程正好相反。
再看内连接:
[TEST1@orcl#16-12月-11] SQL>select * from t1 inner join t2 on t1.id=t2.id
ID NAME IDAGE
---------- -------------------- ---------- ----------
1 aaa 1 20
看到没有? 只有一条记录。内连接就是只取出符合过滤条件的记录 也就是t1.id=t2.id 那么符合t1.id=t2.id的记录只有id=1这一条,所以只显示一条。 不像外连接,是将你作为基准的表(左外连接就是左边表为基准,右外连接就是右边表为基准)的所有行都显示出来。
综上所述,你应该能明白了吧?如果不明白请留言。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)