sql的连接(左连接,右连接,全连接,内连接,交叉连接,自连接)
此文章已于 8:33:32 1970/1/1 发 布到ITWordSQL发发发发发发发发发发发发发发发发发发发发发发发发发接例解,左接,右接,全接,内接,交叉接,自接,类类[类类一类类或类入一新类类个个]
发发发发个是基本功,需要理解和熟运用
假有如下表:发发发发发发
一个投票主表,一个投票者信息表,投票人发发发发发发发发发发发发发发发发发发发发发IP及投票型,左右发发发发发发发发发发
接是我合的果以哪个表准,发发发发发发发发发发发发发发发发发发发发1:如右接发 right join 或 right outer join:
我以右发发发发voter表准,左表发发发发发发(voteMaster)中的只有当其发发发发发发ID在右发(voter)中存在才发发会示出来,如上,左中发发发发发发发发发发发发ID发3.4.5.6因些发发发ID右表中没有相,所以没发发发发发发发有示:发发发
2:因此我自然能理解左接发发发发发发发发发 left join 或者 left outer join 可,在右中发发发发发发发ID在中存在才会示,当右中没有相数据用发发发发发发发发发发发发发发发发发发发NULL代替:3:全接发发 full join 或者 full outer join,发发发发发发发二个表中的数据都出来,里演示效果与上一:发发
4:内接发发 inner join 或者 join;它返回字段发发发发发ID同存在于表发发发发发voteMaster 和 voter中的发发
5:交叉接,完全接,发发发发发发发发cross join 不发 where 条件的
没有 WHERE 子句的交叉接将生接所发发发发发发发发发发发发发发发发发及的表的笛卡。第涉
一个表的行数乘以第二个表的行数等于笛卡果集的大小。,发发发发发发发发发发table1和table2交叉发接生发发6*3=18条,发发发
等价select vm.id,vm.voteTitle,vt.ip from voteMaster as vm,voter as vt
6:自接。在里我用我前段一个力目中的例子,改造,发发发发发发发发发发发发发发发发发发发发发发发发发发发发
如下表:
发发发发发发发发发发发发发发发发发发发发发发发是一个部表,里面存放了部及其上部,但都放在同
一表中,我假在需要用发发发发发发发发发发发发发SQL发发发发发发发发发发发发发发发出各部及其上部:就如何做,
当然,不用自接也一,可以如下:发发发发发发发发发发发
我达到期目的:在个中使用了一个子完成上发发发发发发发发发发发发发发发发发发发发发发发发发发发
部名的,如果使用自接,那构上感会清晰很多。发发发发发发发发发发发发发发发发发发发发发发发发发发发
是不是也同完成了功能呢,里除了使用自接外,使发发发发发发发发发发发发发发发发发发发发发
用了左接,因省力没有上部,他是老大,如果使发发发发发发发发发发发发发发发发发发发发发发发
用内接,就会把条掉,因没有和他匹配的上部。发发发发发发发发发发发发发发发发发发发发发发发发发发发发
自接用的比多的就是形构的:似上表:发发发发发发发发发发发发发发发发发发发发发发发发
______________________________________________________________________________
________________
mysql 不支持full join,所以,outer可以省,:
mysql> select a1.*,b1.* from a1 left outer join b1 on a1.id=b1.id UNION select a1.*,b1.* from a1 right outer join b1 on a1.id=b1.id;
+------+---------+-------+------+----------+| id | subject | score | id | name |+------+---------+-------+------+----------+| 1 | shux | 80 | 1 | zhangsan | | 2 | yuwe | 60 | 2 | lisi | | 3 | engl | 70 | NULL | NULL | | NULL | NULL | NULL | 4 | wangwu | +------+---------+-------+------+----------+4 rows in set (0.00 sec)
——————————————————————————————
SELECT
t.Tb_Month,
SUM(IFNULL(t.rbweight,0)) + SUM(IFNULL(m.Express_Weight,0)) +
SUM(IFNULL(m.ComPost_Weight,0)),
SUM(IFNULL(t.rbamountpay,0)) + SUM(IFNULL(m.Amount,0))FROM
tb_outinner m LEFT JOIN
tb_pa95 t
ON
1 = 1
AND t.Tb_Month = m.tb_Mouth
AND m.BZ = 'B'
AND t.Tb_Month >= '201207'
AND t.Tb_Month <= '201209'
GROUP BY
t.Tb_Month
UNION
SELECT
t.Tb_Month,
SUM(IFNULL(t.rbweight,0)) + SUM(IFNULL(m.Express_Weight,0)) +
SUM(IFNULL(m.ComPost_Weight,0)),SUM(IFNULL(t.rbamountpay,0)) + SUM(IFNULL(m.Amount,0))
FROM
tb_outinner m RIGHT JOIN
tb_pa95 t
ON
1 = 1
AND t.Tb_Month = m.tb_MouthAND m.BZ = 'B'
AND t.Tb_Month >= '201207'AND t.Tb_Month <= '201209'GROUP BY
t.Tb_Month