SQL 联合查询
2014-12-25 20:56
323 查看
a表
aaa bbb ccc
1a 1b 1c
2a 2b 2c
3a 3b 3c
b表
aaa bbb ddd
1a 1b 1d
4a 4b 4d
1、union
union [all]
all:表示将查询的所有结果都合并到结果集中,若不加all会将重复的行只保留一行
[sql] view
plaincopyprint?
select * from a union select * from b
结果:(查询的字段数相同)
[sql] view
plaincopyprint?
select aaa,bbb from a union select aaa,bbb from b
结果:(重复的记录被覆盖)
[sql] view
plaincopyprint?
select aaa,bbb from a union all select aaa,bbb from b
结果:(加上all,允许重复的行)
2、join
连接分为内连接、外连接、交叉连接
2.1、内连接 inner join (默认的连接方式)
只有至少有(指定的字段)一行的记录在两个查询表中都有记录,此时才有结果集。即返回两个表之间的交集(相同字段的记录)
[sql] view
plaincopyprint?
SELECT * FROM `a` INNER JOIN b ON a.aaa = b.aaa
结果:(两表有相同的字段的值的记录,会将字段连接起来,而不是union,将结果追加到记录的结果集后)
2.2、外连接
a、left join 左连接
返回查询表的记录,包含左边表的所有记录,如果左边表中的记录在右边表中没有对应的记录,则所返回右边表的字段结果为空(差集)
[sql] view
plaincopyprint?
SELECT * FROM `a` LEFT JOIN `b` ON a.aaa = b.aaa
结果:(b表没有的字段的值为空NULL)
b、right join 右连接
与left join相反,查询的记录包含右边表的所有记录,如果右边表中的记录在左边表中没有对应的记录,则返回左边表的字段值为空(差集)
[sql] view
plaincopyprint?
SELECT * FROM `b` LEFT JOIN `a` ON a.aaa = b.aaa
结果:(a表没有的字段值为空NULL)
c、full join 全连接
返回左表和右表中的所有记录,即两表的数据全部显示
[sql] view
plaincopyprint?
select * from a full join b
结果:(返回所有的记录)
3、cross in 交叉连接
不带where子句,返回两个表中所有笛卡尔积,记录数为a表和b表记录数的积
[sql] view
plaincopyprint?
SELECT * FROM `b` CROSS JOIN `a`
结果:
[sql] view
plaincopyprint?
SELECT * FROM `a` CROSS JOIN `b`
结果:
aaa bbb ccc
1a 1b 1c
2a 2b 2c
3a 3b 3c
b表
aaa bbb ddd
1a 1b 1d
4a 4b 4d
1、union
union [all]
all:表示将查询的所有结果都合并到结果集中,若不加all会将重复的行只保留一行
[sql] view
plaincopyprint?
select * from a union select * from b
结果:(查询的字段数相同)
[sql] view
plaincopyprint?
select aaa,bbb from a union select aaa,bbb from b
结果:(重复的记录被覆盖)
[sql] view
plaincopyprint?
select aaa,bbb from a union all select aaa,bbb from b
结果:(加上all,允许重复的行)
2、join
连接分为内连接、外连接、交叉连接
2.1、内连接 inner join (默认的连接方式)
只有至少有(指定的字段)一行的记录在两个查询表中都有记录,此时才有结果集。即返回两个表之间的交集(相同字段的记录)
[sql] view
plaincopyprint?
SELECT * FROM `a` INNER JOIN b ON a.aaa = b.aaa
结果:(两表有相同的字段的值的记录,会将字段连接起来,而不是union,将结果追加到记录的结果集后)
2.2、外连接
a、left join 左连接
返回查询表的记录,包含左边表的所有记录,如果左边表中的记录在右边表中没有对应的记录,则所返回右边表的字段结果为空(差集)
[sql] view
plaincopyprint?
SELECT * FROM `a` LEFT JOIN `b` ON a.aaa = b.aaa
结果:(b表没有的字段的值为空NULL)
b、right join 右连接
与left join相反,查询的记录包含右边表的所有记录,如果右边表中的记录在左边表中没有对应的记录,则返回左边表的字段值为空(差集)
[sql] view
plaincopyprint?
SELECT * FROM `b` LEFT JOIN `a` ON a.aaa = b.aaa
结果:(a表没有的字段值为空NULL)
c、full join 全连接
返回左表和右表中的所有记录,即两表的数据全部显示
[sql] view
plaincopyprint?
select * from a full join b
结果:(返回所有的记录)
3、cross in 交叉连接
不带where子句,返回两个表中所有笛卡尔积,记录数为a表和b表记录数的积
[sql] view
plaincopyprint?
SELECT * FROM `b` CROSS JOIN `a`
结果:
[sql] view
plaincopyprint?
SELECT * FROM `a` CROSS JOIN `b`
结果:
相关文章推荐
- SQL Sql连接查询和联合查询
- 简单查询和联合查询两方面介绍SQL查询语句
- SQL联合查询
- sql联合查询Join的用法.
- sql联合查询
- sql语句的联合查询(join 用法)
- sql联合查询|sql交叉查询|除非同时指定了 TOP否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。
- SQL联合查询详细介绍
- linq To SQl之多表联合查询
- Sql连接查询和联合查询
- sql语句一例:多表联合查询
- 对多表联合查询的SQl语句的改进,大幅提高查询性能 (转)
- 对多表联合查询的SQl语句的改进,大幅提高查询性能
- 又一个通用分页存储过程,支持表别名,多表联合查询SQL语句
- SQL联合查询中的关键语法
- 又一个通用分页存储过程,支持表别名,多表联合查询SQL语句--转载
- sql语句的联合查询(join 用法)
- Sql : 多表联合查询分页
- sql语句的联合查询(join 用法)
- 对多表联合查询的SQl语句的改进,大幅提高查询性能