主要目的:


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

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

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

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


②当第二个表中的数据不存在时,对应记录显示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. PE文件结构详解(三)
  2. lduan SCCM 2012 介绍及SQL部署(一)
  3. NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)
  4. SQL Server中关于跟踪(Trace)那点事(转载)
  5. python读取行、分割、存储_Pytables / Pandas:组合(读取?)按行分割的多个HDF5存储...
  6. 如果在山上挖一个池塘,不放鱼,里面会慢慢有鱼吗?
  7. 软件工程导论 02章可行性研究
  8. lambda表达式for_each,find_if简介
  9. ADO.NET 2.0 功能一览
  10. [转载] Python中int类型和string类型的相互转换
  11. XMLHttpRequset发送GET请求
  12. 北风:信息差有多重要?你是怎么被割韭菜的?
  13. 研究生如何学习与科研的几点建议——来自一枚菜博的愚见
  14. logstash grok mysql_日志分析logstash插件-grok详解
  15. 解决uniapp调试过程中的请求跨域和环境配置
  16. Enter键绑定按钮或方法
  17. T1055 判断闰年 (信息学一本通C++)
  18. sklearn中StandardScaler()
  19. zabbix5.0监控esxi和vcenter
  20. 房地产暴利的秘密还鲜为人知(原创首发,深度好文)——何学林中国房地产大策划之五

热门文章

  1. HTML页面多个平行四边形,平行四边形奥数题
  2. 屏幕坏点检测图片_【沙发管家】教你自己测试智能电视屏幕
  3. python turtle画房子详细解释_简述python的turtle绘画命令及解释
  4. 【读书笔记】深入分析Java Web技术内幕-Cookie与Session
  5. 多线多IP的服务器配置
  6. 软件评测-信息安全-应用安全-资源控制-用户登录限制(上)
  7. Java程序员从笨鸟到菜鸟之(四十八)细谈struts2(十)ognl概念和原理详解
  8. 现有书形成的网络职业知识体系
  9. 机器学习之支持向量机算法(二)
  10. 同步代码时忽略maven项目 target目录