SELECT column [AS] alias_name [...] FROM table_name;
as还可以省略,其他列的名称也能重命名。
结果去重
WHERE 条件
比较运算符:
逻辑运算符:
案例:
英语不及格的同学及英语成绩 ( < 60 )
语文成绩在 [80, 90] 分的同学及语文成绩
使用 AND 进行条件连接
使用 BETWEEN ... AND ... 条件
数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
使用 OR 进行条件连接
使用 IN 条件
姓孙的同学 及 孙某同学
% 匹配任意多个(包括 0 个)任意字符
_ 匹配严格的一个任意字符
语文成绩好于英语成绩的同学
WHERE 条件中比较运算符两侧都是字段
总分在 200 分以下的同学
WHERE 条件中使用表达式,where后面的表达式太长了,能不能用别名呢?
答案是不行,如下图,是执行的顺序。要先知道在哪找,然后根据筛选条件最后再去筛选。
因此先执行了筛选条件,此时还不知道所谓的别名,当然就不认识了。
别名不能用在 WHERE 条件中
语文成绩 > 80 并且不姓孙的同学
AND 与 NOT 的使用
孙某同学,否则要求总成绩 > 200 并且 语文成绩 < 数学成绩 并且 英语成绩 > 80
select name,chinese,math,english,chinese+math+english 总分 from exam_result where name like '孙_' or (chinese+math+english>200 and chinese<math and english>80);
NULL 的查询
如上图,空串和null是不一样的。
结果排序
语法:
ASC 为升序(从小到大)
DESC 为降序(从大到小)
默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
案例:
同学及数学成绩,按数学成绩升序显示
同学及 qq 号,按 qq 号排序显示
NULL 视为比任何值都小,升序出现在最上面;
NULL 视为比任何值都小,降序出现在最下面;
查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示
多字段排序,排序优先级随书写顺序
查询同学及总分,由高到低
为什么这里可以用别名了?
因为要先有合适的数据,然后再排序。
ORDER BY 子句中可以使用列别名
查询姓孙的同学或者姓曹的同学数学成绩,结果按数学成绩由高到低显示
结合 WHERE 子句 和 ORDER BY 子句
筛选分页结果
语法:
起始下标为 0
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;