注意外键的对应
#语法1 select * from 表1,表2 where 表1.主键=表2.外键
#语法2 select * from 表1 inner join 表2 on 表1.主键=表2.外键
示例:
这里我们因为是中间用的一个链接表将他们链接在一起,所以这里就让t_user和t_user_role内连接显示下
语法1:
select * from t_user,t_user_role where t_user.id=t_user_role.user_id
查询如下图所示
语法2 :
select * from t_user inner join t_user_role on t_user.id=t_user_role.user_id
查询效果如下图
--左外链接(以左表为主表,会把左表数据全部查询出来)
#语法 select * from 表1 left[outer] join 表2 on 表1.主键=表2.外键
--右外连接(以右表为主表,会把右表数据全部查询出来)
#语法 select * from 表1 right[outer] join 表2 on 表1.主键=表2.外键
示例:
内链接是将两个表信息全部都显示出来,外连接是放左或者放右,一般外连接不会用来查全部,都是用来查单个几个表连一起内容
左外链接:
select * from t_user left join t_user_role on t_user.id=t_user_role.user_id
查询效果如下图
右外链接:
select * from t_user right join t_user_role on t_user.id=t_user_role.user_id
效果如图所示
通过左右外连接,大家不难发现就是王五没有另一个表的信息,所以就不会显示出来,左连接是将坐标当主表全部查出来,右表的有的才会显示,右链接就是以右表为主表,会把右表数据全部查询出来
示例:张三拥有哪些角色
select * from t_role where id in (select role_id from t_user_role where user_id in(select id from t_user where name='张三'))
这段分解就是
select * from t_role where id in(1,2)
select role_id from t_user_role where user_id=1
select id from t_user where name='张三'
可以发现就是将他们一段一段分解之后再进行替换,这边是子查询