Data Query Language,数据查询语言,常用于 select
7.连接查询
含义:多表连接查询
语法:select 查询列表 from tableName1,tableName2;
特点:
- 会产生笛卡尔积 m*n
- t1的每条记录和t2的每一条记录连接
Sql92:等值连接、非等值连接、自连接
等值连接
语法:select 查询列表 from tableName1 t1,tableName2 t2 where t1.key=t2.key [and 筛选条件][group by 分组字段][having 分组后的筛选][order by 排序字段]
特点:
- 一般为表起别名
- 多表的顺序可以替换
- n表至少需要n-1个连接条件
- 等值连接的结果是多表的交集部分
非等值连接
语法:select 查询列表 from tableName1 t1,tableName2 t2 where 非等值的连接条件 [and 筛选条件][group by 分组字段][having 分组后的筛选][order by 排序字段]
自连接
语法:select 查询列表 from tableName t1,tableName t2 where 等值的连接条件 [and 筛选条件][group by 分组字段][having 分组后的筛选][order by 排序字段]
特点:
多表是同一个表,起不同的别名
Sql99:内连接(等值连接、非等值连接、自连接)、外连接(左外、右外、全外)、交叉连接
语法:select 查询列表 from tableName1 t1 连接类型 join tableName2 t2 on 连接条件
[where 筛选条件][group by 分组字段][having 分组后的筛选][order by 排序字段]
连接类型:
内连接:inner
外连接:outer
- 左外:left [outer]
- 右外:right [outer]
- 全外:full [outer]
交叉连接:cross
内连接
特点:
inner 可以省略
外连接
应用场景:用于查询一个表中有,另一个表中没有的记录
特点:
- 外连接查询的结果为主表中的所有记录
- 如果从表有匹配的记录,则显示匹配的值
- 如果没有,则显示null
- 外连接查询的结果=内连接结果+主表中有而从表中没有的记录
- 左外连接:left join左边的是主表;右外连接:right join右边的是主表
- 左外和右外交换两表的顺序,可以实现同样的效果
交叉连接
笛卡尔乘积