语法
- 查询表中的所有记录:
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; // 第二页