mysql 外连接总结(2010-03-18 09:39:12)
转载标签: it
花了点时间总结了一下mysql中的内,外连接.转载注明
首先my sql 不支持oracle的(+)
内连接: 只连接匹配的行
左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
全外连接: 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
交叉连接 生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个
行都一一匹配
举个例子吧。
表A
id name
1 张
2 李
3 王
表B
id address A_id
1 北京 1
2 上海 3
3 南京 10
包容性:A表包容B表,左连接左表是全的.(left join 或 left outer join )
SQL语句如下:
SELECT A.name, B.address
FROM A
LEFT JOIN B ON A.id = B.A_id
查询结果为:
name address
张 北京
李 NULL
王 上海
包容性:B表包容A表,右连接右表是全的.(right join 或 right outer join )
SQL语句如下:
SELECT A.name, B.address
FROM A
RIGHT JOIN B ON A.id = B.A_id
查询结果为:
name address
张 北京
王 上海
NULL 南京
排他性:A,B表中至少有1个匹配时,才返回行。两表的交集
SQL语句如下:
select A.name,B.address from A
inner join B
on A.id = B.A_id
查询结果为:
name address
张 北京
王 上海
inner join 内连接等价于下面的sql:
SELECT A.name, B.address
FROM A, B
WHERE A.id = B.A_id
注释:全外连接返回参与连接的两个数据集合中的全部数据,无论它们是否具有与之相匹配的行。在功能上,它等价于
对这两个数据集合分别进行左外连接和右外连接,然后再使用消去重复行的并操作将上述两个结果集合并为一个结果集
。(full join 或 full outer join )
SQL语句如下:
select * from A
full join B
查询结果为:
id name id address A_id
1 张 1 北京 1
2 李 1 北京 1
3 王 1 北京 1
1 张 2 上海 3
2 李 2 上海 3
3 王 2 上海 3
1 张 3 南京 10
2 李 3 南京 10
3 王 3 南京 10
注释:返回3*3=9条记录,即笛卡尔积
SQL语句如下:
SELECT * FROM A
CROSS JOIN B
查询结果为:
id name id address A_id
1 张 1 北京 1
2 李 1 北京 1
3 王 1 北京 1
1 张 2 上海 3
2 李 2 上海 3
3 王 2 上海 3
1 张 3 南京 10
2 李 3 南京 10
3 王 3 南京 10
CROSS JOIN等价于:
select * from A,B
注意:
1. on A.id = B.id 等同于 using(id)//这里字段名要相同
2. 当 MySQL 在从一个表中检索信息时,你可以提示它选择了哪一个索引。
如果 EXPLAIN 显示 MySQL 使用了可能的索引列表中错误的索引,这个特性将是很有用的。
通过指定 USE INDEX (key_list),你可以告诉 MySQL 使用可能的索引中最合适的一个索引在表中查找记录行。
可选的二选一句法 IGNORE INDEX (key_list) 可被用于告诉 MySQL 不使用特定的索引。
效率问题:
1.inner join比left join快
注:inner join 内连接等价于下面的sql: SELECT A.name, B.address FROM A, B WHERE A.id = B.A_id
所以一般要用一般的连接就可以了.
2.连接字段建索引
多表外连接
select A.*,B.f1,B.f2,B.fn,C.f1,C.f2,C.fn from A
left join B on A.id=B.id
left join C on C.id=A.id
where .......
分享到:
相关推荐
MySQL数据库中的外连接是数据查询中的一个重要概念,它允许我们在联接两个或多个表时,不仅包含匹配的行,还包含至少一个表的所有行。这与内连接不同,内连接只返回两个表中存在匹配的行。外连接分为两种主要类型:...
总结来说,MySQL连接驱动jar包是Java开发中不可或缺的部分,它使得我们可以通过JDBC API轻松地与MySQL数据库进行交互。了解其安装、配置和使用方法,以及解决可能出现的问题,是每个Java开发者必备的技能。在日常...
总结来说,MySQL连接驱动包是Java开发与MySQL数据库不可或缺的桥梁,选择合适的版本取决于你的Java环境和MySQL服务器版本。这两个版本的差异主要体现在对JDBC规范的支持程度、对新MySQL特性的支持以及性能优化等方面...
总结来说,MySQL .NET连接驱动为.NET开发者提供了高效、安全的途径来访问和管理MySQL数据库,无论是简单的CRUD操作还是复杂的业务逻辑,都能借助这个驱动轻松实现。通过理解并熟练使用MySql.Data.dll、MySql.Data....
### Linux开启MySQL远程连接详解 #### 一、背景介绍 随着云计算和大数据技术的发展,Linux作为服务器操作系统的优势日益凸显,而MySQL作为一款广泛使用的开源关系型数据库管理系统,在Linux环境下更是得到了广泛...
Navicat for MySQL 远程连接错误 1130 解决方法 Navicat for MySQL 是一款功能强大的数据库管理工具,但是在远程连接 MySQL 服务器时,可能会遇到错误 1130,这是因为 MySQL 服务器不允许从远程主机连接。下面我们...
总结来说,MySQL连接字符串的配置取决于所使用的连接方式,包括ODBC、OLE DB和.NET驱动,每种方式都有其特定的参数和格式。正确配置这些连接字符串是确保应用程序能够成功连接到MySQL数据库的关键步骤。在实际应用中...
总之,解决MySQL连接问题需要仔细排查服务状态、权限设置、配置文件内容和数据文件的兼容性。在处理这些问题时,务必谨慎操作,避免丢失数据。如果以上方法都无法解决问题,建议查看MySQL的日志文件,它会提供更具体...
### JSP连接MySQL使用连接池方式详解 #### 一、引言 在现代Web开发中,JSP(Java Server Pages)是一种广泛使用的服务器端技术,用于生成动态网页内容。为了提高应用程序的性能和效率,通常会采用连接池来管理与...
### 远程用户连接MySQL授权详解 #### 一、引言 随着互联网技术的发展与企业规模的扩大,数据库系统的远程访问需求日益增加。对于MySQL这样的关系型数据库管理系统而言,实现远程用户连接授权变得尤为重要。本文将...
总结来说,这个压缩包提供了一个C++实现的MySQL连接池,可以简化数据库操作并优化性能。`SqlHelper`和`ConnPool`类是实现这一目标的关键组件,它们可以帮助开发者更高效地管理和使用MySQL数据库。
总结来说,这个VB项目提供了通过ODBC驱动连接MySQL数据库的能力,使得非程序员也可以方便地进行数据浏览和管理。这在数据库管理、数据分析或小型应用开发中非常有用。通过深入理解VB、ADO、ODBC以及MySQL之间的交互...
总结来说,要在WinForm应用中使用EF连接MySQL数据库,你需要安装MySQL数据提供程序,创建EF模型,然后通过DbContext进行数据库操作。同时,根据项目需求,合理设计和组织数据库访问层,可以提高代码的可维护性和复用...
### MySQL数据库连接偶尔无法连接问题解析 #### 一、问题背景与现象 在日常使用MySQL数据库的过程中,可能会遇到一种情况:数据库连接偶尔会出现无法连接的情况,但几秒钟之后这种状况又会自动恢复正常。这种情况...
总结来说,"mysql数据库连接的简单工具类"是一个实用的编程资源,为初学者提供了基础的数据库操作模型。通过学习和实践,你可以理解数据库连接的基本流程,进而在实际项目中灵活运用,提高开发效率。同时,这个工具...
MySQL 的安装和 Eclipse 连接数据库 本资源将指导您如何安装 MySQL 数据库,配置 MySQL,可以使用 Eclipse 连接到 MySQL 数据库,并对数据库进行基本操作。 安装 MySQL 在安装 MySQL 之前,需要下载 MySQL 的...
### MySQL开启远程连接权限 在本篇文章中,我们将详细介绍如何通过命令行的方式,在Windows系统上为MySQL数据库开启远程连接权限。对于需要从不同位置管理数据库的用户来说,这是一个非常实用的功能。下面,我们将...
总结来说,Java连接MySQL数据库主要包括以下步骤: 1. 安装JDK和MySQL。 2. 下载并添加JDBC驱动到系统CLASSPATH。 3. 在MySQL中创建数据库和表。 4. 编写Java代码加载驱动、建立连接、执行SQL并处理结果。 以上就是...