转载自http://blog.sina.com.cn/s/blog_3d48dbb70100hyz4.html
首先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连接字符串总结
最后,使用命令行工具或图形化工具连接MySQL数据库。 安装过程 安装过程包括下载、安装、配置三步。下载MySQL的安装文件,双击安装文件,按照提示进行安装。安装完成后,需要配置MySQL,包括设置root密码、端口号...
MySQL 的安装和 Eclipse 连接数据库 本资源将指导您如何安装 MySQL 数据库,配置 MySQL,可以使用 Eclipse 连接到 MySQL 数据库,并对数据库进行基本操作。 安装 MySQL 在安装 MySQL 之前,需要下载 MySQL 的...
MySQL知识总结思维导图,压缩包内包含MySQL数据库基础、MySQL库的操作、MySQL表的操作(DDL)、MySQL数据类型、MySQL表的约束、MySQL基本查询(DML)、MySQL内置函数、MySQL复合查询、MySQL内外连接、MySQL索引特性...
自己做试验,完成了MFC连接Mysql数据库,把步骤总结了一下
自己问度娘总结而成。 三、MySQL启动时,报错: ERROR 2003 (HY000) Can't connect to MySQL server on 'localhost(或者127.0.0.1)' (10061) 原因分析: mysql服务没启动 解决方案: 我的电脑->右键->管理->服务...
MySQL数据库连接超时(Wait_timeout)问题总结.pdfMySQL数据库连接超时(Wait_timeout)问题总结.pdfMySQL数据库连接超时(Wait_timeout)问题总结.pdfMySQL数据库连接超时(Wait_timeout)问题总结.pdfMySQL数据库连接超时...
QT连接数据库成功,带有数据的测试代码,已经运行成功!
MySQL数据库知识点总结 MySQL 是一种关系型数据库管理系统(RDBMS),它具有高效、稳定、可靠、安全等特点,是目前最流行的开源关系型数据库管理系统之一。 MySQL 入门 1. MySQL 介绍:MySQL 是一种关系型数据库...
MySQL连接,退出,增加用户,添加权限,建库,建表,查询,备份等方法总结
该资源中总结了对MySQL数据库的所有操作语句并附上了在MFC中如何连接数据库的例子,以txt文本形式给出。
本文档为本人总结window2003服务器mysql远程访问需要的一些设置,文档内有详细设置过程以及sql语句,文档内容经过本人多次测试均已成功,希望对大家有帮助。
android可以使用mysql数据库,android连接数据库的方式有两种。 第一种是通过连接服务器,再由服务器读取数据库来实现数据的增删改查,这也是我们常用的方式。 第二种方式是android直接连接数据库,这种方式非常耗...
前段时间MySQL5.X启动不了服务,网上查了很多方法也为解决,最后升级成8.X系列软件。使用spring data jpa 框架进行连接出现了很多问题,现对相关问题进行总结梳理
关于远程连接mysql被拒绝的方法总结,亲测有效。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Delphi连接MySQL真麻烦,研究了一天,从网上找了无数文章,下载了无数插件都没解决。最后返璞归真,老老实实用ADO来连接,发现也不是很顺利,但最终还是连接成功了...总结一下用ADO连接MySQL5.1要点。内部源代码介绍。
php无法连接mysql问题解决方法总结.docx
超级总结(qt与mysql连接 驱动插件问题)
总结了java通过数据源和直接连接sqlserver、mysql的方法,希望可以能帮到后来者