主要目的:


①表关联查询时,被关联的表 (就是没有外键的那个表) 需要使用多次(起多个别名) ,

    这个表中的主键是一个复合主键(其中一个是那个外键,另一个是自己的一个...),

    我们想得到这个关联的信息,同时条件是...,   

    还要 把这些数据在一行记录中显示!


②当第二个表中的数据不存在时,对应记录显示null(mesg) ,

   同时 不会影响已查出来的数据。

(即,不会因为这个条件不符和,使查处的记录数为零)

(这个条件是AND C.stauts=2 )

具体意思直接看代码!

------------------------------------------------------------------------------------

创建表和数据:

create table studentMesg
(
    id varchar(3),
    stauts int,
    mesg varchar(10),

primary key(id ,stauts)

);

insert into studentMesg values('001',1,'TomMesg1');
insert into studentMesg values('001',2,'TomMesg2');
insert into studentMesg values('001',3,'TomMesg3');

insert into studentMesg values('002',1,'JeckMesg1');
+-----+--------+-----------+
| id  | stauts | mesg      |
+-----+--------+-----------+
| 001 |      1 | TomMesg1  |
| 001 |      2 | TomMesg2  |

| 001 |      3 | TomMesg3   |
| 002 |      1 | JeckMesg1 |
+-----+--------+-----------+

create table student
(
    id varchar(3) primary key,
    name varchar(10),
    age int,
    foreign key(id) references studentMesg(id)

);
insert into student values('001','Tom',23);
insert into student values('002','Jeck',23);
insert into student values('003','Marry',23);//无法插入
+-----+------+------+
| id  | name | age  |
+-----+------+------+
| 001 | Tom  |   23 |
| 002 | Jeck |   23 |
+-----+------+------+

------------------------------------------------------------------------------------------

执行查询:

SELECT A.id, A.name, A.age,B.mesg,C.mesg from Student AS A

LEFT OUTER JOIN studentMesg AS B
ON A.id = B.id
AND B.stauts=1

LEFT OUTER JOIN studentMesg AS C
ON A.id = C.id
AND C.stauts=2

WHERE A.id ='001 ';

结果1

+-----+------+------+----------+----------+
| id  | name | age  | mesg     | mesg     |
+-----+------+------+----------+----------+
| 001 | Tom  |   23 | TomMesg1 | TomMesg2 |
+-----+------+------+----------+----------+

结果1, 说明:通过这种方式,表关联时,我们可以把数据整合在一行。

--------------------------------------------------------------------
SELECT A.id, A.name, A.age,B.mesg,C.mesg from Student AS A

LEFT OUTER JOIN studentMesg AS B
ON A.id = B.id
AND B.stauts=1

LEFT OUTER JOIN studentMesg AS C
ON A.id = C.id
AND C.stauts=2

WHERE A.id ='002 ';

结果2
+-----+------+------+-----------+------+
| id  | name | age  | mesg      | mesg |
+-----+------+------+-----------+------+
| 002 | Jeck |   23 | JeckMesg1 | NULL |
+-----+------+------+-----------+------+

结果2, 说明:不会因为C中没有002的数据,从而使整个数据不存在。

      写SQL时,一定要注意SQL条件的位置,是在JONI ON里面,还是在

最外面的WHERE里面。

      在里面时,连接的数据如果不存在,也会查出数据,只是连接内容为空 ,

一定注意!!!

(以上内容2010年10月22日更新 )


LEFT OUTER JOIN相关推荐

  1. [摘]终于找到一个有助理解left/right/full outer join的例子

    近日在学习<Understading DB2>的时候找到了一个例子,对于理解 left/right/full 三种 outer join 的大有裨益. 先看样本数据,来自DB2的示例数据库 ...

  2. left join 和 left outer join 的区别

    老是混淆,做个笔记,转自:https://www.cnblogs.com/xieqian111/p/5735977.html left join 和 left outer join 的区别 通俗的讲: ...

  3. R语言merge函数全连接dataframe数据(Full (outer) join)、merge函数进行全连接必须将参数all设置为true(all=TRUE)、默认merge函数通过公共列名合并数

    R语言merge函数全连接dataframe数据(Full (outer) join).merge函数进行全连接必须将参数all设置为true(all=TRUE).默认merge函数通过公共列名合并数 ...

  4. R语言merge函数左连接dataframe数据(Left (outer) join in R)、左连接必须将参数all设置(all.x = TRUE)、默认merge函数通过公共列名合并数据集

    R语言merge函数左连接dataframe数据(Left (outer) join in R).merge函数进行左连接必须将参数all设置为(all.x = TRUE).默认merge函数通过公共 ...

  5. oracle full outer join,oracle 内连接(inner join)、外连接(outer join)、全连接(full join)...

    建表语句: create table EMPLOYEE ( EID NUMBER, DEPTID NUMBER, ENAME VARCHAR2(200) ) create table DEPT ( D ...

  6. sql sum条件求和_SQL进阶7外连接(outer join)

    本文中介绍的SQL中行列转换和嵌套式侧栏的生成,将SQL语句查询的结果转换成我们想要的结果. 行转列,制作交叉表头 列转行 实现行列转换(行->列):制作交叉表 需求 根据下面的表Courses ...

  7. 使用FULL OUTER JOIN拼接表数据

    今天帮用户修改一个报表,里边设计到出库和入库的操作,要将每个产品每天的出入口信息列出来. 可能存在这样的情况: 1.   产品在出库表中存在数据但是入库表中没有数据 2.   产品入库表中存在数据但是 ...

  8. 如何在MySQL中进行FULL OUTER JOIN?

    我想在MySQL中进行完全外部联接. 这可能吗? MySQL是否支持完全外部联接? #1楼 在SQLite中,您应该这样做: SELECT * FROM leftTable lt LEFT JOIN ...

  9. 关于Oracle full outer join 的bug问题分析及处理

    full (outer) join是用来全连接两个表的语法.即希望将A表和B表关联,能够得到A表中有而B表中没有的记录,或者B表中有而A表中没有的记录. 如何判断是否有该记录,则通过on子句来关联. ...

  10. left join 和 left outer join 有什么区别

    left join 是left outer join的简写,left join默认是outer属性的. Inner Join 逻辑运算符返回满足第一个(顶端)输入与第二个(底端)输入联接的每一行.这个 ...

最新文章

  1. NetCore TagHelpers标签
  2. SourceInsight 汉化
  3. k-Means算法(Machine Learning in Action)基于python3.6
  4. 机器学习(machine learning)之AdaBoost算法
  5. 怎么表示一个PHP语句块,php switch语句多个值匹配同一代码块应用示例
  6. 查看有哪些表被锁住 如何杀死oracle死锁进程
  7. 491. 递增子序列
  8. dismiss 多个viewController
  9. python目录和文件的基本操作_python学习笔记(七)——文件和目录操作
  10. matlab实现输出的几种方式
  11. Javascript - The same RegExp behave differently
  12. CSPNet: A New Backbone that can Enhance Learning Capability of CNN
  13. bat并行调用打包bat总结
  14. 怎样使用轻快pdf阅读器
  15. 基于vue+js的商城、购物网站 毕业设计 毕设源代码的实现和设计(1)首页
  16. 【IPS安全策略配置】
  17. 二、Linux 文件与目录结构、VI/VIM 编辑器(重要)
  18. 【实例】用PHP制作一个简单的日历
  19. win10激活出现错误0xc004C003
  20. 八卦一下量子机器学习的历史

热门文章

  1. java drawimage api_HTML5 Canvas API中drawImage()方法的使用实例
  2. ios和android安全对比
  3. 窗口操作-关闭,最小化
  4. 利用 John the Ripper 破解用户登录密码
  5. Phoenix Framework 1.4.7,自动化测试平台
  6. 多数据源切换(拦截器)
  7. 正确地利用Netty建立连接池
  8. [Be a Coding Plasterer] Components 1:get Basic Things
  9. 飞思卡尔9S12X系列双核中的协处理器XGATE使用方法
  10. [aaronyang原创] Mssql 一张表3列的sql面试题,看你sql学的怎么样