- 浏览: 121219 次
- 性别:
- 来自: 成都
文章分类
最新评论
第一部分、查询理论
连接查询方式有:
内连接、外连接(左连接、右连接、全连接)、交叉连接
左连接和右连接的区别:
左连接以左表为基准进行查询,左表数据会全部显示出来,右表如果和左表匹配的数据则显示相应字段的数据,如果不匹配,则显示为NULL;右连接刚好相反。
全连接就是先以左表进行左外连接,然后以右表进行右外连接。
说明:所谓的基准,就是以某张表的限制条件查询条件为准!
具体如下:
一、内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
2、不等连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<、!=和<>。
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
二、外连接
返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。
三、交叉连接
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。
第二部分、实例说明
-
实例
Book表:
一、内连接
select *
from [Book] as b,[Student] as s
where b.StudentId=s.StudentId
等价于如下(也可以不要关键字inner,此为系统默认),但这种方法不能再用left join等外连接了
select *
from [Book] as b inner join [Student] as s
ON b.StudentId=s.StudentId
这种方法还可以加and条件,并且后面可能接着用left join等外连接
结果为:
执行过程
相当于内连接的向右连接。以from [Book] inner join [Student]等式右边为基准,即以Student表(等式右表,s表)的s.StudentId为基准,遍历Book表(等式左表,Book表)中与之匹配的b.StudentId,然后拼接返回。结果含有重复的列,b.StudentId和s.StudentId。
说明
这与where b.StudentId=s.StudentId或者s.StudentId=b.StudentId位置没有关系。它仅仅代表满足条件而已,不判定谁为基准。以下外连接,交叉连接相同操作。
二、外连接
1、左外连接
代码
select *
from [Book] as b left join [Student] as s
ON b.StudentId=s.StudentId
结果
执行过程
即以from [Book] left join [Student]的Book表为基准,即以Book表(b表)的b.StudentId为基准。遍历Student表(s表)中与之匹配的b.StudentId。若b.StudentId含有s.StudentId匹配项,则进行拼接,然后遍历Student表的下一条s.StudentId,当查询完毕则进入下一条b.StudentId。若b.StudentId没有相应s.StudentId匹配项时,则显示左表的项,拼接右表的项显示为NULL。
2、右外连接
代码
select *
from [Book] as b right join [Student] as s
ON b.StudentId=s.StudentId
结果
执行过程
即以from [Book] right join [Student]的Student表为基准,即以Student表(s表)的s.StudentId为基准。遍历Book表(b表)中与之匹配的s.StudentId。若s.StudentId含有b.StudentId匹配项,则进行拼接,然后遍历Book表的下一条b.StudentId,当查询完毕则进入下一条s.StudentId。若s.StudentId没有相应b.StudentId匹配项时,则显示右表的项,拼接左表的项显示为NULL。
3、全外连接
代码
select *
from [Book] as b full outer join [Student] as s
ON b.StudentId=s.StudentId
结果
执行过程
即以from [Book] full outer join [Student]中先以Book表进行左外连接,然后以Student表进行右外连接。
三、交叉连接
代码
select *
from [Book] as b CROSS Join [Student] as a
Order by b.BookId
结果
执行过程
即是按照Order排序的Id,把要Join的右表无条件拼接过来。这样依次执行,这样这种记录便为两个表的记录的笛卡尔积。
发表评论
-
JAVA中SELECT COUNT(*) FROM XXX得到的ResultSet行数
2013-06-05 16:37 1122/** * 测试SELECT COUNT(* ... -
My Eclipse 编辑jsp页面卡机
2013-04-24 18:21 1340困惑很久的问题今天终于解决了。。 我想大家都遇到编辑JSP页 ... -
MyEclipse 9.0 安装freemarker编辑器
2012-12-12 18:08 829freemarker几天前才发布了2.3.17版本,5月21号 ... -
XYTipsWindow插件弹出层之关闭
2012-12-12 10:20 5237XYTipsWindow插件弹出层之关闭 加载一个网页到框架 ... -
让html select支持readonly属性
2012-12-06 11:20 898刚刚碰到一个要为html select添加readonly属性 ... -
兼容各个数据库的sql语句 Criteria
2012-12-05 08:22 1360Session session = HibernateUtil ... -
freemarker处理小数和整数共存的情况
2012-12-04 17:06 3262前几天在写程序的时候,利用的freemarker做的表示层。程 ... -
Freemarker中输出数字特别是Long型数字时格式带逗号问题
2012-12-03 10:08 1404Long i=100000000l; Map model ... -
FreeMarker 基础知识 表达式(引用)
2012-11-20 21:24 864表达式是FreeMarker的核心功能,FreeMarker中 ... -
2011-07-07 00:10 mysql 自增id 归0
2012-11-20 21:10 788最近老是要为现在这个项目初始化数据,搞的很头疼,而且数据库的I ... -
hibernate Restrictions 用法 查询
2012-11-20 20:57 716import hibernate classes impor ... -
hibernate Restrictions 用法 查询
2012-11-20 20:54 0import hibernate classes imp ... -
Mysql-Front v5.1注册码
2012-07-18 09:27 689O9wEVeaZ3ek7MtT3MmcRXQgHssPk X ... -
CMS开发文档
2012-07-12 15:31 2677cms项目导入myeclipse 1.在myeclipse中新 ... -
解决MyEclipse内存不足
2012-07-09 08:48 751做项目的时候,MyEclipse提示内存不足,我本本内存2G的 ... -
在Dreamweaver中tpa,tppabs标签批量清除
2012-04-19 22:55 1409匹配tppabs标签: \btppabs="h[ ... -
java 365*1000*60*60*24 计算问题
2012-04-12 18:59 947long y = 365*1000*60*60*24; Sy ... -
Hibernate - DetachedCriteria 的完整用法
2011-11-04 15:33 851Hibernate - DetachedCriteria 的完 ... -
Hibernate二级缓存及产品Oscache
2011-11-04 15:19 1982二级缓存也称进程级的缓存或SessionFactory级的缓存 ... -
JPA @MappedSuperclass注解的使用说明
2011-10-31 17:51 896基于代码复用和模型分离的思想,在项目开发中使用JPA的@Map ...
相关推荐
本文将详细介绍六种主要类型的 JOIN:左连接(LEFT JOIN)、右连接(RIGHT JOIN)、全连接(FULL JOIN)、内连接(INNER JOIN)、交叉连接(CROSS JOIN)以及自连接(SELF JOIN)。通过实例讲解每种连接的特点和应用...
外连接(OUTER JOIN)是一种连接操作,用于查询多个表中的数据,但不 sadece 返回符合连接条件的数据行,而是返回左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中的所有数据行。外连接可以分为三种...
- 右外连接(RIGHT OUTER JOIN 或 RIGHT JOIN):与左外连接相反,返回右表的所有行,左表中没有匹配的行同样填充NULL。 - 全外连接(FULL OUTER JOIN 或 FULL JOIN):返回两个表的所有行,无论是否存在匹配。如果...
本文主要探讨了四种基本的表连接类型:内连接、外连接(包括左外连接、右外连接)以及交叉连接。 首先,内连接(INNER JOIN)基于指定的连接条件,返回两个表中匹配的行。它又分为等值连接、自然连接和不等连接。...
根据连接的方式不同,可以分为左连接(LEFT JOIN)、右连接(RIGHT JOIN)、内连接(INNER JOIN)、全连接(FULL JOIN)、交叉连接(CROSS JOIN)以及自连接(SELF JOIN)。每种连接类型都有其特定的应用场景和使用...
右外连接与左外连接相反,返回右表的所有行,即使在左表中没有匹配的行。对于左表中没有匹配的行,结果集中的相应列将是NULL。 ```sql SELECT authors.*, publishers.* FROM authors RIGHT JOIN publishers ...
根据连接的方式和结果,SQL连接可以分为内连接、左连接、右连接、全连接和交叉连接等多种类型。 内连接 内连接是最基本的连接类型,它将两个表格中的数据根据某个条件连接起来。内连接可以分为等值连接、不等值...
交叉连接返回两个表的笛卡尔积,即每个左表的记录与右表的每个记录组合。如果没有WHERE子句,结果将是左表的行数乘以右表的行数。这通常会产生大量的记录,除非有明确的筛选条件。 6. **自连接**: 自连接是将同...
交叉连接(CROSS JOIN)是一种特殊的连接方式,它返回的是参与连接的两个表的所有可能组合,即两个表的笛卡尔积。这种连接不包含任何连接条件,因此返回的结果集大小通常是两个表的记录数相乘。 **分类:** 交叉...
右外连接与左外连接相反,返回右表的所有行,如果在左表中没有匹配的行,则左表的字段将为NULL。因此,当`a.id`不等于`b.parent_id`时,`a.*`列在结果中将是NULL。 4. **全连接(FULL OUTER JOIN)**: 全连接...
2. 右外连接(RIGHT JOIN):与左外连接相反,它返回右表的所有记录,以及与左表匹配的记录。左表中没有匹配的记录时,相应列填充NULL。 ```sql SELECT 列名表 FROM 表名1 RIGHT JOIN 表名2 ON 条件表达式 ``` 3. ...
### SQL内连接与外连接详解 #### 一、SQL内连接(INNER JOIN) **定义**: 内连接(INNER JOIN)是一种最常用的连接方式,它仅返回两个数据集合中具有匹配关系的那些行。具体来说,它会从位于两个互相交叉的数据...
- **右外连接(RIGHT JOIN)**:与左连接相反,返回右表的所有记录,以及与左表匹配的记录。左表中没有匹配的记录将显示为NULL。 - **全外连接(FULL JOIN)**:返回两个表的所有记录,如果在其中一个表中没有匹配...
右外连接与左外连接相反,返回右表的所有记录,即使左表中没有匹配。如果左表中没有匹配,则结果集中相应的列包含NULL值。 ```sql SELECT O.ID, O.ORDER_NUMBER, O.CUSTOMER_ID, C.ID, C.NAME FROM ORDERS O ...
本文将详细介绍Oracle中的左连接(Left Join)、右连接(Right Join)、内连接(Inner Join)、全连接(Full Join)以及交叉连接(Cross Join)的方法,并通过示例来帮助理解每种连接的特点。 ### 一、左连接(Left...
Join连接可以分为交叉连接、内连接和外连接三种类型。 一、交叉连接(Cross Join) 交叉连接也叫笛卡尔积,返回的是两表的乘积。交叉连接有两种,显式的和隐式的,不带on子句。例如: 语句 1:隐式的交叉连接,...
- **右外连接(Right Outer Join)**:与左外连接相反,优先显示右侧表的所有记录,左侧表中未找到匹配项时显示为`NULL`。 - 示例代码: ```sql SELECT t.*, s.* FROM teacher t RIGHT JOIN student s ON t.id ...
交叉连接是一种特殊的连接类型,它返回左表和右表的所有可能组合。这意味着如果左表有m行,右表有n行,则结果集将包含m*n行。然而,除非有特定需求,否则交叉连接很少在实际应用中使用,因为其结果通常包含大量冗余...
与左外连接相反,右外连接返回右表的所有记录,即使在左表中没有匹配的记录。等价的旧式写法是将`(+)`符号放置在等于号的右侧,如`SELECT e.last_name, e.department_id, d.department_name FROM employees e, ...