对于开发人员来说,数据是很重要的。刚入门的程序员更要注重基础知识,所以菜鸟我也在数据库的学习方面做了点点功课。以下是个人对表连接的一些认识,写了个demo,有纰漏还请见谅、斧正。
表连接,就是将两个表,三个表等多个表拼接在一起。拼接,当然还要拼接的条件,这也就涉及到表之间的关系。一般情况下,表连接分为:普通表连接(笛卡尔积连接)、左外连接、右外连接、全外连接、内连接、自连接。
对于各种表连接的定义,在这篇博客里就不赘述。有些知识还是要自己踏实去看的,Google一下,百度一下,参考书(推荐Oracle11g java开发员手册)。
建表:
/*外联接测试表A*/
create table t_joina(
userid number primary key,
username varchar2(40),
password varchar2(40),
deptid number
);
--数据插入
insert into t_joina
values(1001,'UserA','psw',10);
insert into t_joina
values(1002,'UserB','psw',10);
<pre name="code" class="sql">insert into t_joina
values(2001,'UserB','psw',20);
insert into t_joina
values(3001,'UserC','psw',30);
insert into t_joina
values(4001,'UserD','psw',40);
insert into t_joina
values(6001,'UserE','psw',60);
/*外联接测试表B*/
create table t_joinb(
deptid number primary key,
deptname varchar2(40),
deptlocal varchar2(80),
deptstaff number
);
<pre name="code" class="sql">--数据插入
insert into t_joinb
values(10,'Development','China',100);
insert into t_joinb
values(20,'Sale','U.S.',200);
insert into t_joinb
values(30,'Manage','U.K',10);
insert into t_joinb
values(40,'Market','Canada',150);
insert into t_joinb
values(50,'Test','Rusia',100);
t_joina t_joinb
/*查询测试*/
--笛卡尔积连接
select *
from t_joina a, t_joinb b
--全外连接
select *
from t_joina a full outer join t_joinb b
on a.deptid = b.deptid;
--两表的所有记录都查询出来,并且都需要对方表对自己的记录进行匹配,无匹配项则设置为null。
--左连接
select *
from t_joina a left outer join t_joinb b
on a.deptid = b.deptid;
--左外连接,就是以左边的表为基准表,所有记录都需右表来匹配,无匹配项则设置为null。
--右连接
select *
from t_joina a right outer join t_joinb b
on a.deptid = b.deptid;
--右外连接,就是以右边的表为基准表,所有记录都需要左表来匹配,无匹配项则设置为null。
--内连接
select *
from t_joina a inner join t_joinb b
on a.deptid = b.deptid;
--左右两表都需要条件匹配,所以查询出来的内容是两表都匹配的内容,没有某个表的记录全为空的情况。
对照全外连接可以看出区别。
--自连接
--就是连接表本身,一般用在菜单等有父子关系的字段中,或者说上下级关系。
以上就是一个关于表连接的实际例子。以后的工作中会再深入地学习。
共勉。