多表处理
一、表格的合并与联结
1、合并
对于存储在两个不同表格中的数据,想要查询后聚合统计很不方便,我们可以用 UNION语句 将两次查询的结果合并在一起。代码示例如下:
SELECT id,name //第一次查询
FROM table1
UNION //将两次查询的结果合并在一起
SELECT gender,age //第二次查询
FROM table2
对于含有相同数据的列,UNION语句会自动去重。如果想要保留重复的值,可以使用UNION ALL语句。
2、联结
将一个或多个表格通过某种关系横向合并为一个表格的过程,称为联结。当没有设定表的联结条件时,联结的结果就是两个表格相乘的笛卡尔积。(我的理解是相当于排列组合)在联结过程中,可以为不同的表格设置别名(自联结也要起别名,区分查询的表和联结的表),用来区分不用表格中相同名称的列。查询时使用 {别名.列名} 的格式进行访问。代码示例如下:(以自联结为例)
SELECT t1.name,t1.age //别名.列名
FROM table1 as t1 //为table1起别名t1
JOIN table2 as t2 //为table2起别名t2
WHERE t1.age>t2.age
内联结的语句为INNER JOIN,在实际应用中INNER语句可以省略,利用外键,ON关键字用来限制联结键的条件,与WHERE语句不同,WHERE用于设定约束本次查询的所有条件。代码示例如下:获取表1和表2数据匹配的交集
SELECT t1.name,t2.age
FROM table1 as t1
INNER JOIN table2 as t2
ON t1.id = t2.id //两个表格中id相同的数据信息
二 、外联结
内联结能帮助我们获取到数据的交集,当我们需要数据的补集时,可以利用外联结语句。外联结语句包括左联结LEFT JOIN,右联结RIGHT JOIN,返回左表(右表)的所有内容以及与另一个表的匹配内容。代码示例如下:获取表1的所有数据和表2与表1匹配的数据
SELECT t1.id,sku_name,t2.text
FROM table1 as t1
LEFT JOIN table2 as t2
ON t1.id = t2.id