MySQL 连接查询
1-分类
sql语句可以被分类成为,92标准与99标准,异同在于连接查询的关键字
出现问题的地方在于:多表连接查询时出现的笛卡尔乘积,将所以满足的信息进行排列组合;
解决方法:添加有效的连接条件(等值、非等值)…
2-sql92
-- 等值连接 语法格式如下
SELECT
关键字
FROM
表名1, 表名2
WHERE
表1.key AND 表2.key
GROUP BY
分组字段
HAVING
二次分类条件
ORDER BY
排序字段;
需要注意的是:WHERE 与GROUP BY二者,对应着排序前查询于排序后查询,HAVING后是指原表中不存在的字段进行筛选,WHERE后的条件是指已经存在表中的字段
特点:
- 表的顺序可以调换
- 一般为表起别名
- 等值连接的结果为两个表的交集
同样的,非等值连接与等值连接差别只在于WHERE后的判断方式采用非等值进行判断,例如区间判断。
对于自连接,意为将一张表中的字段当作条件进行判断,语法与等值连接差别不大,异同在于FROM关键字后,是可以添加两张相同的表(可以为两张相同表起不同的名字)。
3-sql99
sql92中出现的连接只有1种:
- 内连接(内连接等值连接、非等值连接、自连接)
sql99中出现的连接有3种:
- 内连接(内连接等值连接、非等值连接、自连接)
- 外连接(左外,右外、全外不支持)
- 交叉连接
-- 连接语法
SELECT
查询字段
FROM
表1
LEFT|RIGHT|INNER|CROSS JOIN
表2
ON
连接条件
WHERE
筛选条件
GROUP BY
分组字段
ORDER BY
排序关键字
LIMIT
子句;
外连接中,又分为主表与从表,
- 左外连接返回结果为主表所有记录+右表符合条件的连接字段+左表无法与右表匹配时的NULL;
- 右外连接与左外连接类似
- 内连接使用关键字INNER进行连接,可以求出表的交集
- 交叉连接得到的结果为笛卡尔乘积,用的较少。