语句运行数据库为mysql。
1. join(inner join) 内链接
效果:仅在链接主表与内链接对象存在至少一个匹配时才返回数据库记录。
sql: select * from card INNER JOIN cardtask on card.taskid = cardtask.id;
结果:上述sql只查出了card表中两条有cardtask对应的记录。
2. left join 左链接
效果:返回链接主表的所有记录,即使左链接对象表中无记录与其对应。
sql:select * from card LEFT JOIN cardtask ON card.taskid = cardtask.id;
结果:查询出了card表中全部的三条数据,其中只有两条记录在对应的cardtask区域有数据。
3. right join 右链接
效果:返回右链接对象表中所有记录,如果链接主表中有数据没有在右链接对象表中找到记录,则不显示主表该记录。
sql:select * from card RIGHT JOIN cardtask ON card.taskid = cardtask.id;
结果:查询出了cardtask表中所有记录,但是card表中有一条记录没有查询出来,因为在其taskid没有在cardtas中有对应对象。
4. full join 全链接
效果:返回两张表中所有的记录,表与表之间的对应记录没找到则空置。
sql:select * from card FULL JOIN cardtask ON card.taskid = cardtask.id; (运行一直保存,一查才知道mysql不支持Full Join 关键字)
修改后的sql:select * from card left join cardtask on card.taskid=cardtask.id union select * from card right join cardtask on card.taskid=cardtask.id;(左链接+右链接+去重也实现了FULL JOIN的逻辑)
结果:查询出了两张表中所有记录,card表三条记录,cardtask表两条记录。多出来的一条card表记录因为taskid在cardtask表中未找到对应关系,没有对应的cardtask记录对应,空置。