`
zhengdl126
  • 浏览: 2543100 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

【汇总】mysql join

 
阅读更多

标准SQL中CROSS JOIN交叉连接(笛卡尔积)和内连接INNER JOIN不同,但是MySQL中两者是相同的,即有[CROSS | INNER] JOIN,两者可以互相替代,而且可以只使用JOIN


1. 笛卡尔积(交叉连接)
在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','

SELECT * FROM table1 CROSS JOIN table2
SELECT * FROM table1 JOIN table2
SELECT * FROM table1,table2

由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢。
一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN

2. 内连接INNER JOIN
在MySQL中把INNER JOIN叫做等值连接,即需要指定等值连接条件
在MySQL中CROSS和INNER JOIN被划分在一起,不明白。
参看MySQL帮助手册
http://dev.mysql.com/doc/refman/5.0/en/join.html
join_table:
    table_reference [INNER | CROSS] JOIN table_factor [join_condition]



根据后面的on过滤条件将CROSS JOIN 转换为 INNER JOIN


USING子句,如果连接的两个表连接条件的两个列具有相同的名字的话可以使用USING

 

 

 

==================== left join,right join,inner join

 

 

下面是例子分析
表A记录如下:
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115

表B记录如下:
bID bName
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408

创建这两个表SQL语句如下:
CREATE TABLE a
aID int( 1 ) AUTO_INCREMENT PRIMARY KEY ,
aNum char( 20 )
)
CREATE TABLE b(
bID int( 1 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
bName char( 20 )
)

INSERT INTO a
VALUES ( 1, 'a20050111' ) , ( 2, 'a20050112' ) , ( 3, 'a20050113' ) , ( 4, 'a20050114' ) , ( 5, 'a20050115' ) ;

INSERT INTO b
VALUES ( 1, ' 2006032401' ) , ( 2, '2006032402' ) , ( 3, '2006032403' ) , ( 4, '2006032404' ) , ( 8, '2006032408' ) ;

实验如下:
1.left join(左联接)

sql语句如下:
SELECT * FROM a
LEFT JOIN b
ON a.aID =b.bID

结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
(所影响的行数为 5 行)

结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.


2.right join(右联接)

sql语句如下:
SELECT * FROM a
RIGHT JOING b
ON a.aID = b.bID

结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL NULL 8 2006032408
(所影响的行数为 5 行)

结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.

3.inner join(相等联接或内联接)

sql语句如下:
SELECT * FROM a
INNER JOIN b
ON a.aID =b.bID

等同于以下SQL句:
SELECT *
FROM a,b
WHERE a.aID = b.bID

结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404

结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录 .

 

 

 

分享到:
评论

相关推荐

    了解复杂MySQL JOIN

    例如,你可能需要使用JOIN从不同的表中获取关联数据,通过嵌套查询过滤特定条件,然后使用LIKE进行文本匹配,最后用GROUP BY和聚合函数进行数据汇总。 对于初学者来说,理解并熟练掌握这些概念可能有些挑战,但通过...

    MySQL汇总.doc

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Web应用程序中被广泛使用。本文将深入探讨MySQL的基础知识,包括数据库的概念、MySQL的安装与使用,以及关键的MySQL指令和数据库事务。 首先,我们要理解...

    sql join( inner join, outer join) 分析

    至于标签“源码”和“工具”,这可能暗示在某些数据库管理系统(如MySQL、Oracle、SQL Server等)中实现JOIN操作的特定语法,或者可能涉及到使用某种查询工具(如SQL Developer、SSMS等)来编写和执行JOIN查询。...

    Mysql书籍汇总

    本文将深入探讨在"MySQL书籍汇总"中提到的几个关键知识点——MySQL的基础、架构和性能优化。 首先,我们来了解一下MySQL的基础。MySQL的基本概念包括数据类型(如INT、VARCHAR、DATE等)、表结构设计(如主键、外键...

    mysql学习资料汇总

    这份"mysql学习资料汇总"提供了全面的学习资源,帮助你深入理解并掌握MySQL数据库的使用。 1. **MySQL简介** MySQL是一种开源、免费的SQL数据库,由瑞典的MySQL AB公司开发,目前被Oracle公司收购。它的设计目标是...

    mysql资料完整版

    更复杂的操作涉及JOIN用于合并多表数据,WHERE和HAVING用于过滤结果,GROUP BY和聚合函数(如COUNT, SUM, AVG, MAX, MIN)用于分组和汇总数据。 5. **安全性**:在使用MySQL时,要关注数据安全,例如定期备份,限制...

    【MySQL数据库】二级考试选择题易错题+操作题汇总

    MySQL数据库是目前广泛应用的关系型数据库管理系统,尤其在Web开发领域占据着重要地位。在计算机等级考试中,尤其是二级考试,MySQL数据库的相关知识是必不可少的考核内容。本资料集合了二级考试中的易错选择题和...

    MySQL查询语句汇总.zip

    这份"MySQL查询语句汇总.zip"文件提供了全面的学习资料,包括相关的文档说明,非常适合对MySQL查询语句进行深入学习。 首先,我们要了解SQL(Structured Query Language),它是用于管理关系数据库的标准语言,而...

    MySQL中级面试题汇总

    - 减少JOIN操作,避免笛卡尔积。 - 使用LIMIT限制返回结果的数量。 9. **删除索引**: - 使用DROP INDEX语句,但需谨慎,因为删除索引可能影响查询性能。 10. **三大范式**: - 第一范式(1NF):确保每一列都是...

    mysql查询语句汇总

    ### MySQL查询语句详解 在数据库管理中,MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS)。它支持SQL(Structured Query Language),一种用于管理存储在RDBMS中的数据的标准语言。本文旨在全面介绍MySQL...

    mysql查询语句汇总.zip

    这份"mysql查询语句汇总.zip"包含了丰富的学习资源,包括"mysql查询语句汇总.pdf"和"项目说明.pdf"两个文件,旨在帮助用户深入理解和掌握MySQL查询的各个方面。 首先,"mysql查询语句汇总.pdf"很可能是一个详细的...

    mysql常见面试题汇总

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,广泛应用于各种规模的企业和项目中。为了在面试中脱颖而出,理解并掌握MySQL的基本概念和技术是至关重要的。以下是一系列关于MySQL的常见面试问题和答案,旨在...

    MySQL面试题大汇总

    这份面试题大汇总涵盖了MySQL的基础知识、常见面试题以及企业真实面试题,旨在帮助求职者或在职人员全面理解MySQL的核心概念和技术。下面,我们将详细讨论这些知识点。 **一、MySQL基础** 1. **SQL语言**: SQL...

    MYSQL数据库常见问题诊断.docx

    2. 进程级别参数:sort_buffer_size、join_buffer_size、read_buffer_size 和 read_rnd_buffer_size 都是进程独享的参数,用于加速排序、表关联和数据加载操作。这些参数都可以直接在参数文件中调整,调整之后重启...

    mysql面试-高质量mysql面试题汇总-常见mysql面试题

    本篇将基于提供的面试题汇总,深入探讨MySQL的一些核心概念、最佳实践以及常见问题。 1. **基本概念** - 数据库:存储数据的容器,MySQL中的数据库由多个表组成。 - 表:存储数据的结构化形式,包含列和行。 - ...

    MySQL经典面试题汇总

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,广泛应用于各种规模的企业和项目中。了解并掌握MySQL的面试题,对于准备数据库管理职位的求职者至关重要。以下是一些MySQL的经典面试题及详解,涵盖了从基础到...

    Mysql笔记和常用操作汇总

    这篇笔记和操作汇总将深入探讨MySQL的基本概念、安装与配置、数据类型、表的创建与管理、查询操作、事务处理、索引、视图、存储过程以及备份与恢复等关键知识点。 一、基本概念 1. 数据库:存储数据的容器,由一...

Global site tag (gtag.js) - Google Analytics