基础查询

  • 语法

    SELECT
        字段列表
    FROM
        表名列表
    WHERE
        条件列表
    GROUP BY
        分组字段
    HAVING
        分组之后的条件
    ORDER BY
        排序
    LIMIT
        分页限定
  • 基础查询
  • 多个字段查询

    • 语法:SELECT 字段名1,字段名2... FROM 表名;
    • 注意:如果查询所有字段,则可以使用*来代替字段列表。
  • 去除重复:DISTINCT
  • 计算列

    • 一般可以使用四则运算计算一些列的值。(一般只进行数字的计算)

      • null参与的计算,计算结果都为null
    • IFNULL(表达式1,表达式2)

      • 表达式1:哪个字段需要判断是否为null
      • 表达式2:如果该字段为null后替换的值
    • 起别名
    • AS:可以省略
  • -- 查询所有字段
    SELECT * FROM student;
    -- 查询某个字段
    SELECT address FROM student;
    -- 去除重复结果集
    SELECT DISTINCT address FROM student;
    -- 多个字段
    SELECT DISTINCT name , address FROM student;
    -- 计算math和english分数之和
    SELECT name , math , english , math+english FROM student;
    -- 处理null
    SELECT name , math , english , math+IFNULL(english,0) FROM student;
    -- 起别名
    SELECT name , math , english , math+IFNULL(english,0) AS 总分 FROM student;

条件查询

  • WHERE字句后跟条件
  • 运算符

    • ><<==<>
    • BETWEEN...AND
    • IN(集合)
    • LIKE
    • IS NULL
    • AND&&
    • OR||
    • NOT!
  • 模糊查询

    • 使用LIKE
    • 占位符

      • _:单个任意字符
      • %:多个任意字符
  • -- 查询年龄大于20
    SELECT * FROM student WHERE age > 20;
    -- 查询年龄不等于20
    SELECT * FROM student WHERE age != 20;
    SELECT * FROM student WHERE age <> 20;
    -- 查询年龄大于等于20且小于等于30
    SELECT * FROM student WHERE age >= 20 && age <= 30;#不推荐
    SELECT * FROM student WHERE age >= 20 AND age <= 30;
    SELECT * FROM student WHERE age BETWEEN 20 AND age <= 30;
    -- 查询年龄等于20、18、25的信息
    SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25;
    SELECT * FROM student WHERE age IN (22,18,25);
    -- 查询英语成绩为null
    SELECT * FROM student WHERE english = NULL;#不正确,NULL不能使用=或!=判断
    SELECT * FROM student WHERE english IS NULL;
    -- 查询英语成绩不为null
    SELECT * FROM student WHERE english IS NOT NULL;
    -- 查询姓马的人
    SELECT * FROM student WHERE name LIKE '马%';
    -- 查询姓名第二个字是化的人
    SELECT * FROM student WHERE name LIKE '_化%';
    -- 查询姓名是三个字的人
    SELECT * FROM student WHERE name LIKE '___';
    -- 查询姓名中包含马的人
    SELECT * FROM student WHERE name LIKE '%马%';

排序查询

  • 语法:ORDER BY 字句

    • ORDER BY 排序字段1 排序方式1,排序字段2 排序方式2...
    • 排序顺序从左到右
  • 排序方式:

    • ASC:升序(默认)
    • DESC:降序
  • SELECT * FROM student ORDER BY math;#默认升序
    SELECT * FROM student ORDER BY math ASC , english DESC;#多条件排序

聚合函数

  • 聚合函数:将一列数据作为一个整体,进行纵向的计算

    • COUNT:计算个数,一般选择非空的列
    • MAX:计算最大值
    • MIN:计算最小值
    • SUM:计算和
    • AVG:计算平均值
  • SELECT COUNT(id) FROM student;#计算个数
    SELECT MAX(math) FROM student;#最大值
    SELECT MIN(math) FROM student;#最小值
    SELECT SUM(math) FROM student;#求和
    SELECT AVG(math) FROM student;#平均值

分组查询

  • 语法:GROUP BY 分组字段;
  • 注意:

    • 分组之后查询的字段:分组字段,聚合函数
    • WHEREHAVING的区别?

      • WHERE在分组之前进行限定,如果不满足条件,则不参与分组。HAVING在分组之后进行限定,如果不满足结果,则不会被查询出来。
      • WHERE后不可以跟聚合函数,HAVING可以进行聚合函数的判断
  • -- 按照性别分组。分别查询男女同学的平均分
    SELECT sex , AVG(math) FROM student GROUP BY sex;
    -- 按照性别分组。分别查询男女同学的平均分、人数
    SELECT sex , AVG(math) , COUNT(id) FROM student GROUP BY sex;
    -- 按照性别分组。分别查询男女同学的平均分、人数。要求:分数低于70分的人不参与分组
    SELECT sex , AVG(math) , COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
    -- 按照性别分组。分别查询男女同学的平均分、人数。要求:分数低于70分的人不参与分组,分组之后人数要大于2个人
    SELECT sex , AVG(math) , COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;

分页查询

  • 语法:LIMIT 开始的索引,每页显示的条数;
  • 公式:开始的索引=(当前页码 - 1) * 每页显示的条数
  • SELECT * FROM student LIMIT 0,3;#第1页
    SELECT * FROM student LIMIT 3,3;#第2页
    SELECT * FROM student LIMIT 6,3;#第3页
最后修改:2021 年 04 月 14 日
如果觉得我的文章对你有用,请随意赞赏