SQL 提供了JOIN
关键字来链接多张表的查询(即链接的是SELECT
结果集)基本分为如下几种:code
内链接:JOIN / INNER JOIN,是最为经常使用的一种链接,其效果是只返回条件匹配的那条数据table
等值链接:ON 子句中使用了运算符“=”,且链接的两个字段最好是主键 例如select student.name, avg(sc.score) as avg_score from student join score on student.id = sc.id group by name;
select
name | avg_score |
---|---|
赵雷 | 89.66667 |
钱电 | 70.00000 |
孙风 | 80.00000 |
李云 | 33.33333 |
不等链接:ON 子句中使用了不等于运算符,例如"<>" "<=>"等(能够搜下 SQL 比较运算符)数据
自链接:一张表链接自身。例如select * from student a, student b where a.sex = b.sex and a.sex = '男';
至关于作了次笛卡尔积运算,就不所有展现了查询
id | name | sex | id | name | sex |
---|---|---|---|---|---|
1 | 赵雷 | 男 | 1 | 赵雷 | 男 |
2 | 钱电 | 男 | 1 | 赵雷 | 男 |
3 | 孙风 | 男 | 1 | 赵雷 | 男 |
4 | 李云 | 男 | 1 | 赵雷 | 男 |
外链接:除了返回条件匹配的数据,那些不知足的数据也会返回。根据链接表的顺序可分为:tab
select stu.name, avg(sc.score) as avg_score from student stu left join sc on sc.id = stu.id group by stu.name;
name | avg_score |
---|---|
赵雷 | 89.66667 |
钱电 | 70.00000 |
孙风 | 80.00000 |
李云 | 33.33333 |
张三 | null |
李四 | null |
全(外)链接:FULL JOIN / FULL OUTER JOINco
交叉链接:CROSS JOIN (可用","代替)join
select * from table1 CROSS JOIN table2;
<=> select * from table1, table2;