转载自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库的操作、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数据库的所有操作语句并附上了在MFC中如何连接数据库的例子,以txt文本形式给出。
本文档为本人总结window2003服务器mysql远程访问需要的一些设置,文档内有详细设置过程以及sql语句,文档内容经过本人多次测试均已成功,希望对大家有帮助。
android可以使用mysql数据库,android连接数据库的方式有两种。 第一种是通过连接服务器,再由服务器读取数据库来实现数据的增删改查,这也是我们常用的方式。 第二种方式是android直接连接数据库,这种方式非常耗...
前段时间MySQL5.X启动不了服务,网上查了很多方法也为解决,最后升级成8.X系列软件。使用spring data jpa 框架进行连接出现了很多问题,现对相关问题进行总结梳理
关于远程连接mysql被拒绝的方法总结,亲测有效。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
php无法连接mysql问题解决方法总结.docx
超级总结(qt与mysql连接 驱动插件问题)
总结了java通过数据源和直接连接sqlserver、mysql的方法,希望可以能帮到后来者
操作MySQL数据库的常用命令,连接MYSQL、修改密码、增加新用户、显示命令、 将文本数据转到数据库中、使用SHOW语句找出在服务器上当前存在什么数据库、创建一个数据库MYSQLDATA等等。
该脑图专为入门学习mysql的小伙伴所准备的,包含【安装步骤、启动连接、数据库常常用的基本命令[查库、建库、删库、建表、删表]、数据库表详细的增删查改语句以及事例、表的基本操作、索引操作、外键约束、表关联、...
主要介绍了Eclipse连接Mysql数据库操作总结的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
注:这种方法标不治本,只能暂时的修改最大连接数,一点重启mysql,最大连接数又会变回原先设置的值。 方法二:通过mysql配置文件来修改最大连接数 1、电脑上打开mysql安装目录,找到my.ini文件,如下图所示: 2、...