交叉连接
特点:
又称“笛卡尔乘积”
将多张表中的数据行一 一对应连接在一起,结果集的数据行数相当于多张表数据行数“相乘”后的结果
语法格式:
select 字段列表 from 表1,表2,表3...... [where 连接条件1 and 连接条件2 ...]
注释:
-
示例中不使用“表名.列名”来标识字段来自于哪张表,可以使用为表起别名来简化书写
-
表的别名是在from关键字后面定义的,在select语句中任何子句中都可以使用别名
select可以实现两张表以上表的连接查询,其创建规则与两个表连接相同,只是在where条件中增加一个and复合条件
内连接(常用之一)
特点:
使用比较运算符对表间公共字段的数据进行比较操作,并得出表中与连接条件相匹配的数据行,组合成新的结果集(只有满足条件的记录才能出现在结果集中)
语法格式:
SELECT …. FROM 表1 [INNER] JOIN 表2 on <表达式>
内连接分为三种:等值连接,自然连接,不等连接
等值连接:
特点:
- 至少一个同属于两表的行符合连接条件时,内连接才会返回行
- 返回的结果集是两个表中所有相匹配的数据,舍弃不匹配的数
自连接
在一些特殊环境下,对同一张表进行连接查询
语法格式:
select ...... from 表1 别名1
inner join 表1 别名2 on 别名1.字段1=别名2.字段2
外连接(常用之一)
特点:
对多张表进行外连接查询时,结果集将返回from子句中提到的至少一个表的所有的行
外连接和内连接的异同点:
内连接只返回匹配的数据行,而外连接则会至少保留一张表中全部数据;至于保留哪张表数据,取决于左外连接还是右外连接
左外连接
特点:
- 左外连接的结果集包括left join子句中指定的左表的所有行,而不仅仅是联接列所匹配的行
- 如果右表没有匹配行,则在相关联的结果集行中右表的所有选择列均为空值
语法格式:
SELECT .... FROM table_1 Left [OUTER] JOIN table_2 ON <表达式>
右外连接
语法格式:
SELECT .... FROM table_1 RIGHT [OUTER] JOIN table_2 ON <表达式>
全外连接
语法格式:
SELECT ... FROM table_1 Full JOIN table_2 ON <表达式>
注释:
全外连接又被称为完整外连接,它除了包括匹配行之外,还包括join关键字左右表中不匹配的数据行,其中,左表或右表中缺少的属性值用NULL表示
MySQL不支持全外连接,适用于Oracle和SQLServer
UNION
特点:
- UNION 操作符:UNION 操作符返回两个查询的结果集的并集,去除重复记录
- UNION ALL操作符:返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重
语法格式:
SELECT column , . . . FROM table_1
UNION [ALL]
SELECT column , . . . FROM table_2
注释:
- 合并查询结果
- 可以给出多条SELECT语句,并将它们的结果组合成单个结果集
- 合并时,两个表对应的列数和数据类型必须相同,并且相互对应
- 各个SELECT语句之间使用UNION或UNION ALL关键字分隔
注意:
执行UNION ALL语句时所需要的资源比UNION语句少。
如果明确知道合并数据后的结果数据 不存在重复数据,或者不需要去除重复的数据,则尽量使用UNION ALL语句,以提高数据查询的效率。