
TABLE: TBL_USER_NAME
| id | uid | name |
| 1 | 1 | Jeremy |
| 2 | 2 | Melissa |
TABLE: TBL_USER_ADDRESS
| id | uid | addr |
| 1 | 1 | Xi'an |
| 2 | 3 | Beijing |
第一:内联(inner join)。
如果想把用户uid,name,address都查询出来,一般关联写法:
SELECT *FROM TBL_USER_NAME t1, TBL_USER_ADDRESS t2WHERE t1.uid = t2.uid;
上述写法等同于如下:
SELECT *FROM TBL_USER_NAME t1INNER JOIN TBL_USER_ADDRESS t2ON t1.uid = t2.uid;
把两个表中都存在uid的行拼成一行(即内联),但后者的效率会比前者高很多,建议用后者(内联)的写法。
第二:左联(left outer join)。
左联的写法为:
SELECT *FROM TBL_USER_NAME t1LEFT OUTER JOIN TBL_USER_ADDRESS t2ON t1.uid = t2.uid;
注:上面SQL的OUTER可以省略
第三:右联(right outer join)。
右联的写法为:
SELECT *FROM TBL_USER_NAME t1RIGHT OUTER JOIN TBL_USER_ADDRESS t2ON t1.uid = t2.uid;
注:上面SQL的OUTER可以省略
第四:全联(full outer join)。
全联的写法为:
SELECT *FROM TBL_USER_NAME t1FULL OUTER JOIN TBL_USER_ADDRESS t2ON t1.uid = t2.uid;
注:上面SQL的OUTER可以省略
重点:
SELECT *FROM ((SELECT *FROM TBL_USER_NAME t1LEFT OUTER JOIN TBL_USER_ADDRESS t2ON t1.uid = t2.uid)UNION(SELECT *FROM TBL_USER_NAME t1RIGHT OUTER JOIN TBL_USER_ADDRESS t2ON t1.uid = t2.uid;)) t
注意:上述SQL中最后的t不要忘掉
TIPS:可以通过创建视图的方式来简化SQL查询。低版本的视图不支持子查询,可以通过多创建几个视图的方式规避。
文章转载自须弥零一,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




