- 浏览: 2543100 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (676)
- linux运维 (157)
- php (65)
- mysql (78)
- nginx (27)
- apche (18)
- framework (6)
- windows (9)
- IDE工具 (23)
- struts2 (7)
- java (13)
- 移动互联网 (14)
- memcache redis (23)
- shell基础/命令/语法 (37)
- shell (50)
- puppet (4)
- C (11)
- python (9)
- 产品经理 (27)
- Sphinx (4)
- svn (12)
- 设计构建 (12)
- 项目管理 (44)
- SEO (1)
- 网站架构 (26)
- 审时度势 (42)
- 网络 (14)
- 激发事业[书&视频] (81)
- 其它 (12)
- 摄影 (8)
- android (21)
最新评论
-
zhongmin2012:
原文的书在哪里
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
renzhengzhi:
你好,请问个问题,从master同步数据到slave的时候,s ...
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
ibc789:
你好,看了你的文章,我想请教个问题, 我在用 redis的时候 ...
redis 的两种持久化方式及原理 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
标准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表修复
2015-04-07 10:16 102891.1命令myisamchk(必须停掉mysql服务,或者所操 ... -
Table_locks_immediate
2014-08-25 15:46 3083Table_locks_immediate表示立即释放表锁数 ... -
mysql分区
2014-02-21 10:38 1851mysql自5.1开始支持分区 ... -
InnoDB 引擎独立表空间 innodb_file_per_table
2013-02-25 11:14 1312http://deeplyloving.iteye.com ... -
mysql监测工具tuning-primer.sh
2013-01-21 17:57 2660【转】http://www.dbasky.net ... -
mysql主从日志的定期清理
2013-01-21 16:24 1156[转]http://wangwei007.blog.51 ... -
[转]Mysql报错:Result consisted of more than one row
2013-01-09 16:25 15900Error Code : 1172 Result consi ... -
根据bin log 分析管理员被莫名删除问题
2013-01-04 17:04 1170============== 根据bin log 分析管理 ... -
mysql中select * for update锁表的问题
2013-01-04 14:07 2512先前介绍过SELECT ... FOR UPDATE的用法 ... -
PDO报错:Cannot execute queries while other unbuffered queries are active.
2012-12-12 17:57 11953用 PDOStatement->execute() 执行 ... -
MySQL死锁导致无法查询
2012-12-11 14:51 2565客服反馈后台无法查询,原因大概知道,是因为MySQL的事务 ... -
mysql性能分析:mysql profiling 应用
2012-12-11 10:26 13511)先打开profiling ==> set pro ... -
mysql体系结构和查看当前的数据库请求
2012-12-07 15:00 2893mysql体系结构: 由 ... -
mysql_error:Error starting thread: Resource temporarily unavailable
2012-11-01 17:57 2115121031 18:53:17 InnoDB: Unable ... -
导出bin log时间段脚本datarecover.sh
2012-09-06 13:34 1248修改 _binlogdir='/data/mysql/m ... -
Mysql备份工具xtraback全量和增量测试
2012-08-17 14:58 3868【转载】http://blog.chinaunix.net/s ... -
数据库中的隔离级别和锁机制
2012-08-09 17:55 1587ANSI/ISO SQL92标准定义了 ... -
mysqldump和mysql命令
2012-08-03 13:44 1383========================= mys ... -
mysql cursor游标的使用,实例
2012-07-17 23:09 1816mysql被oracle收购后,从mysql-5.5开始, ... -
使用innotop监测mysql
2012-07-13 10:56 3815最近学习innotop工具,自己搜集整理了一下网上的各种资源, ...
相关推荐
例如,你可能需要使用JOIN从不同的表中获取关联数据,通过嵌套查询过滤特定条件,然后使用LIKE进行文本匹配,最后用GROUP BY和聚合函数进行数据汇总。 对于初学者来说,理解并熟练掌握这些概念可能有些挑战,但通过...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Web应用程序中被广泛使用。本文将深入探讨MySQL的基础知识,包括数据库的概念、MySQL的安装与使用,以及关键的MySQL指令和数据库事务。 首先,我们要理解...
至于标签“源码”和“工具”,这可能暗示在某些数据库管理系统(如MySQL、Oracle、SQL Server等)中实现JOIN操作的特定语法,或者可能涉及到使用某种查询工具(如SQL Developer、SSMS等)来编写和执行JOIN查询。...
本文将深入探讨在"MySQL书籍汇总"中提到的几个关键知识点——MySQL的基础、架构和性能优化。 首先,我们来了解一下MySQL的基础。MySQL的基本概念包括数据类型(如INT、VARCHAR、DATE等)、表结构设计(如主键、外键...
这份"mysql学习资料汇总"提供了全面的学习资源,帮助你深入理解并掌握MySQL数据库的使用。 1. **MySQL简介** MySQL是一种开源、免费的SQL数据库,由瑞典的MySQL AB公司开发,目前被Oracle公司收购。它的设计目标是...
更复杂的操作涉及JOIN用于合并多表数据,WHERE和HAVING用于过滤结果,GROUP BY和聚合函数(如COUNT, SUM, AVG, MAX, MIN)用于分组和汇总数据。 5. **安全性**:在使用MySQL时,要关注数据安全,例如定期备份,限制...
MySQL数据库是目前广泛应用的关系型数据库管理系统,尤其在Web开发领域占据着重要地位。在计算机等级考试中,尤其是二级考试,MySQL数据库的相关知识是必不可少的考核内容。本资料集合了二级考试中的易错选择题和...
这份"MySQL查询语句汇总.zip"文件提供了全面的学习资料,包括相关的文档说明,非常适合对MySQL查询语句进行深入学习。 首先,我们要了解SQL(Structured Query Language),它是用于管理关系数据库的标准语言,而...
- 减少JOIN操作,避免笛卡尔积。 - 使用LIMIT限制返回结果的数量。 9. **删除索引**: - 使用DROP INDEX语句,但需谨慎,因为删除索引可能影响查询性能。 10. **三大范式**: - 第一范式(1NF):确保每一列都是...
### MySQL查询语句详解 在数据库管理中,MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS)。它支持SQL(Structured Query Language),一种用于管理存储在RDBMS中的数据的标准语言。本文旨在全面介绍MySQL...
这份"mysql查询语句汇总.zip"包含了丰富的学习资源,包括"mysql查询语句汇总.pdf"和"项目说明.pdf"两个文件,旨在帮助用户深入理解和掌握MySQL查询的各个方面。 首先,"mysql查询语句汇总.pdf"很可能是一个详细的...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,广泛应用于各种规模的企业和项目中。为了在面试中脱颖而出,理解并掌握MySQL的基本概念和技术是至关重要的。以下是一系列关于MySQL的常见面试问题和答案,旨在...
这份面试题大汇总涵盖了MySQL的基础知识、常见面试题以及企业真实面试题,旨在帮助求职者或在职人员全面理解MySQL的核心概念和技术。下面,我们将详细讨论这些知识点。 **一、MySQL基础** 1. **SQL语言**: SQL...
2. 进程级别参数:sort_buffer_size、join_buffer_size、read_buffer_size 和 read_rnd_buffer_size 都是进程独享的参数,用于加速排序、表关联和数据加载操作。这些参数都可以直接在参数文件中调整,调整之后重启...
本篇将基于提供的面试题汇总,深入探讨MySQL的一些核心概念、最佳实践以及常见问题。 1. **基本概念** - 数据库:存储数据的容器,MySQL中的数据库由多个表组成。 - 表:存储数据的结构化形式,包含列和行。 - ...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,广泛应用于各种规模的企业和项目中。了解并掌握MySQL的面试题,对于准备数据库管理职位的求职者至关重要。以下是一些MySQL的经典面试题及详解,涵盖了从基础到...
这篇笔记和操作汇总将深入探讨MySQL的基本概念、安装与配置、数据类型、表的创建与管理、查询操作、事务处理、索引、视图、存储过程以及备份与恢复等关键知识点。 一、基本概念 1. 数据库:存储数据的容器,由一...