SQL 查询语句复习笔记

students 表有 id, class_id, name, gender, score列,设 class表有 id, name

排序

先按score列倒序,如果有相同分数的,再按gender列排序

SELECT id, name, gender, score FROM students ORDER BY score DESC, gender;

分页

把结果集分页,每页10条记录,展示第1页

SELECT id, name, gender, score
FROM students
ORDER BY score DESC
LIMIT 10;

如果需要显示第3页,offset计算公式为每页记录数x(页数-1),即10x(3-1)=20,语句为LIMIT 10 OFFSET 20offset超过了查询的最大数量并不会报错,而是得到一个空的结果集。)

SELECT id, name, gender, score
FROM students
ORDER BY score DESC
LIMIT 10 OFFSET 20;

聚合查询

查询所有男生的行数,设置结果集的列名为boys,语句为COUNT(*) boys

SELECT COUNT(*) boys FROM students WHERE gender = 'M';

每页10条记录,通过聚合查询获得总页数(CEILING为向上取整,FLOOR为向下取整)

SELECT CEILING(COUNT(*) / 3) FROM students;

其他常用聚合函数 SUMAVGMAXMIN

分组聚合查询

统计各班的男生和女生人数

SELECT class_id, gender, COUNT(*) num FROM students GROUP BY class_id, gender;

结果为

class_id gender num
1 M 15
1 F 15
2 M 15
2 F 15

查出每个班级的平均分,保留一位小数点

SELECT class_id,ROUND(AVG(score),1) avg_score from students GROUP by class_id;

结果为

class_id avg_score
1 86.5
2 66.6
3 23.3

多表查询

使用多表查询一班女生的信息

SELECT
    s.id sid,
    s.name,
    s.gender,
    s.score,
    c.id cid,
    c.name cname
FROM students s, classes c
WHERE s.gender = 'M' AND c.id = 1;

由于两个表中都有 id 和 name 列,务必要给相应的列设置别名,也可以给表设置别名使语句更加简洁。
多表查询的结果集可能非常巨大,要小心使用。

连接查询

选出students表的所有学生信息,并连接class表的班级名称

SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
INNER JOIN classes c
ON s.class_id = c.id;

JOIN查询对比

设A表和B表,设查询语句:

SELECT * FROM A JOIN B ON A.c1 = B.c2;

INNER JOIN是选出两张表都存在的记录:



LEFT OUTER JOIN是选出左表存在的记录:


RIGHT OUTER JOIN是选出右表存在的记录:


FULL OUTER JOIN则是选出左右表都存在的记录:


未完待续

参考内容:SQL教程 - 廖雪峰的官方网站

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • sql教程 1基本查询 基本查询 SELECT * FROM <表名>以查询到一张表的所有记录 2条件查询 条件查...
    无疆wj阅读 420评论 0 0
  • 练习链接 1 查询所有数据 查询students表的所有数据 SELECT * FROM students; SE...
    w_dll阅读 1,890评论 0 0
  • MySQL技术内幕:SQL编程 姜承尧 第1章 SQL编程 >> B是由MySQL创始人之一Monty分支的一个版...
    沉默剑士阅读 2,536评论 0 3
  • 一、字符串 1、不可变字符串的创建(NSSString) 2、字符串的比较 3、字符串的处理 4、可变字符串的创建...
    my_杨哥阅读 5,326评论 1 15
  • 如果,痛苦能够释放,谁愿意留在心上!如果,痛苦能够分担,谁愿意独扛!其实,每个人心中,都有一段故事,有些,能与别人...
    轩濡沫阅读 239评论 0 0