SQL 表连接查询出现重复列,由此理清LEFT JOIN、INNER JOIN的区别
1、先创建两个临时表,并插入数据
CREATE TABLE #TEMP1
(
ID INT IDENTITY(1,1) PRIMARY KEY,
name NVARCHAR(50)
)
CREATE TABLE #TEMP2
(
ID INT IDENTITY(1,1) PRIMARY KEY,
name NVARCHAR(50)
)
INSERT INTO #TEMP1
( name )
VALUES (
N'A' -- name - nvarchar(50)
),('B')
INSERT INTO #TEMP2
( name )
VALUES (
N'A' -- name - nvarchar(50)
),('B'),('C'),('B'),('C')
2、
#TEMP1 记录如下
ID name
1 A
2 B
#TEMP2 记录如下
ID name
1 A
2 B
3 C
4 B
5 C
3、内连接 记录如下
SELECT T1.ID,T1.name FROM #TEMP1 AS T1 INNER JOIN #TEMP2 AS T2 ON T1.name=T2.name
ID name
1 A
2 B
2 B
4、左连接 记录如下
SELECT T1.ID,T1.name FROM #TEMP1 AS T1 LEFT JOIN #TEMP2 AS T2 ON T1.name=T2.name
ID name
1 A
2 B
2 B
结果说明:
1、Left Join(左联接)
以左表为中心,返回左表中符合条件的所有记录以及右表中联结字段相等的记录——当右表中无相应联接记录时,返回空值。
2、Inner Join(等值连接)
返回两个表中联结字段相等的行。
注意:如出现重复结果列,要从出现重复源头表的列,开始过滤!
先找出重复的列
SELECT name FROM #TEMP2 GROUP BY name HAVING COUNT(1)>1
再用EXISTS 和NOT IN UNION ALL
SQL 表连接查询出现重复列,由此理清LEFT JOIN、INNER JOIN的区别的更多相关文章
- SQL表连接查询(inner join、full join、left join、right join)
SQL表连接查询(inner join.full join.left join.right join) 前提条件:假设有两个表,一个是学生表,一个是学生成绩表. 表的数据有: 一.内连接-inner ...
- SQL表连接查询
SQL表连接查询(inner join.full join.left join.right join) 表的数据有: 一.内连接-inner jion : 最常见的连接查询可能是这样,查出学生的名字和 ...
- SQL表连接查询inner join left join right join full join ...
一.最常见的连接查询 select s.name,m.mark from student s,mark m where s.id=m.studentid. 二.内连接-inner join sel ...
- SQL表连接查询(inner join(join)、full join、left join、right join、cross join)
下面列出了您可以使用的 JOIN 类型,以及它们之间的差异. JOIN: 如果表中有至少一个匹配,则返回行(join=inner join) LEFT JOIN: 即使右表中没有匹配,也从左表返回所有 ...
- oracle(sql)基础篇系列(二)——多表连接查询、子查询、视图
多表连接查询 内连接(inner join) 目的:将多张表中能通过链接谓词或者链接运算符连接起来的数据查询出来. 等值连接(join...on(...=...)) --选出雇员的名字和雇员所 ...
- SQL多表连接查询以及mysql数据库、sqlserver数据库常见不同点
mysql数据库表及数据准备语句: USE test; DROP TABLE IF EXISTS `teacher_table`; DROP TABLE IF EXISTS `student_tabl ...
- oracle(sql)基础篇系列(二)——多表连接查询、子查询、视图
多表连接查询 内连接(inner join) 目的:将多张表中能通过链接谓词或者链接运算符连接起来的数据查询出来. 等值连接(join...on(...=...)) --选出雇员的名字和雇员所在的部门 ...
- 010.简单查询、分组统计查询、多表连接查询(sql实例)
-------------------------------------day3------------ --添加多行数据:------INSERT [INTO] 表名 [(列的列表)] --SEL ...
- SQL多表连接查询(详细实例)
转载博客:joeleo博客(http://www.xker.com/page/e2012/0708/117368.html) 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:stud ...
随机推荐
- PHP 扩展开发(将自己的一些代码封装成PHP扩展函数)
今天时间不多,先给个地址,能搜到我这篇blog的朋友先看看我最近在看的一些文章.资料吧: 我的环境是 lnmp1.1 的 (LNMP一键安装包),所以要进行PHP扩展开发首先应该对环境配置和shell ...
- UBER的故事
今天分享一个很好的视频,19分钟,这个视频讲了过去几年一家伟大公司的成长的思路,这个演讲的PPT很棒,演讲者的语速.语调.表情等也非常适合大家在日常工作中学习. 链接:http://v.youku ...
- Android源码——AsynTask
AsyncTask<Params, Progress, Result>中三个参数为: Params 输入数据 Progress 过程数据 Result ...
- RF 基本方法
1. Select From List id=sourceConn oracle_source 从下拉框选取值. 2. Select Radio button name value 选择单选框.也可 ...
- QR 二维码总结
@(Java ThirdParty)[QR] QR 二维码总结 根据Wiki中的介绍,QR Code(Quick Response Code),二维条形码,由日志设计应用于汽车制造工业中.条形码中包含 ...
- 堆排序分析及php实现
堆排序:是一种特殊形式的选择排序,他是简单选择排序的一种改进. 什么是堆? 具有n个元素的序列:{k1,k2,ki,…,kn} (ki <= k2i,ki <= k2i+1) 或者 (ki ...
- Mac下安装ionic和cordova,并生成iOS项目
为了开发HTML5,除了最新使用React Native等之外,目前首选的为稳定的ionic+Angularjs来开发iOS和android. Ionic(ionicframework一款接近原生的H ...
- JAVA WEB WITH IDEA
本文主要介绍使用IDEA开发环境,创建JAVA WEB 工程,并介绍war包的制作过程. 1 创建MAVEN工程
- Android中Service通信(二)——绑定Service进行通信
一.把输入文本的数据同步到服务的实例(如何执行服务的内部代码) 绑定服务比启动服务更加方便高效,绑定服务中的直接方法调用比Intent作为载体传输更为快捷得多. 1.activity_main.xml ...
- fedora配置163为yum的源
一种方法: 1.下载 http://mirrors.163.com/.help/fedora-163.repo 和 http://mirrors.163.com/.help/fedora-updat ...