联表操作
Posted 陈泽俊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了联表操作相关的知识,希望对你有一定的参考价值。
一、联表查询:内联结、外联结
1、笛卡儿积:将第一个表的每一行和第二个表的每一行联接成一行生成的所有数据。如果不止两个表的话依此类推。如果只想选择其中的一部分数据的话,可以使用where子句
2、内联结(inner join on或join on ):根据两个或多个表中的列之间的关系,从这些表中查询数据:
a)、创建三张表,user_role为t_user和t_role的关联表:
1 create table t_user( 2 id number primary key, 3 name varchar2(30), 4 sex varchar2(10) 5 ); 6 create table t_role( 7 id number primary key, 8 post varchar2(30),--置位 9 pay number --薪资 10 ); 11 create table user_role( 12 user_id number references t_user(id) , 13 role_id number references t_role(id) 14 );
b)、查询时采用 表名(inner) join 表名 on 关联条件 进行查询:
1 select t_user.name,t_user.sex,t_role.post,t_role.pay from t_user inner join user_role on t_user.id = user_role.user_id 2 inner join t_role on t_role.id=user_role.role_id;
3、外连接:左外连接,右外连接,完全外连接。对应SQL:LEFT/RIGHT/FULL OUTER JOIN。通常省略outer 这个关键字。写成:LEFT/RIGHT/FULL JOIN。
1 select *from t_user left join t_role on t_role.id=t_user.id; --左边的表保留全部的信息,右边的表没有匹配到信息则显示为null 2 select *from t_user right join t_role on t_role.id=t_user.id; --右边的表保留全部的信息,左边的表没有匹配到信息则显示为null 3 select *from t_user full join t_role on t_role.id=t_user.id; --左右连边的表都保留全部的信息,如果对方没有匹配到则对方显示为null
以上是关于联表操作的主要内容,如果未能解决你的问题,请参考以下文章
(十四)Mysql 单表 VS 联表(全文很长,你要认真点)
(十四)Mysql 单表 VS 联表(全文很长,你要认真点)