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 逻辑运算符返回满足第一个(顶端)输入与第二个(底端)输入联接的每一行.这个 ...
最新文章
- NetCore TagHelpers标签
- SourceInsight 汉化
- k-Means算法(Machine Learning in Action)基于python3.6
- 机器学习(machine learning)之AdaBoost算法
- 怎么表示一个PHP语句块,php switch语句多个值匹配同一代码块应用示例
- 查看有哪些表被锁住 如何杀死oracle死锁进程
- 491. 递增子序列
- dismiss 多个viewController
- python目录和文件的基本操作_python学习笔记(七)——文件和目录操作
- matlab实现输出的几种方式
- Javascript - The same RegExp behave differently
- CSPNet: A New Backbone that can Enhance Learning Capability of CNN
- bat并行调用打包bat总结
- 怎样使用轻快pdf阅读器
- 基于vue+js的商城、购物网站 毕业设计 毕设源代码的实现和设计(1)首页
- 【IPS安全策略配置】
- 二、Linux 文件与目录结构、VI/VIM 编辑器(重要)
- 【实例】用PHP制作一个简单的日历
- win10激活出现错误0xc004C003
- 八卦一下量子机器学习的历史
热门文章
- java drawimage api_HTML5 Canvas API中drawImage()方法的使用实例
- ios和android安全对比
- 窗口操作-关闭,最小化
- 利用 John the Ripper 破解用户登录密码
- Phoenix Framework 1.4.7,自动化测试平台
- 多数据源切换(拦截器)
- 正确地利用Netty建立连接池
- [Be a Coding Plasterer] Components 1:get Basic Things
- 飞思卡尔9S12X系列双核中的协处理器XGATE使用方法
- [aaronyang原创] Mssql 一张表3列的sql面试题,看你sql学的怎么样