SQL Server进阶(四):联接-cross join、inner join、left join、right jion、union、union all
测试数据脚本
CREATE TABLE Atable
(
S# INT,
Sname nvarchar(32),
Sage INT,
Sfrom nvarchar(8)
) insert into Atable
select 1,N'李四',18,N'A' union all
select 2,N'tom',19, N'A' union all
select 3,N'刘一',17,N'A' union all
select 4,N'jack',18,N'A' CREATE TABLE Btable
(
S# INT,
Sname nvarchar(32),
Sage INT,
Sfrom nvarchar(8)
) insert into Btable
select 1,N'刘一',18,N'B' union all
select 2,N'钱二',19,N'B' union all
select 3,N'张三',17,N'B' union all
select 4,N'李四',18,N'B'
数据表

1.cross join
交叉连接不需要任何连接条件。两个表的的数据直接进行笛卡尔积运算。如果一个表有m行,而另一个表有n行,将得到m*n的结果集。
SELECT * FROM Atable as A cross join Btable as B order by A.S#

2.inner join == join
内连接的功能是,把两个表相关联的记录列出来,必须是相关联的记录。
对两个输入表进行笛卡尔积,然后根据指定的谓词对结果行进行过滤。
怎么理解内联接:
理解内联接最容易的方法是认为A表中每一行同C表中的所有行进行比较,如果A表中的id和C表中的id相等,则匹配成功。
另外一种更正式的方法是在关系代数的基础上来考虑内联接,联接运算首先对两个表求笛卡尔积(4行A记录*5行C记录=20行记录),然后根据条件C.id=A.id对行进行过滤,最终返回16行。
SELECT * FROM Atable as A INNER JOIN Btable as B ON A.Sname = B.Sname

3.left outer join == left join
产生表B的完全集,而A表中匹配的则有值,没有匹配的则以null值取代。
SELECT * FROM Atable as A left outer join Btable as B ON A.Sname = B.Sname

4.right outer join == right jion
产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。
SELECT * FROM Atable as A right outer join Btable as B ON A.Sname = B.Sname

5.full outer join == full join
产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。
SELECT * FROM Atable as A full join Btable as B ON A.Sname = B.Sname

6.union与union all
区别就是联合查询的时候union会去重,union all不会去重
通过UNION运算符来将两张表纵向联接,基本方式为:
SELECT 列1 , 列2 FROM 表1
UNION
SELECT 列3 , 列4 FROM 表2;
UNION ALL为保留重复行:
SELECT 列1 , 列2 FROM 表1
UNION ALL
SELECT 列3 , 列4 FROM 表2;
SELECT Sname FROM Atable UNION SELECT Sname FROM Btable
SELECT Sname FROM Atable UNION ALL SELECT Sname FROM Btable

CROSS JOIN--自交叉联接
对同一个表进行联接,就是自联接。交叉联接、内联接、外联接都支持自联接。
SELECT A1.a,A2.a FROM A AS A1 CROSS JOIN A AS A2
A表有4行,查询会生成一个包含4*4=16行的数据的结果集。
在自联接中,必须为表起别名。如果不为表指定别名,联接结果中的列名就会有歧义。
比如在本例中,别名为A1,A2。
小结

SQL Server进阶(四):联接-cross join、inner join、left join、right jion、union、union all的更多相关文章
- SQL Server进阶(六)表表达式--派生表、公用表表达式(CTE)、视图和内联表值函数
概述 表表达式是一种命名的查询表达式,代表一个有效地关系表.可以像其他表一样,在数据处理中使用表表达式. SQL Server支持四种类型的表表达式:派生表,公用表表达式,视图和内联表值函数. 为什么 ...
- 【目录】sql server 进阶篇系列
随笔分类 - sql server 进阶篇系列 sql server 下载安装标记 摘要: SQL Server 2017 的各版本和支持的功能 https://docs.microsoft.com/ ...
- SQL Server 进阶 01 数据库的设计
SQL Server 进阶 01 数据库的设计 本篇目录 课程内容回顾及介绍 为什么需要规范的数据库设计 设计数据库的步骤 绘制E-R(实体-关系)图 实体-关系模型 如何将E-R图转换为表 数据规范 ...
- SQL Server连接查询之Cross Apply和Outer Apply的区别及用法(转载)
先简单了解下cross apply的语法以及会产生什么样的结果集吧!示例表: SELECT * FROM tableA CROSS APPLY tableB 两张表直接连接,不需要任何的关联条件,产生 ...
- SQL Server进阶 窗口函数
概述 设计窗口函数目的? 在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题,很多都要通过复杂的相关子查询或者存储过程来完成. 为了解决这些问题,在 2003 年 ISO SQL 标准加入了 ...
- SQL Server进阶(十二)函数
概述 函数有且只有一个输入参数和一个返回值,而存储过程没有这个限制: 返回表变量的函数可以当做VIEW或者临时表用在WHERE/HAVING/SELECT/JOIN语句中而存储过程不可以: 存储过程中 ...
- SQL Server进阶(十一)临时表、表变量
临时表 本地临时表 适合开销昂贵 结果集是个非常小的集合 -- Local Temporary Tables IF OBJECT_ID('tempdb.dbo.#MyOrderTotalsByYe ...
- SQL Server进阶(五)子查询
概述 子查询的概念: 当一个查询是另一个查询的条件时,称之为子查询.子查询可以嵌套在主查询中所有位置,包括SELECT.FROM.WHERE.GROUP BY.HAVING.ORDER BY. 外面的 ...
- SQL Server进阶(七)集合运算
概述 为什么使用集合运算: 在集合运算中比联接查询和EXISTS/NOT EXISTS更方便. 并集运算(UNION) 并集:两个集合的并集是一个包含集合A和B中所有元素的集合. 在T-SQL中.UN ...
- SQL Server进阶(二)字段类型
概述 系统数据类型详情 SqlDbType namespace System.Data { // // 摘要: // 指定要用于 System.Data.SqlClient.SqlParameter ...
随机推荐
- python3 文件和流
流: 打开文件: open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, ...
- android sqlite boolean 类型
sql语句中 boolean (bit)类型的字段 ,insert 数据的时候 , 有null ,0 (false),1(true) 三个数可以选择. 例如: insert into pos valu ...
- WCF 改成 restful api
1. 右健 svc , view markup, 添加 Factory="System.ServiceModel.Activation.WebServiceHostFactory" ...
- 739. Daily Temperatures && 单调栈 && Python collections deque
题目大意 给你接下来每一天的气温,求出对于每一天的气温,下一次出现比它高气温的日期距现在要等多少天 解题思路 利用单调栈,维护一个单调递减的栈 将每一天的下标i入栈,维护一个温度递减的下标 若下一个温 ...
- hasattr
语法: hasattr(object,name) 检测类对象是否具有该name属性或方法
- 整车CAN网络介绍
CAN(Controller Area Network)控制器局域网络,CAN网络在早期的整车应用中以BCM(车身控制器)为控制中心,主要是车身零部件(雨刮/大灯/车窗…),智能硬件较少,所以早期的正 ...
- 使用zabbix监控mariadb性能状态
0x01 前言 zabbix内置Mysql的监控模版,因为mariadb和Mysql两者的相关性,所以这个模版也能用在mariadb services上. 0x02 Mysql 首先要在mariadb ...
- HDU5985 Lucky Coins 概率dp
题意:给你N种硬币,每种硬币有Si个,有Pi 概率朝上,每次抛所有硬币抛起,所有反面的拿掉,问每种硬币成为最后的lucky硬币的概率. 题解:都知道是概率dp,但是模拟赛时思路非常模糊,很纠结,dp[ ...
- (一)flask-sqlalchemy的安装和配置
在使用flask-sqlalchemy之前要先了解ORM模型,什么叫做ORM模型 一.什么是ORM ORM 全拼Object-Relation Mapping. 称为对象-关系映射 主要实现模型对象到 ...
- Spring 声明式事务
事务的特性/概念 事务:一组操作要么都成功要么失败: 事务的四个关键属性(ACID): 原子性(atomicity):“原子”的本意是“不可再分”,事务的原子性表现为一个事务中涉及到的多个操作在逻辑上 ...