今天做项目遇到一个需求就是通过一个登陆字段查询该用具有的权限,然后根据权限显示对应的页面。
sql语句:
select * from elec_role_popedom a
left outer join elec_user_role b
on a.roleID = b.roleid
inner join elec_user c
on b.userid = c.userid
where c.isduty = '1';
在这条语句中用了左连接和内连接。以前在学校的时候自己系统的自学过oracle,但是由于上班很少用这些,有些淡忘了。所以今天遇到了这个问题,我把这几个区别弄明白了。
左外连接也叫左连接(left outer join也可以简写为left join)
显示左表的所有数据,然后根据条件与右表进行匹配,如果有匹配的就加在左表的后面,如果有多条匹配数据,则显示多条。
没有的话,该行的右表就以null值填充。
右连接(right outerjoin 也可以简写为right join)
显示右表的所有数据,然后根据条件与左表匹配,如果有匹配的就加在左表的后面,如果有多条匹配数据,则显示多条。
没有的话,该行以null值填充。(和左连接类似)
何为左表、右表呢 ?在join的左边就称为左表,右边就称为右表
全连接 FULL JOIN 或 FULL OUTER JOIN(mysql用不了,但是可以 左连接+union+右连接 实现)
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。
如果表之间有匹配行,则整个结果集行包含基表的数据值。
交叉连接 cross join
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。
内连接 inner join (简写为 join)
两个表只查询出满足条件的行数。
自连接
把一个表当两个表看,取两个别名,进行查询。
SELECT * FROM table_1 a,table_1 b WHERE a.[name]=b.[name] --连接的两表是同一个表,别称不一样
自连接一般用于有上下级关系的查询。
以上是我对这几个概念的理解,花了哥一上午时间去测试,由于把建表语句和测试语句写在上面会显得很乱所以就这能写一下自己的心得体会了。