MySQL 多表连接查询
在实际项目开发过程中,查询的数据可能涉及多个实体,查询的数据可能分布在多个表,经常使用多表查询,这样的查询数据的数据源可能由多个表中的数据构成。
MySQL中表连接包括交链接(Cross Join) 内连接(Lnner Join),自连接(Self Join),外连接(Outer Join),其中外链接还分为外连接(Left Join) 右外连接(Right Join),和全外连接(Full Join)
交叉连接(CROSSJOIN)
交叉连接(CROSSJOIN) 返回连接表示的笛卡尔积,第一个表的每一个表的每行依次与第二表的每一行进行连接
交叉连接(CROSSJOIN)语法格式:
SELECT <字段名> FROM <表 1> CROSS JOIN <表 2> [WHERE 之句]
案例:stu_xji
stu_cji
stu_xqu
利用stu_xji,stu_cji,stu_xqu表做一下查询
(1)查询学号、姓名、班级、专业、总分,按照班级排序
SELECT stu_xji.学号, stu_xji.姓名, stu_xji.班级, stu_xji.专业, stu_cji.总分
FROM stu_xji
JOIN stu_cji ON stu_xji.学号 = stu_cji.学号
ORDER BY stu_xji.班级;
(2)查询学号、姓名、班级、专业、爱好,把爱好喝酒的挑选出来
SELECT stu_xji.学号, stu_xji.姓名, stu_xji.班级, stu_xji.专业, stu_xqu.爱好
FROM stu_xji
JOIN stu_xqu ON stu_xji.学号 = stu_xqu.学号
WHERE stu_xqu.爱好 = '喝酒';
(3)查询学号、姓名、班级、专业、成绩、爱好,生成一个新的结果(无成绩的不查)
SELECT stu_xji.学号, stu_xji.姓名, stu_xji.班级, stu_xji.专业, stu_cji.总分, stu_xqu.爱好
FROM stu_xji
JOIN stu_cji ON stu_xji.学号 = stu_cji.学号
JOIN stu_xqu ON stu_xji.学号 = stu_xqu.学号
WHERE stu_cji.总分 IS NOT NULL;
(4)按照班级计算平均分,并分组显示,显示字段:平均分,班级。
SELECT AVG(stu_cji.总分) AS 平均分, stu_xji.班级
FROM stu_xji
JOIN stu_cji ON stu_xji.学号 = stu_cji.学号
GROUP BY stu_xji.班级;