数据库查询中的表连接(一)
来源:互联网 发布:10月非农数据预测 编辑:程序博客网 时间:2024/05/22 05:33
1 概述
数据库中的表,是一个二维对象,由行和列构成;列是表的元数据,行是表的数据;所以,表与表之间做连接操作,无非是表的行和列与其他表的行和列之间的关系。
数据库中常有交叉连接、内连接、外连接、半连接、反半连接、自然连接等概念,这些连接方式,代表了不同的含义。
其中,交叉连接、内连接、外连接可以归属为一类;自然连接是内连接的一种。
半连接、反半连接,是子查询中的内容,可以归属为一类。
我们以两个表为列,来说明不同类型的连接之间的关系。
X表,有n行m列;Y表,有k行s列。
表X和表Y之间的关系,可能的情况是:
2 表之间的连接
假设表X和表Y结构与数据如下:
表X,n行m列
表Y,k行s列
num | name
-----+------
1 | a
2 | b
3 | c
num | value
-----+-------
1 | xxx
3 | yyy
5 | zzz
如果表X和表Y之间的连接,可能的情况有三种:
连接
名称
连接结果
说明
示例
行
列
交叉连接
cross join
笛卡尔集
n*k
m+s
列出数据行之间的乘积和列之间的加和;连接语句不带有连接条件
SELECT * FROM X CROSS JOIN Y;
连接结果,3行*3行=9行,2列+2列=4列:
num | name | num | value
-----+------+-----+-------
1 | a | 1 | xxx
1 | a | 3 | yyy
1 | a | 5 | zzz
2 | b | 1 | xxx
2 | b | 3 | yyy
2 | b | 5 | zzz
3 | c | 1 | xxx
3 | c | 3 | yyy
3 | c | 5 | zzz
内连接
inner join
又称
simple join
n*k中满足条件的行
m+s或去除重复的列
列出与连接条件匹配的数据行
分类:
根据连接条件符号:
等值连接[1]
不等值连接[2]
重复列去除,称为自然连接[3]
SELECT * FROM X INNER JOIN Y
ON X.num = Y.num;
连接结果:
num | name | num | value
-----+------+-----+-------
1 | a | 1 | xxx
3 | c | 3 | yyy
內连接有重复的num列
SELECT * FROM X NATURAL INNER JOIN Y;
连接结果:
num | name | value
-----+------+-------
1 | a | xxx
3 | c | yyy
自然连接没有重复的num列
外连接
outer join
不满足连接条件的行+內连接方式得到的行
取决于“查询列”和“using”子句
返回到查询结果集合中的不止包含符合连接条件的行,而且还包括左表(左外连接[4]时)、右表(右外连接[5]时)或两个边接表(全外连接[6])中的所有数据行
SELECT * FROM X LEFT JOIN Y USING (num);
num | name | value
-----+------+-------
1 | a | xxx
2 | b |
3 | c | yyy
多出第二行,不满足连接条件,但在X表中
USING子句消除了num重复列
SELECT * FROM X RIGHT JOIN Y ON X.num = Y.num;
num | name | num | value
-----+------+-----+-------
1 | a | 1 | xxx
3 | c | 3 | yyy
| | 5 | zzz
多出第三行,不满足连接条件,但在Y表中
SELECT * FROM X FULL JOIN Y ON X.num = Y.num;
num | name | num | value
-----+------+-----+-------
1 | a | 1 | xxx
2 | b | |
3 | c | 3 | yyy
| | 5 | zzz
多出第二行,不满足连接条件,但在X表中
多出第四行,不满足连接条件,但在Y表中
[1]在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列
[2] 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>
[3] 在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列
[4] 结果集中,行比內连接多出左表中不满足连接条件的行,称为左外连接;右外连接与此对称,正好相反
[5] 结果集中,行比內连接多出右表中不满足连接条件的行,称为右外连接
[6] 结果集中,行比內连接多出左表、右表中不满足连接条件的行,称为全外连接
- 数据库查询中的表连接(一)
- 数据库SQL语言中的连接查询(一)
- 数据库查询中的表连接(二)
- 数据库查询中的表连接
- 数据库中的连接查询
- 数据库查询中的连接
- 数据库查询中的连接操作(join)
- 数据库左连接查询(查询多张表中的数据)
- 数据库之多表查询(连接查询)
- 数据库查询中的各种连接类型
- 数据库查询中的左连接及注意事项
- 关于数据库查询中的几种连接
- 解析数据库查询中的外连接
- 数据库查询中的各种连接类型
- 数据库多表连接查询
- 数据库多表连接查询
- 数据库多表连接查询
- 数据库多表连接查询
- EventBus使用
- 如何分析问题
- 数据类型对比
- 列车调度 (lower_bound)
- 教师节,别样滋味的节日
- 数据库查询中的表连接(一)
- 数据库查询中的表连接(二)
- Core Dump Management on the Solaris OS
- java动态代理
- GitBook中文说明
- 知易行难
- 趣谈-不做高频,量化交易获利的概率真的能战胜抛钢蹦吗?
- 培训下属就等于提高自己
- 二进制整数加