MySQL数据库学习笔记(五)—— SQL(DQL)

语法
  • 查询表中的所有记录:SELECT * FORM 表名
  • 完成的语法:
    SELECT 
    	字段列表
    FROM
    	表名列表
    WHERE
    	条件列表
    GROUP BY
    	分组字段
    HAVING
    	分组之后的条件
    ORDER BY
    	排序
    LIMIT
    	分页限定
    
基础查询
  • 查询多个字段

    // 查询student3表中所有的age和name的值
    SELECT 
    	age,
    	NAME 
    FROM 
    	student3;
    
  • 去除重复

    // 查询student3表中address,去除重复的值
    SELECT DISTINCT address FROM student3;
    
  • 计算列

    // 查询student3表中math,english的值,及两者相加的结果
    // 如果有值为null,则计算结果为null
    SELECT NAME,math+english,math,english FROM student3;
    //查询student3表中math,english的值,及两者相加的结果。如果值为null,这将该值转为0
    SELECT NAME,math,english,IFNULL(math,0)+IFNULL(english,0) FROM student3;
    
  • 起别名

    // 为查询student3表中math,english相加的结果,并为其取别名sum。AS可以省略,用空格代替。
    SELECT NAME,math,english,IFNULL(math,0)+IFNULL(english,0) AS SUM FROM student3;
    
条件查询
  • 运算符

    比较运算符 说明
    > 大于
    < 小于
    = 等于
    >= 大于等于
    <= 小于等于
    <> 不等于,mysql中可以用!=表示
    BETWEEN…AND… 范围,BETWEEN 100 AND 200,表示在100-200之间,包含头尾
    IN(集合) 集合表示多个值,使用逗号分隔
    LIKE 模糊查询
    IS NULL 查询某一列为null的值,不能写=null
    逻辑运算符 说明
    and 或 && 与,SQL中建议使用and,&&不通用
    or 或 ||
    not 或 !
  • 精准查询

    // 查询student3表中年龄大于50的有哪些人
    SELECT * FROM student3 WHERE age>50; 
    // 查询student3表中年龄大于50小于60的有哪些人
    SELECT * FROM student3 WHERE age>50 AND age<60; 
    SELECT * FROM student3 WHERE age BETWEEN 50 AND 60;
    // 查询student3表中年龄等于55的有哪些人
    SELECT * FROM student3 WHERE age=55; 
    // 查询student3表中年龄不等于55的有哪些人
    SELECT * FROM student3 WHERE age!=55; 
    SELECT * FROM student3 WHERE age<>55; 
    // 查询student3表中年龄大于55或者小于30的有哪些人
    SELECT * FROM student3 WHERE age<30 OR age>55; 
    // 查询student3表中年龄等于55或者等于67的有哪些人
    SELECT * FROM student3 WHERE age IN(55,67);
    UPDATE student3 SET math=NULL WHERE NAME="zhangsan";
    // 查询math值为null的有哪些人
    SELECT * FROM student3 WHERE math IS NULL;
    // 查询math值不为null的有哪些人
    SELECT * FROM student3 WHERE math IS NOT NULL;
    
  • 模糊查询

    • 占位符:_表示单个任意字符。%表示任意多个字符
    // 查询姓刘的有哪些人
    SELECT * FROM student3 WHERE NAME LIKE '刘%';
    // 查询姓名里面第二个字带化的有哪些人
    SELECT * FROM student3 WHERE NAME LIKE '_化%';
    // 查询姓名是三个字的有哪些人
    SELECT * FROM student3 WHERE NAME LIKE '___';
    // 查询姓名包含马的有哪些人
    SELECT * FROM student3 WHERE NAME LIKE '%马%';
    
排序查询
  • 语法:ORDER BY 排序字段1 排序方式1,....排序字段n 排序方式n

  • 方式

    • ASC:升序,默认的
    • DESC:降序
    // 如果多个排序条件,只有前一个的值一样时,第二个排序条件才执行。优先级:排序条件1>排序条件2
    // 安装数学成绩排序,如果一样,安装英语成绩排序
    SELECT * FROM student3 ORDER BY math ASC,english ASC;
    
聚合函数
  • 将一列数据作为一个整体进行纵向计算,称为聚合函数
  • MySQL里面的聚合函数,所有的聚合函数计算都会排除null值
    • count:计算个数
    • max:计算最大值
    • min:计算最小值
    • sum:求和
    • avg:计算平均值
    // 计算有多少个人
    SELECT COUNT(NAME) FROM student3;
    SELECT COUNT(math) FROM student3; // 排除值为null的项,计算不准确
    SELECT COUNT(IFNULL(math,0)) FROM student3;
    SELECT COUNT(*) FROM student3;
    // 计算最大值
    SELECT MAX(math) FROM student3;
    // 计算最小值
    SELECT MIN(math) FROM student3; -- 排除值为null的项,计算不准确
    SELECT MIN(IFNULL(math,0)) FROM student3;
    // 求和
    SELECT SUM(math) FROM student3;
    // 求平均值
    SELECT AVG(math) FROM student3;
    
分组查询
  • WHERE和HAVING的区别
    • WHERE在分组之前进行限定,不满足条件不参与分组。
    • HAVING时分组之后进行限定,不满足结果,则不会被查询出来
    • WHERE后不能跟聚合函数,HAVING可以进行聚合函数的判断
    // 按照性别分组,分别查询男、女同学的平均分
    SELECT sex,AVG(math) FROM student3 GROUP BY sex ;
    // 按照性别分组,分别查询男、女同学的平均分,人数
    SELECT sex,AVG(math),COUNT(NAME) FROM student3 GROUP BY sex;
    UPDATE student3 SET id=3 WHERE NAME="刘敏";
    UPDATE student3 SET id=8 WHERE NAME="张三丰";
    // 按照性别分组,分别查询男、女同学的平均分,人数,要求分数低于60分不参与分组
    SELECT sex,AVG(math),COUNT(id) FROM student3 WHERE math>60 GROUP BY sex;
    // 按照性别分组,分别查询男、女同学的平均分,人数,要求分数低于60分不参与分组,分组之后人数要大于2个人
    SELECT sex,AVG(math),COUNT(id) FROM student3 WHERE math>60 GROUP BY sex HAVING COUNT(id)>2;
    
分页查询
  • 语法:LIMIT 开始的索引,每页查询的条数,LIMIT关键字只能在MySQL中用,

    // 每页显示3条
    SELECT * FROM student3 LIMIT 0,3; // 第一页
    SELECT * FROM student3 LIMIT 3,3; // 第二页
    // 开始的索引= (当前的页面-1)* 每页显示的条数
    SELECT * FROM student3 LIMIT 6,3; // 第二页
    
发布了113 篇原创文章 · 获赞 1 · 访问量 939

猜你喜欢

转载自blog.csdn.net/weixin_44876003/article/details/103404192