`

总结mysql中的内,外连接.转载注明

阅读更多

花了点时间总结了一下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修改语句修改单表中的记录

    1. 语法修改单表中的记录update 表名set 列=新值, ...where 筛选条件修改多表的记录sql92语法:update 表1 as 别名, 表2 as 别名set 列=新值, ...where 连接条件...商业转载请联系作者获得授权,非商业转载请注明出处。

    springmybatis

    sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 <typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/> 这个别名非常重要,你在 具体的类的映射中,比如User...

    JDBC工具类(针对mySQL)

    包里共封装了三个JDBC相关类,分别为: 1、JDBCUtil(JDBC工具类) 这里封装了Java与数据库...(本资源为学习交流目的,用户可以自行修改研究,但本资源禁止在其他网站转载,分享时请注明作者名称'z9p',谢谢合作!)

    Symphony Java社区平台.rar

    商业转载请联系作者获得授权,非商业转载请注明出处。 1. WumeiSmart是一个简单易用的生活物联网平台。可用于搭建物联网平台以及二次开发和学习。适用于智能家居、智慧办公、智慧社区、农业监测、水利监测、工业...

    Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法

    欢迎转载,请注明作者、出处。 作者:张正 QQ:176036317 如有疑问,欢迎联系。  本文档主要描述了Linux下python数据库驱动的安装和配置,用来实现在Linux平台下通过python访问MySQL、Oracle、SQL Server数据库。 ...

    后台管理系统

    大家回想我们开发的时候搭建项目工程的时候,配置pom,各种拷贝。每次都这样是不是很麻烦。...本篇文章来源于源码库(www.aspku.com),转载请注明出处 原文链接:http://www.aspku.com/qita/javacode/298655.html

    2048游戏java笔试题-hello-world:我是一个新手.学习使用的仓库。文档转载请注明出处,谢谢

    目录下为以前编写的一些数据库连接类,和学习 mysql 的程序。 NN 深度学习,神经网络图谱,笔记等。 这里面的脚本在jupyter notebook中执行可以,目前自定义配置的sublime中的Python执行会抛出弃用警告 Deprecation...

    论坛弹幕播放器(DZ测试可用,可以简单修改移植到PHPwind)

    如果你要转载下面的内容,那么请注明原帖地址 --------------------------------------------我是分割线-------------------------------------------- 源码下载(内含v1.150mukioplayer): 2012-04-25第3次更新 ...

    matlab绘图的形状代码-MineEarthquakeDemo:矿山地震界面系统,可显示CAD工程文件,以及事件消息并且可以读取CSV文件绘

    另外转载or学习or使用请注明来源! **主要功能:矿山地震检测分析界面系统,可显示CAD工程文件(调用MxDraw52 com接口),可读取CSV文件离线数据绘制动态和静态波形图(用的QChart做的波形显示),可连接Mysql数据库...

    PHP简单系统数据添加以及数据删除模块源文件下载

    无论执行什么操作,其思路无非是通过PHP传递SQL语句给MySQL数据库,让数据库执行添加或者删除命令,最终得到我们想要的结果。...转载时必须以链接形式注明作者和原始出处及本声明。 您可能感兴趣的文章:PHP中M

Global site tag (gtag.js) - Google Analytics