联表操作
一、联表查询:内联结、外联结
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