JAVAWeb学习笔记--SQL语句
添加数据
不建议使用第二种省略列名的方式。
修改数据
需要注意的是:修改语句中如果不加条件,则将所有数据都修改!
如: update stu set tel=“1231241”;
会将表中所有点tel都设置为1231241
删除数据
需要注意的是:修改语句中如果不加条件,则将所有数据都删除!
查询语法
基础查询
不建议使用*,因为这样不方便代码的阅读、改进和注释
as的用法:
`SELECT name as '姓名' ,english as "英语" from stu;`
条件查询
具体案例:![在这里插入图片描述](https://img-blog.csdnimg.cn/92e5baf88d184dc69bf599d92e57ccfc.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3d1X2Zpc2hlcg==,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/8af650d985df497c9023fb0ad693fca5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3d1X2Zpc2hlcg==,size_20,color_FFFFFF,t_70,g_se,x_16)
-- 1.查询年龄大于20岁的学员信息 SELECT * from stu where age > 20; -- 2.查询年龄大于等于20岁的学员信息 SELECT * from stu where age >= 20; -- 3.查询年龄大于等于20岁并且年龄小于等于30岁的学员信息 SELECT * from stu where age >= 20 and age<=30; SELECT * from stu where age BETWEEN 20 and 30; -- 4.查询入学日期在'1998-09-01'到'1999-09-01' 之 间的学员信息 SELECT * from stu where hire_date between '1998-09-01' and '1999-09-01'; -- 5.查询年龄等于18岁的学员信息 SELECT * from stu where age =18; -- 6.查询年龄不等于18岁的学员信息 SELECT * from stu where age !=18; SELECT * from stu where age <>18; -- 7.查询年龄等于18岁或者年龄等于20岁或者年龄等于22岁的学员信息 SELECT * from stu where age =18 or age=20 or age=22; SELECT * from stu where age in (18,20,22); -- 8.查询英语成绩为null的学员信息 -- 注意: nul1值的比较不能使用 = !=。需要使用is is not I SELECT * from stu where english is NULL;
模糊查询
通配符:
(1)_ :代表单个任意字符
(2)%号:代表任意个数字符
-- 模糊查询like ===================== /* 通配符: (1)_ :代表单个任意字符 (2)%号:代表任意个数字符 */ -- 1.查询姓'马'的学员信息 SELECT * FROM stu where name like '马%'; -- 2.查询第二个字是'花'的学员信息 SELECT * FROM stu where name like '_花%'; -- 3.查询名字中包含'德'的学员信息 SELECT * FROM stu where name like '%德%';
排序查询
-- 1.查询学生信息,按照年龄升序排列 SELECT * from stu order by age asc; -- 2.查询学生信息,按照数学成绩降序排列 SELECT * from stu order by math desc; -- 3. 查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列 SELECT * from stu order by math desc , english asc;
分组查询
null不参与所有聚合函数的运算,也就是min,max这些都不会选取到null,求平均值也是直接忽略null;
/* 聚合函数 count:统计数量 max:求最大值 min:求最小值 sum:求和 avg:求平均值 */ -- 1.统计班级共有 多少个学生 select count(id) from stu ; select count(*) from stu ;-- count不会统计为null的单元格 -- 2.查询数学成绩的最高分 select max(math) from stu; -- 3.查询数学成绩的最低分 select min(math) from stu; -- 4.查询数学成绩的总分 SELECT sum(math) from stu; -- 5.查询数学成绩的平均分 SELECT avg(math) from stu;
分组查询
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义这句话的意思是说:
分组字段和聚合函数前后需要对应,不然就没有意义
比如:SELECT name,sex,avg(math) from stu GROUP BY sex;
这里的name与后面的sex并没有对应,所以得到的结果一定也是没有意义的。
有意义:
无意义:
/* 分组函数 SELECT字段列表FROM表名[WHERE分组前条件限定]GROUPBY分组字段名[HAVING分组后条件过滤]...; */ select * from stu ; -- 1.查询男同学和女同学各自的数学平均分 SELECT sex,avg(math) from stu GROUP BY sex; /* 注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义这句话的意思是说: 分组字段和聚合函数前后需要对应,不然就没有意义 比如:SELECT name,sex,avg(math) from stu GROUP BY sex; 这里的name与后面的sex并没有对应,所以得到的结果一定也是没有意义的。 */ -- 2.查询男同学和女同学各自的数学平均分,以及各自人数 select sex,count(sex),avg(math) from stu GROUP BY sex; -- 3. 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组 select sex,count(sex),avg(math) from stu where math >70 GROUP BY sex ; /*4.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2*/ select sex,count(sex),avg(math) from stu where math >70 GROUP BY sex having count(*)>1 ;
分页查询
/* SELECT字段列表FROM表名LIMIT起始索引 ,查询条目数 *起始索引:从0开始 */ select * from stu; -- 1.从0开始查询,查询3条数据 SELECT * from stu limit 0,3; -- 2.每页显示3条数据,查询第1页数据 SELECT * from stu limit 0 , 3; -- 3.每页显示3条数据,查询第2页数据 SELECT * from stu limit 3 , 3; -- 4.每页显示3条数据,查询第3页数据 SELECT * from stu limit 6 , 3; -- 起始索引=(当前页码-1)*每页显示的条数