谁能举例详细解释一下 左、右外连接查询、完整外连接查询、 交叉连接 查询??
解决方案 »
- delphi 的组件如何使用?
- 用Tquery的recordcount属性判断不出来记录是否为空
- 这个查询我写不出来..............................
- 请帮忙解决:如何算出与今天相距为25天的那个日期
- delphi+sql server2000+win2000登录问题
- 新手提问,请多指点!
- 调查:大家使用过的usb存储设备是否曾因硬件问题而丢失数据
- 请问怎么通过IP地址知道机器的名字?多谢!
- 第三方控件的个人看法
- About QuickReport.... 急!
- delphi用odac中的oraquery查询得到的表用dbgrid显示怎么样才能编辑
- fastreport输出WORD,中文为乱码
INNER JOIN 返回两个表中能关联上的或不能关联上的所有行
外连接
LEFT JOIN / LEFT OUTER JOIN 左边表的所有行和右边表的关联行
RIGHT JOIN / RIGHT OUTER JOIN 右边表的所有行和左边表的关联行
FULL JOIN / FULL OUTER JOIN 两个表的所有行
交叉联接 返回表1的行数*表2的行数
返回的结果是左表中的所有行,左表中的每一行与右表中的所有行组合(相乘一样)如表1有5行,表2有9行,则5*9=45 返回结果是45行
假设有两张表,表A:ID 表B:ID
a a
b c
以等值条件为例,如果用集合的概念来说,
内连接类似于A交B,返回结果:
a a外连接中:
左连接:相当于A,当然也包含B交A的部分,返回结果:
a a
b null右连接:与左连接相似,只是方向相反,相当B,并包含A交B的部分,返回结果:
a a
null c完全连接,相当于A并B或A+B,返回结果:
a a
b null
null c交叉连接,完全是两个表的内容的全排列,也就是楼上所说的笛卡儿积,返回结果:
a a
a c
b a
b c
必须包含Join和On
select a0101,a01910 from a01 join deptcode on a01.dept_id=deptcode.dept_id11.外连接
参与连接的表有主从之分:以主表中每行数据匹配从表的每行数据,如果主表的行再从表中找到匹配的行,则直接返回结果再查询中;如果主表中的行没有在从表中找到匹配的行,主表的行仍然保留,并返回导查询结果中,相应从表中的行中被填Null后返回导查询结果中。连接类型 关键字 主表位置
左外连接 Left outer join 再关键字的左边
右外连接 Right outer join 在关键字右边
完全连接 Full outer join 在关键字的两边
联合查询
select a0190,a0101,a0107 from a01
union
select a0190,a0101,a0107 from a10
列标题为第一个查询的列标题
union自动删除重复行,需要保留,就使用union all
交叉连接
select a0190,a0101 from a01 cross join deptcode where a01.dept_id=deptcode.dept_id
生成交叉2个表所有可能的组合。
不带where,返回2表的笛卡尔积
带where ,返回2表笛卡尔积减where 限定的记录
自连接
select a.名称,a。商人编号,b.名称1
from 产品信息 as a inner join 产品信息 as b
on a.商人编号=b.商人编号。