`

转载: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.xmind

    思维导图:mysql数据库表操作,分组函数,集合操作,单行函数,多表连接及事务等

    c语言连接mysql数据库

    所需头文件: #include <mysql/mysql.h> 功能: 获得或初始化一个MYSQL结构 函数原型: MYSQL *mysql_init(MYSQL *mysql) 函数返回值: 一个被始化的MYSQL*句柄 ...函数传入值: MYSQL:类型的指针 函数返回值: 无

    JDBC:MySQL8.0.29驱动

    MySQL JDBC驱动包8.0, mysql-connector-java-8.0.29。 供Java连接数据库使用。

    设置mysql远程连接

    设置mysql数据库远程连接: Windows系统 1、 停止mysql的服务。 2、 进入命令窗口,然后进入MySQL的安装目录,比如我的安装目录是c:\mysql,进入c:\mysql\bin 3、 进入mysql数据库服务器 c:\mysql\bin>mysql –u ...

    MySQL数据库:外连接.pptx

    而在外连接中可以只限制一个表,而对另外一个表不加限制(所有的行都出现在结果集中)。 外连接的概念 外连接 外连接主要包括: ● 左外连接(LEFT OUTER JOIN): 结果表中除了匹配行外,还包括左表有的但右表中不...

    MyEclipse连接MySQL数据库报错解决办法

    我们现在一般网站都是利用的MySQL数据库搭建网站的,但是在网上看到很多网友吐槽数据库连接不上的问题,现在我就结合相关资料向提出一些我个人的见解,希望对大家解决问题有帮助。 一般MySQL连接不上,可能有两大...

    mysql 多表连接

    mysql 多表连接,内连接,外连接,自连接

    PHP100视频教程 10:MYSQL在PHP5中的应用

    说明:mysql_query用来根据连接标识符向该数据库服务器的当前数据库发送查询,如果连接标识符默认,则默认为是上一次打开的连接。返回值:成功后返回一个结果标识符,失败时返回false。$sql = "SELECT * FROM test...

    JDBC:Java连接MySQL数据库(优化版)

    Java连接MySQL数据库(优化版) 目的: 当需要把应用程序从开发环境移植到生产环境时,不用修改源代码,只需要修改mysql.ini配置文件 方法: 不直接把数据库连接信息..."jdbc:mysql://127.0.0.1:3306/dome" jdbc:mysq

    PHP100视频教程 10:MYSQL在PHP5中的应用.rar

    说明:mysql_query用来根据连接标识符向该数据库服务器的当前数据库发送查询, 如果连接标识符默认,则默认为是上一次打开的连接。 返回值:成功后返回一个结果标识符,失败时返回false。 $sql = "SELECT * FROM...

    连接mysql数据库的驱动包:mysql-connector-java-5.1.39.jar

    连接mysql数据库的驱动包:mysql-connector-java-5.1.39.jar

    ASP.NET连接MYSQL的三种方法

     该组件为MYSQL为ADO.NET访问MYSQL数据库设计的.NET访问组件。  安装完成该组件后,引用命名空间MySql.Data.MySqlClient;  使用命令行编译时:csc /r:MySql.Data.dll test.cs 下载地址: ...

    mysql连接驱动包

    包含两个版本的驱动包:mysql-connector-java-5.0.3-bin.jar和mysql-connector-java-5.1.39-bin.jar

    第01篇:MySQL注入点写WebShell的5种方式1

    1、在默认数据库 test 中创建测试表admin和测试数据,新建test用户授予FILE权限 2、使用test用户连接 1、利用Union select 写入

    12.1: MySQL主从同步 、 主从同步模式 、 总结和答疑.docx

    12.1: MySQL主从同步 、 主从同步模式 、 总结和答疑.docx

    用JSP连接mysql数据库

    1.安装mysql 请参阅资料版区相关文章 http://info.mysql.cn/install/2006/0208/81.html 2.JDBC驱动:mysql-connector-java-3.1.8 这只是一个压缩包,并不需要安装,只要将其解压,我么使用的是文件夹mysql-...

    MySql连接字符串总结

    MySql连接字符串总结 MySql连接字符串总结

    二、MySQL连接查询学习笔记(多表连接查询:内连接,外连接,交叉连接详解)

    MySQL连接查询(多表连接查询:内连接,外连接,交叉连接详解) 6:多表连接查询 笛卡尔乘积:如果连接条件省略或无效则会出现 解决办法:添加上连接条件 连接查询的分类: 1.按年代分类: 1)sql 92标准:仅仅...

    Unity3D教程:两种方法连接MySql数据库2

    Unity3D教程:两种方法连接MySql数据库 Posted on 2013年06月27日 by U3d / Unity3D 基础教程/被围观 14 次 1、

    php连接mysql数据库最简单的实现方法

    在连接MySQL数据库之前,您必须指定以下信息: MySQL数据源名称或DSN:指定MySQL数据库服务器的地址。您可以使用IP地址或服务器名称,例如,127.0.0.1 或 localhost MySQL数据库名称:表示要连接的数据库的名称。 ...

Global site tag (gtag.js) - Google Analytics