一.行转列
1.多行转一行多列
原始数据是这样的
但是想要的数据是这样的
2.实现方式
SELECT NAME
,
max( CASE course WHEN 'java' THEN score END ) java,
max( CASE course WHEN 'mysql' THEN score END ) mysql
FROM
student
GROUP BY
NAME
3.多行转一行一列
要实现以下效果
相关函数
concat(值,’拼接符’,值 ) : 拼接,多行数据只会拼接一行
group_concat(值,’拼接符’,值 ) : 拼接,多行压扁到一行
4.实现方式
SELECT NAME
,
group_concat( course, '=', score SEPARATOR ' | ' ) AS '各科成绩'
FROM
student
GROUP BY
NAME
二.连接查询
表结构:
stu表:
teacher表:
1.笛卡尔积
select * from stu,teacher
结果:
解释:
笛卡尔积就是将两个表的每一项都相互拼接,最后会生成的数据条数是两个表的乘积之和
2.inner join
select * from stu inner join teacher on stu.teacher_id = teacher.id
结果:
解释:
内连接就是通过on的条件将两个表同时符合条件的查询出来
3.left join
为了测试左连接和有链接的区别,我们在表中加入了一些空数据
select * from stu left join teacher on stu.teacher_id = teacher.id
结果:
解释:左连接是以左表为主表,左表会全出来,右表没有的用null表示
4.right join
和左表的相反