美文网首页
MySQL语法

MySQL语法

作者: 掩流年 | 来源:发表于2020-03-18 22:50 被阅读0次

GROUP BY

  • 列函数对于group by字句定义的每个组各返回一个结果
  • 如果用group by ,那么你的select语句中选出的列要么是你groupby里用到的列,要么就是带有count,sum,min等列函数的列。

查询所有同学的学号,选课数,总成绩

select student_id, count(course_id),sum(score) 
from  score 
group by student_id
  • group by语句后出现某个表的字段,select语句后要么是该字段,要么是别的表里的列或者带有函数的列。
    查询所有同学的学号,姓名,选课数,总成绩
select s.student_id, stu.name, count(s.course_id),sum(s.score) 
from score s, student stu
where s.student_id = stu.student_id
group by s.student_id 

HAVING

  • 通常和group by语句一起使用。
  • where语句过滤行,having语句过滤组
  • 出现的顺序,where>group by>having
    查询平均成绩大于60分的同学的学号和平均成绩
select student_id ,avg(score)
from score
group by student_id
having avg(score) > 60

ORDER BY

ORDER BY子句中指定的列对上一步输出的虚拟表进行排列,返回新的虚拟表。还可以在ORDER BY子句中指定SELECT列表中列的序列号,如

select student_id , score 
from score
order by 2,1;

等同于

select student_id , score 
from score
order by score ,student_id ;

当然通常我们的用法是

ORDER BY create_time DESC;

LIMIT

应用LIMIT子句,表中选出从指定位置开始的指定行数据。对于没有应用ORDER BY的LIMIT子句,结果同样可能是无序的,因此LIMIT子句通常和ORDER BY子句一起使用。

LIMIT n, m

例如有表数据

//student1
student_id score
1     88
2     61
3     93
4     79
5     99
//student2
student_id score
1     43
2     68
3     91
4     71
6     65

left join

返回包括左表中的所有记录和右表中联结字段相等的记录

select * from student1
left join student2
on student1.student_id = student2.student_id
student_id score student_id(student2) score(student2)
1 88 1 43
2 61 68
3 93 3 91
4 79 4 71
5 99 null null

right join

返回包括右表中的所有记录和左表中联结字段相等的记录

select * from student1
right join student2
on student1.student_id = student2.student_id
student_id score student_id(student2) score(student2)
1 88 1 43
2 61 2 68
3 93 3 91
4 79 4 71
null null 6 65

inner join

只返回两个表中联结字段相等的行

select * from student1
inner join  student2
on student1.student_id = student2.student_id
student_id score student_id(student2) score(student2)
1 88 1 43
2 61 2 68
3 93 3 91
4 79 4 71

相关文章

网友评论

      本文标题:MySQL语法

      本文链接:https://www.haomeiwen.com/subject/irkhyhtx.html