下面是例子分析

表A记录如下: 
  1. aID aNum
  2. 1 a20050111
  3. 2 a20050112
  4. 3 a20050113
  5. 4 a20050114
  6. 5 a20050115
表B记录如下:
  1. bID bName
  2. 1 2006032401
  3. 2 2006032402
  4. 3 2006032403
  5. 4 2006032404
  6. 8 2006032408

创建这两个表SQL语句如下: 
 
  1. CREATE TABLE a
  2. aID int( 1 ) AUTO_INCREMENT PRIMARY KEY ,
  3. aNum char( 20 )
  4. )
  5. CREATE TABLE b(
  6. bID int( 1 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  7. bName char( 20 )
  8. )
  9. INSERT INTO a
  10. VALUES ( 1, 'a20050111' ) , ( 2, 'a20050112' ) , ( 3, 'a20050113' ) , ( 4, 'a20050114' ) , ( 5, 'a20050115' ) ;
  11. INSERT INTO b
  12. VALUES ( 1, ' 2006032401' ) , ( 2, '2006032402' ) , ( 3, '2006032403' ) , ( 4, '2006032404' ) , ( 8, '2006032408' ) ;

实验如下: 
1.left join(左联接) 
 
  1. sql语句如下:
  2. SELECT * FROM a
  3. LEFT JOIN b
  4. ON a.aID =b.bID
结果如下: 
 
  1. aID aNum bID bName
  2. 1 a20050111 1 2006032401
  3. 2 a20050112 2 2006032402
  4. 3 a20050113 3 2006032403
  5. 4 a20050114 4 2006032404
  6. 5 a20050115 NULL NULL
  7. //(所影响的行数为 5 行)

结果说明: 
   left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的. 
   换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID). B表记录不足的地方均为NULL. 
 
2.right join(右联接)
 
  1. //sql语句如下:
  2. SELECT * FROM a
  3. RIGHT JOING b
  1. ON a.aID = b.bID
结果如下: 
 
  1. aID aNum bID bName
  2. 1 a20050111 1 2006032401
  3. 2 a20050112 2 2006032402
  4. 3 a20050113 3 2006032403
  5. 4 a20050114 4 2006032404
  6. NULL NULL 8 2006032408
  1. //(所影响的行数为 5 行)

结果说明: 
 仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充. 
3.inner join(相等联接或内联接)
 
  1. //sql语句如下:
  2. SELECT * FROM a
  3. INNER JOIN b
  1. ON a.aID =b.bID
等同于以下SQL句: 
 
  1. SELECT *
  2. FROM a,b
  1. WHERE a.aID = b.bID
结果如下: 
 
  1. aID aNum bID bName
  2. 1 a20050111 1 2006032401
  3. 2 a20050112 2 2006032402
  4. 3 a20050113 3 2006032403
  1. 4 a20050114 4 2006032404
结果说明: 
  很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录. LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即 使在第二个(右边)表中并没有相符值的记录。 
 
语法:
  1. FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2
说明:table1, table2参数用于指定要将记录组合的表的名称。 
field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的 名称。 compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。 如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误。

转载于:https://blog.51cto.com/wxweven520/1071086

mysql join查询相关推荐

  1. 详解 Mysql LEFT JOIN和JOIN查询区别及原理

    一.Join查询原理 查询原理:MySQL内部采用了一种叫做 nested loop join(嵌套循环连接)的算法.Nested Loop Join 实际上就是通过驱动表的结果集作为循环基础数据,然 ...

  2. MySQL第9天:MySQL索引优化分析之join查询

    MySQL索引优化分析之join查询 #编写时间:2017.3.12 #编写地点:广州 常见join查询: 1.SQL执行顺序:手写.机读.总结 (1)手写 (2)机读 (3)总结 2.join图 3 ...

  3. mysql join 联合查询,MySQL连接(join)查询

    1. MySQL连接(join)查询 连接(join)查询是将两个查询的结果以"横向对接"的方式合并起来的结果. 对比:联合查询 是将两个查询的结果以"纵向堆叠" ...

  4. mysql+join的原理,Mysql连接join查询原理知识点

    Mysql连接join查询原理知识点 Mysql连接(join)查询 1.基本概念 将两个表的每一行,以"两两横向对接"的方式,所得到的所有行的结果. 假设: 表A有n1行,m1列 ...

  5. mysql的join查询和多次查询比较

    MySQL多表关联查询效率高点还是多次单表查询效率高? 在数据量不够大的时候,用join没有问题,但是一般都会拉到service层上去做 第一:单机数据库计算资源很贵,数据库同时要服务写和读,都需要消 ...

  6. mysql 左连接left join 查询超慢问题

    做了一个项目,数据表三万多,left join查询慢的要死. 最后经过排查和网上查,最后得出以下几点: 1.确保两个关联表的关联字段类型要一致 2.确保两个关联表的关联字段要加入索引 3.可以的话最好 ...

  7. Mysql join效率_mysql 子查询与join性能对比

    有如下的数据表: application_daily 11万条数据 application_info400多条数据 查询结果数据为19498 来看下mysql 子查询的例子. 例1,子查询 (0.01 ...

  8. SQL性能下降原因及Join查询

    原因 查询语句写得烂 索引失效 关联查询过多(设计缺陷) 服务器调优及各个参数设置(缓冲.线程数等) Join查询的SQL执行顺序 手写 SELECT <select_list> FROM ...

  9. mysql慢查询开启及分析方法

    最近服务维护的公司的DB服务器,总是会出现问题,感觉需要优化一下了,登陆上去,发现慢查询日志都没有开,真是惭愧, 故果断加上慢查询日志,经过分析sql记录,发现问题很多,开发人员很多没有对sql优化, ...

最新文章

  1. 软件工程第二次课后作业——Gaoooo
  2. (linux) Firefox is already running, but is not responding解决方法
  3. 2020年度中国生命科学十大进展公布 | 中国科协生命科学学会联合体
  4. 为什么重启路由器 经常重启让WiFi更快
  5. Error和Exception有什么区别?(还在总结)
  6. CodeForces - 1509C The Sports Festival(dp)
  7. 【ArcGIS遇上Python】ArcGIS python计算长时间序列多个栅格数据的平均值
  8. P4824 [USACO15FEB]Censoring S kmp + 栈
  9. 内核抢占,让世界变得更美好 | Linux 内核
  10. python字符串去掉标点_在Python去掉标点符号字符串的最佳方式_string_酷徒编程知识库...
  11. mysql动态变量查询_使用php变量创建动态mysql查询
  12. 神经网络模型学习笔记(ANN,BPNN)
  13. revit二次开发概念_Revit二次开发那些事儿
  14. 云计算时代迎接挑战方能脱颖而出
  15. 柯美文件服务器,柯尼卡美能达复印机共享SMB文件扫描
  16. PDPS汉化包安装与语言界面切换操作
  17. mc服务器怎么修改浮空字,如何制作悬浮字?我的世界教程 | 我的世界 | MC世界侠...
  18. Graccvs文件正文提取开发组件--文件内容搜索的利器
  19. python抽奖游戏大全_python实现转盘效果 python实现轮盘抽奖游戏
  20. mysql汉字插不进去_Mysql下插入汉字失败

热门文章

  1. 异形隔离java剧情_异形隔离攻略 系统上手教程 全剧情流程图文攻略(41)
  2. java 快速入门_Java快速入门
  3. 利用mem数组完成MM32 的 MicroPython中UART1的(REPL)的交互
  4. 测试电子负载用于无线充电系统的功能和精度
  5. Charles 河畔的大圆顶
  6. 铁路运货的运费与路程远近java_JAVA铁路运货的运费与路程远近及货物的重 – 手机爱问...
  7. java继承 映射_hibernate继承关系映射和java反射机制的运用
  8. androidsettitle方法_Android使用setCustomTitle()方法自定义对话框标题
  9. C 线程中容易忽视的 restrict 修饰符修饰
  10. 数值分析龙贝格matlab,龙贝格matlab程序