LEFT OUTER JOIN
主要目的:
①表关联查询时,被关联的表 (就是没有外键的那个表) 需要使用多次(起多个别名) ,
这个表中的主键是一个复合主键(其中一个是那个外键,另一个是自己的一个...),
我们想得到这个关联的信息,同时条件是...,
还要 把这些数据在一行记录中显示!
②当第二个表中的数据不存在时,对应记录显示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相关推荐
- [摘]终于找到一个有助理解left/right/full outer join的例子
近日在学习<Understading DB2>的时候找到了一个例子,对于理解 left/right/full 三种 outer join 的大有裨益. 先看样本数据,来自DB2的示例数据库 ...
- left join 和 left outer join 的区别
老是混淆,做个笔记,转自:https://www.cnblogs.com/xieqian111/p/5735977.html left join 和 left outer join 的区别 通俗的讲: ...
- R语言merge函数全连接dataframe数据(Full (outer) join)、merge函数进行全连接必须将参数all设置为true(all=TRUE)、默认merge函数通过公共列名合并数
R语言merge函数全连接dataframe数据(Full (outer) join).merge函数进行全连接必须将参数all设置为true(all=TRUE).默认merge函数通过公共列名合并数 ...
- 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函数通过公共 ...
- 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 ...
- sql sum条件求和_SQL进阶7外连接(outer join)
本文中介绍的SQL中行列转换和嵌套式侧栏的生成,将SQL语句查询的结果转换成我们想要的结果. 行转列,制作交叉表头 列转行 实现行列转换(行->列):制作交叉表 需求 根据下面的表Courses ...
- 使用FULL OUTER JOIN拼接表数据
今天帮用户修改一个报表,里边设计到出库和入库的操作,要将每个产品每天的出入口信息列出来. 可能存在这样的情况: 1. 产品在出库表中存在数据但是入库表中没有数据 2. 产品入库表中存在数据但是 ...
- 如何在MySQL中进行FULL OUTER JOIN?
我想在MySQL中进行完全外部联接. 这可能吗? MySQL是否支持完全外部联接? #1楼 在SQLite中,您应该这样做: SELECT * FROM leftTable lt LEFT JOIN ...
- 关于Oracle full outer join 的bug问题分析及处理
full (outer) join是用来全连接两个表的语法.即希望将A表和B表关联,能够得到A表中有而B表中没有的记录,或者B表中有而A表中没有的记录. 如何判断是否有该记录,则通过on子句来关联. ...
- left join 和 left outer join 有什么区别
left join 是left outer join的简写,left join默认是outer属性的. Inner Join 逻辑运算符返回满足第一个(顶端)输入与第二个(底端)输入联接的每一行.这个 ...
最新文章
- PE文件结构详解(三)
- lduan SCCM 2012 介绍及SQL部署(一)
- NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)
- SQL Server中关于跟踪(Trace)那点事(转载)
- python读取行、分割、存储_Pytables / Pandas:组合(读取?)按行分割的多个HDF5存储...
- 如果在山上挖一个池塘,不放鱼,里面会慢慢有鱼吗?
- 软件工程导论 02章可行性研究
- lambda表达式for_each,find_if简介
- ADO.NET 2.0 功能一览
- [转载] Python中int类型和string类型的相互转换
- XMLHttpRequset发送GET请求
- 北风:信息差有多重要?你是怎么被割韭菜的?
- 研究生如何学习与科研的几点建议——来自一枚菜博的愚见
- logstash grok mysql_日志分析logstash插件-grok详解
- 解决uniapp调试过程中的请求跨域和环境配置
- Enter键绑定按钮或方法
- T1055 判断闰年 (信息学一本通C++)
- sklearn中StandardScaler()
- zabbix5.0监控esxi和vcenter
- 房地产暴利的秘密还鲜为人知(原创首发,深度好文)——何学林中国房地产大策划之五
热门文章
- HTML页面多个平行四边形,平行四边形奥数题
- 屏幕坏点检测图片_【沙发管家】教你自己测试智能电视屏幕
- python turtle画房子详细解释_简述python的turtle绘画命令及解释
- 【读书笔记】深入分析Java Web技术内幕-Cookie与Session
- 多线多IP的服务器配置
- 软件评测-信息安全-应用安全-资源控制-用户登录限制(上)
- Java程序员从笨鸟到菜鸟之(四十八)细谈struts2(十)ognl概念和原理详解
- 现有书形成的网络职业知识体系
- 机器学习之支持向量机算法(二)
- 同步代码时忽略maven项目 target目录