Union、Join语句
Union
定义
1、Union 语句用于将
多个
select语句的结果集合并为一个
结果集
2、连接的第一个
select语句第一个字段集作为最终结果的字段集
3、连接的字段个数
和数据类型
都必须保持一致
语法
--union[all|distinct] all:全选 distinct:去重
select 语句1 union[all|distinct] select 语句2 union[all|distinct]
Join
示例表
表A:
i d | name |
---|---|
1 | 张三 |
2 | 李四 |
2 | 王五 |
表B:
i d | age |
---|---|
1 | 20 |
2 | 29 |
3 | 30 |
定义
Join语句主要是 基于两个或
多个表
,列之间
的关系,并进行连接
语法
select 多个表显示的字段 from 表n1 连接属性 表n2 on 条件[如果没有on 就会进行笛卡尔积操作(两表行数乘积)]
连接属性
[outer]join(内连接)
定义
内连接
,只返回表相匹配
的数据
例子
select a.id, a.name, b.age from a join b on a.id = b.id
结果:
Left[outer]join (左[外]连接)
定义
左外连接
,关键字outer可以省略
意义一样,关键字左边的表称为主表
,返回的记录数
是主表的记录数
,关联不上的字段设为null
例子
select a.id, a.name, b.age from a left join b on a.id = b.id
结果:
Right [outer]join(右[外]连接)
定义
右外连接,outer关键字可以省略。
以关键字右边
的表为主表
,记录数和主表相同,关联不上的字段设为null
例子
select a.id, a.name, b.age from a right join b on a.id = b.id
结果:
Full [outer]join(全[外]连接)
定义
全外关联,关键字outer可以省略
以两个表的记录为基准,返回两个表的记录去重记录之和,其中匹配不上的数据设为null
例子
select a.id, a.name, b.age from a full join b on a.id = b.id
结果:
left semi join(左半连接)
定义
left semi join左半连接,以关键字左边的表为主表,只返回
key也在副表
(关键字右边)中的记录
例子
select a.name, b.name from a left semi join b on a.id = b.id
结果:
cross join (笛卡尔关联)
定义
返回两张表的笛卡尔积结果,也就是返回
两个表的记录行数乘积
(表A的行数 * 表B的行数)
例子
select a.id, a.name, b.age from a cross join b
结果: