mysql的jion

语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2  
说明:table1, table2参数用于指定要将记录组合的表的名称。 
   field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。
   compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。

以下两个表
表A记录如下:                                 表B记录如下: 
aID        aNum               bID        bName
1           a201501                           1            b201601
2           a201502              2            b201602
3           a201503              3            b201603
4           a201504              4            b201604
5           a201505            8            b201608

1.left join(左联接) 

select * from a left join b on a.aID = b.bID

结果如下: 
aID        aNum                      bID           bName 
1            a201501             1               b201601 
2            a201502             2               b201602 
3            a201503             3               b201603 
4            a201504             4               b201604 
5            a201505             NULL       NULL

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

2.right join(右联接) 

select * from a right join b on a.aID = b.bID

结果如下: 
aID        aNum                      bID           bName 
1            a201501             1               b201601 
2            a201502             2               b201602 
3            a201503             3               b201603 
4            a201504             4               b201604 
NULL      NULL           8               a201508

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

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

select * from a innner join b on a.aID = b.bID

等同于以下SQL句:

select * from a,b where a.aID = b.bID

结果如下: 
aID        aNum                      bID           bName 
1            a201501             1               b201601 
2            a201502             2               b201602 
3            a201503             3               b201603 
4            a201504             4               b201604

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

时间: 2024-10-10 18:04:32

mysql的jion的相关文章

[转]一个用户SQL慢查询分析,原因及优化

来源:http://blog.rds.aliyun.com/2014/05/23/%E4%B8%80%E4%B8%AA%E7%94%A8%E6%88%B7sql%E6%85%A2%E6%9F%A5%E8%AF%A2%E5%88%86%E6%9E%90%EF%BC%8C%E5%8E%9F%E5%9B%A0%E5%8F%8A%E4%BC%98%E5%8C%96/ 问题描述 一个用户反映先线一个SQL语句执行时间慢得无法接受.SQL语句看上去很简单(本文描述中修改了表名和字段名):SELECT cou

记一次mysql多表查询(left jion)优化案例

一次mysql多表查询(left jion)优化案例 在新上线的供需模块中,发现某一个查询按钮点击后,出不来结果,找到该按钮对应sql手动执行,发现需要20-30秒才能出结果,所以服务端程序判断超时,故先不显示结果 以下是对这条查询的优化记录 1 数据库配置 数据库配置:4C8G 主表数据:3W+ 2 sql语句 提取sql语句,简化如下 SELECT taba.id, taba.title, taba.type, taba.end_time, tabb.username, tabc.orgna

mysql的left jion:就是left outer join(right join同理)

左外连接: A left jion B on A.id=B.id 就是A表数据不动,将B表里面能和A对应上的数据补充到A表数据后 而右外连接: rignt jion 则是将A补充到B,B不动,保存全部. left jion就是left outer join,是简写. 例子: select * from app_id_gx7 LEFT OUTER JOIN ad_network_app on app_id_gx7.app_id = ad_network_app.app_id where ad_ne

MySQL的分表和分区介绍

在日常开发或维护中经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕.分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率. 一.什么是分表: 分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件.这些子表可以分布在同一块磁盘上,

【转】Mysql之inner join,left join,right join详解

首先借用官方的解释下: inner join(等值连接):只返回两个表中联结字段相等的行: left join(左联接):返回包括左表中的所有记录和右表中联结字段相等的记录: right join(右联接):返回包括右表中的所有记录和左表中联结字段相等的记录. 比如我们有xs.cj两个表 xs表 cj表 --------------- ---------------------- id name id score 1 张三 1 96 2 李四 2 80 3 86 Sql代码 1 SELECT *

MySQL阶段七——MySQL优化

mysql优化 -一.硬件优化(优化的主要点) 01.CPU----最好是64位的,例:8-16颗CPU 02.内存----例:96G-128G,3-4个实例 03.disk----数量越多越好,性能:ssd(适合高并发业务)>sas(普通上线业务)>sata(适合线下) RAID----部署合适的RAID 04.网卡----多块网卡bond,以及buffer,tcp优化 -二.软件优化 01.操作系统----x86_64 02.软件:mysql,编译优化 -三.my.cnf里面参数优化 (一

《MySQL必知必会》读书笔记

一.了解MySQL 1.什么是数据库? 数据库是一种以某种有组织的方式存储的数据集合. 2.模式(schema):关于数据库和表的布局及特性的信息. 3.列:正确的将数据分解为多个列极为重要.通过把它分解开,才有可能利用特定的列对数据进行排序和过滤. 4.主键(primary key):一列,其值能够唯一区分表中每个行,用来表示一个特定的行.应该保证创建的每个表具有一个主键,以便于以后的数据操纵和管理. 5.外键: 6.SQL语句不区分大小写,但是开发人员通常对所有SQL关键字大写,而对所有列和

mysql数据库分表分区

防伪码:博观而约取,厚积而薄发 为什么要分表和分区? 我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且 由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈. mysql 中有一种机制是表锁定和行锁定,是为了保证数据的完整性.表锁定表示你们都不能 对这张表进行操作,必须等我对表操作完才行.行锁定也一样,别的 sql 必须等我对这条数 据操作完了,才能对这条数据进行操作.当出现这种情况时,我们可以考虑分表或分区. 1.分表 什么是分表? 分表是将一个大表按

mysql sql优化及注意事项

sql优化分析 通过slow_log等方式可以捕获慢查询sql,然后就是减少其对io和cpu的使用(不合理的索引.不必要的数据访问和排序)当我们面对具体的sql时,首先查看其执行计划A.看其是否使用索引B.查看其查询的记录数C.确定索引的代价是否过高D.是否可以使用复合索引E.是否有“using temporary”F.是否有“using filesort” 创建高效索引 mysql的innodb有自己特殊的聚集索引(数据是按聚集索引的顺序存储的并和索引存储在一起),索引访问效率较高,次要索引是