SQL连接查询
2013-10-23 15:47
155 查看
两个表连接:相等连接,外连接,自连接
表dep:
表member:
1. 相等连接
通过两个表具有相同意义的列,可以建立相等连接条件。使用相等连接进行两个表的查询时,只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中;下面两条语句的执行结果是一样的。
SELECT * FROM dep a,member b WHERE a.dep_id = b.dep_id; (SELECT * FROM dep a INNER JOIN member b ON a.dep_id = b.dep_id;)
2. 外连接
在相等连接中有一个问题:如果某个member的dep还没有填写,即保留为空,那么该member在查询中就不会出现; 为了解决这个问题可以用外连接,即除了显示满足相等连接条件的记录外,还显示那些不满足连接条件的行,不满足连接条件的行将显示在最后。注意图形红色的差异部分。
SELECT * FROM dep a LEFT JOIN member b ON a.dep_id = b.dep_id; (left join 是以from
后面的表为准,它的表中的数据会全部显示,包括不匹配的内容 )
SELECT * FROM dep a RIGHT JOIN member b ON a.dep_id = b.dep_id; (right join 是以join
后面的表为准,它的表中的数据会全部显示,包括不匹配的内容)
3.
自连接(一般用在树形权限结构中)
自连接就是一个表,同本身进行连接。对于自连接可以想像存在两个相同的表(表和表的副本),可以通过不同的别名区别两个相同的表。
SELECT CONCAT(a.member_name,' 的上级是:',b.member_name) FROM member a, member b WHERE a.member_sjid = b.member_id;
笛卡尔积:笛卡尔(Descartes)乘积又叫直积。假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。
在操作多表联合查询时,若出现以下情况,将形成笛卡尔积
– 联接条件被省略
– 联接条件无效
– 第一个表中的所有行被联接到第二个表中的所有行上
注:主要内容来自于 http://www.cnblogs.com/linjiqin/archive/2011/04/13/2014497.html 请参考。
表dep:
表member:
1. 相等连接
通过两个表具有相同意义的列,可以建立相等连接条件。使用相等连接进行两个表的查询时,只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中;下面两条语句的执行结果是一样的。
SELECT * FROM dep a,member b WHERE a.dep_id = b.dep_id; (SELECT * FROM dep a INNER JOIN member b ON a.dep_id = b.dep_id;)
2. 外连接
在相等连接中有一个问题:如果某个member的dep还没有填写,即保留为空,那么该member在查询中就不会出现; 为了解决这个问题可以用外连接,即除了显示满足相等连接条件的记录外,还显示那些不满足连接条件的行,不满足连接条件的行将显示在最后。注意图形红色的差异部分。
SELECT * FROM dep a LEFT JOIN member b ON a.dep_id = b.dep_id; (left join 是以from
后面的表为准,它的表中的数据会全部显示,包括不匹配的内容 )
SELECT * FROM dep a RIGHT JOIN member b ON a.dep_id = b.dep_id; (right join 是以join
后面的表为准,它的表中的数据会全部显示,包括不匹配的内容)
3.
自连接(一般用在树形权限结构中)
自连接就是一个表,同本身进行连接。对于自连接可以想像存在两个相同的表(表和表的副本),可以通过不同的别名区别两个相同的表。
SELECT CONCAT(a.member_name,' 的上级是:',b.member_name) FROM member a, member b WHERE a.member_sjid = b.member_id;
笛卡尔积:笛卡尔(Descartes)乘积又叫直积。假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。
在操作多表联合查询时,若出现以下情况,将形成笛卡尔积
– 联接条件被省略
– 联接条件无效
– 第一个表中的所有行被联接到第二个表中的所有行上
注:主要内容来自于 http://www.cnblogs.com/linjiqin/archive/2011/04/13/2014497.html 请参考。
相关文章推荐
- SQL中的各种连接及查询
- sql 嵌套查询,并通过分组 和字段连接函数GROUP_CONCAT 查询出符合业务的结果集
- SQL--上机三--两表内连接查询信息
- sql连接查询中on筛选与where筛选的区别
- sql - 查询当前服务器有多少连接请求
- [疯狂Java]SQL-连接查询:SQL92、SQL99
- T-SQL基础(3) - 连接查询
- sql连接查询与hibernate连接查询
- 数据库(3) SQL查询 -- 连接查询
- sql 表的连接查询
- sql2005 内连接 外连接 交叉连接 查询 与联合查询(合并查询)
- Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
- Sql 连接查询总结
- SQL连接查询保障效率的简易原则
- 三表左连接查询的sql语句写法
- SQL查询结果的纵向连接
- sql的各种连接查询
- SQL 多表连接查询实现语句
- sql表连接查询
- sql多表连接查询