SQL中JOIN和UNION区别、用法及示例介绍_MsSql

1.JOIN和UNION区别

join 是两张表做交连后里面条件相同的部分记录产生一个记录集,
union是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集 。

JOIN用于按照ON条件联接两个表,主要有四种:
INNER JOIN:内部联接两个表中的记录,仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。我理解的是只要记录不符合ON条件,就不会显示在结果集内。
LEFT JOIN / LEFT OUTER JOIN:外部联接两个表中的记录,并包含左表中的全部记录。如果左表的某记录在右表中没有匹配记录,则在相关联的结果集中右表的所有选择列表列均为空值。理解为即使不符合ON条件,左表中的记录也全部显示出来,且结果集中该类记录的右表字段为空值。
RIGHT JOIN / RIGHT OUTER JOIN:外部联接两个表中的记录,并包含右表中的全部记录。简单说就是和LEFT JOIN反过来。
FULL JOIN / FULL OUTER JOIN:完整外部联接返回左表和右表中的所有行。就是LEFT JOIN和RIGHT JOIN和合并,左右两表的数据都全部显示。

JOIN的基本语法:
Select table1.* FROM table1 JOIN table2 ON table1.id=table2.id

sql写法

内连接inner join:

复制代码 代码如下:

SELECT msp.name, party.name
FROM msp JOIN party ON party=code

复制代码 代码如下:

SELECT msp.name, party.name
FROM msp inner JOIN party ON party=code

左连接left join :

复制代码 代码如下:

SELECT msp.name, party.name
FROM msp LEFT JOIN party ON party=code

右连接right join :

复制代码 代码如下:

SELECT msp.name, party.name
FROM msp RIGHT JOIN party ON msp.party=party.code

全连接(full join):

复制代码 代码如下:

SELECT msp.name, party.name
FROM msp FULL JOIN party ON msp.party=party.code

UNION运算符

将两个或更多查询的结果集组合为单个结果集,该结果集包含联合查询中的所有查询的全部行。UNION的结果集列名与UNION运算符中第一个Select语句的结果集的列名相同。另一个Select语句的结果集列名将被忽略。
其中两种不同的用法是UNION和UNION ALL,区别在于UNION从结果集中删除重复的行。如果使用UNION ALL 将包含所有行并且将不删除重复的行。

UNION和UNION ALL的区别:

union 检查重复
union all 不做检查
比如 select 'a' union select 'a' 输出就是一行 a
比如 select 'a' union all select 'a' 输出就是两行 a

2. 通过下面的例子,可以清晰的看出和理解2者的区别
实例1 典型的二表连接演示

假定有两个表Table1和Table2,其包含的列和数据分别如表1.1和表1.2所示。

表1.1 Table1数据库表


ColumnA


ColumnB


ColumnC


X1


Y1


Z1


X2


Y2


Z2


X3


Y3


Z3

 

表1.2 Table2数据库表

 


ColumnA


ColumnD


ColumnE


X1


D1


E1


X2


D2


E2


X3


D3


E3

 

Table1和Table2表共有的列为ColumnA,如果通过ColumnA列的值连接Table1和Table2两个表,即连接条件为Table1.ColumnA=Table2.ColumnA,此时得到的连接结果如表1.3所示。

表1.3 连接Table1和Table2表


ColumnA


ColumnB


ColumnC


ColumnD


ColumnE


X1


Y1


Z1


D1


E1


X2


Y2


Z2


D2


E2


X3


Y3


Z3


D3


E3

上述连接过程的实现代码可表示如下:SELECT * FROM Table1 JOIN Table2 ON Table1.ColumnA=Table2.columnA

实例2 典型的二表记录的UNION运算

假定有两个表Table3和Table4,其包含的列和数据分别如表2.1和表2.2所示。

表2.1 Table3数据库表

 


ColumnA


ColumnB


ColumnC


X1


Y1


Z1


X2


Y2


Z2


X3


Y3


Z3

 

表2.2 Table4数据库表、

 


ColumnA


ColumnD


ColumnE


X4


Y4


Z4


X5


Y5


Z5


X6


Y6


Z6

 

Table3表和Table4表具有相同的列结构,列数也要相同,列名可以不同,以第一个表的列名为新表的列名,因此可以使用UNION运算符连接两个表的记录集,得到的连接结果如表2.3所示。

表2.3 使用UNION连接Table3表和Table4表的记录

 


ColumnA


ColumnB


ColumnC


X1


Y1


Z1


X2


Y2


Z2


X3


Y3


Z3


X4


Y4


Z4


X5


Y5


Z5


X6


Y6


Z6

上述连接过程的实现代码可表示如下:SELECT * FROM Table3 UNION SELECT *FROM Table4

对比实例1和实例2,不难发现二者的区别。

时间: 2024-10-03 10:40:44

SQL中JOIN和UNION区别、用法及示例介绍_MsSql的相关文章

SQL中JOIN和UNION区别、用法及示例介绍

1.JOIN和UNION区别 join 是两张表做交连后里面条件相同的部分记录产生一个记录集, union是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集 . JOIN用于按照ON条件联接两个表,主要有四种: INNER JOIN:内部联接两个表中的记录,仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行.我理解的是只要记录不符合ON条件,就不会显示在结果集内. LEFT JOIN / LEFT OUTER JOIN:外部联接两个表中的记录,并包含左表中的全部记录.如果左表

sql 查询结果合并union all用法_数据库技巧_MsSql

复制代码 代码如下: --合并重复行 select * from A union select * from B --不合并重复行 select * from A union all select * from B 按某个字段排序 --合并重复行 select * from ( select * from A union select * from B) AS T order by 字段名 --不合并重复行 select * from ( select * from A union all se

SQL下JOIN和UNION用法示例

1.JOIN和UNION区别 join 是两张表做交连后里面条件相同的部分记录产生一个记录集, union是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集 . 左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行.如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值. RIGHT JOIN 或 RIGHT OUTER JOIN. 右向外联接是左向外联接的反向联接.将返回右表的所有行.如果右表的某行在左表中

数据库SQL中having和where的用法区别_MsSql

"Where" 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数. "Having"是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数.  聚合函数,SQL基本函数,聚合函数对一组值执行计算,并返回单个值.除了 COUNT 以外,聚合函数都会忽略空值. 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用. Transact-SQL编

数据库SQL中having和where的用法区别

"Where" 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数. "Having"是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数. 聚合函数,SQL基本函数,聚合函数对一组值执行计算,并返回单个值.除了 COUNT 以外,聚合函数都会忽略空值. 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用. Transact-SQL编程

时间类型的转换,SQL中CONVERT转化函数的用法

函数|转换 SQL中CONVERT转化函数的用法 格式:CONVERT(data_type,expression[,style]) 说明:此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)相互转换的时候才用到. 例子:SELECT CONVERT(varchar(30),getdate(),101) now结果为:now---------------------------------------|09/15

SQL语句的并集UNION 交集JOIN(内连接,外连接)等介绍_MsSql

1. a. 并集UNION SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2 b. 交集JOIN SELECT * FROM table1 AS a JOIN table2 b ON a.name=b.name c. 差集NOT IN SELECT * FROM table1 WHERE name NOT IN(SELECT name FROM table2) d. 笛卡尔积 SELECT

SQL中JOIN用法概述

本文概要介绍JOIN的用法,全面讲解它的使用规则方法,并举例解释 外联接 外联接可以是左向外联接.右向外联接或完整外部联接.在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:LEFT JOIN 或 LEFT OUTER JOIN. 左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行.如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值. RIGHT JOIN 或 RIGHT OUTER JOIN.

SQL中DATEADD和DATEDIFF的用法示例介绍_MsSql

通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天.你们大部分人大概都知道怎样把日期进行分割(年.月.日等),然后仅仅用分割出来的年.月.日等放在几个函数中计算出自己所需要的日期! 在这篇文章里,我将告诉你如何使用DATEADD和DATEDIFF函数来计算出在你的程序中可能你要用到的一些不同日期. 在使用本文中的例子之前,你必须注意以下的问题.大部分可能不是所有例子在不同的机器上执行的结果可能不一样,这完全由哪一天是一个星期的第一天这个设置决定.第