花了点时间总结了一下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的安装与基本配置,并具备初步使用的能力。对于更复杂的数据库管理任务,建议进一步学习相关的高级功能和技术文档。
sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 <typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/> 这个别名非常重要,你在 具体的类的映射中,比如User...
在本文中,我们将深入探讨如何在Django 2.*版本中集成Mysql 5.7作为后端数据库,以创建一个完整的开发环境。首先,确保你的系统已经安装了...如果你有任何问题或反馈,欢迎留言讨论,也请尊重版权,转载请注明出处。
包里共封装了三个JDBC相关类,分别为: 1、JDBCUtil(JDBC工具类) 这里封装了Java与数据库...(本资源为学习交流目的,用户可以自行修改研究,但本资源禁止在其他网站转载,分享时请注明作者名称'z9p',谢谢合作!)
文章允许无偿转载,但需注明作者及来源。 2. **选择VirtualBox的理由**:作者选择了VirtualBox作为虚拟化平台,原因在于它是免费的且功能强大,易于设置和使用,能满足学习需求。 3. **Linux发行版的选择**:...
MySQL 8.0.16-win64 是 MySQL 数据库管理系统的一个特定版本,适用于64位的Windows操作系统。本文将详细介绍如何在Windows上安装这个版本的MySQL。 首先,你需要从官方网站或其他可信赖...如需转载请注明出处,谢谢!
商业转载请联系作者获得授权,非商业转载请注明出处。 1. WumeiSmart是一个简单易用的生活物联网平台。可用于搭建物联网平台以及二次开发和学习。适用于智能家居、智慧办公、智慧社区、农业监测、水利监测、工业...
欢迎转载,请注明作者、出处。 作者:张正 QQ:176036317 如有疑问,欢迎联系。 本文档主要描述了Linux下python数据库驱动的安装和配置,用来实现在Linux平台下通过python访问MySQL、Oracle、SQL Server数据库。 ...
大家回想我们开发的时候搭建项目工程的时候,配置pom,各种拷贝。每次都这样是不是很麻烦。...本篇文章来源于源码库(www.aspku.com),转载请注明出处 原文链接:http://www.aspku.com/qita/javacode/298655.html
目录下为以前编写的一些数据库连接类,和学习 mysql 的程序。 NN 深度学习,神经网络图谱,笔记等。 这里面的脚本在jupyter notebook中执行可以,目前自定义配置的sublime中的Python执行会抛出弃用警告 Deprecation...
如果你要转载下面的内容,那么请注明原帖地址 --------------------------------------------我是分割线-------------------------------------------- 源码下载(内含v1.150mukioplayer): 2012-04-25第3次更新 ...
另外转载or学习or使用请注明来源! **主要功能:矿山地震检测分析界面系统,可显示CAD工程文件(调用MxDraw52 com接口),可读取CSV文件离线数据绘制动态和静态波形图(用的QChart做的波形显示),可连接Mysql数据库...
无论执行什么操作,其思路无非是通过PHP传递SQL语句给MySQL数据库,让数据库执行添加或者删除命令,最终得到我们想要的结果。...转载时必须以链接形式注明作者和原始出处及本声明。 您可能感兴趣的文章:PHP中M