JavaWeb-Mysql篇 1-4 DQL(数据查询)(条件查询WHERE、模糊查询Like、分组查询GROUP BY、 排序查询ORDER BY、 分页查询LIMIT)(重中之重)

1、DQL–基础查询

在这里插入图片描述

1.查询多个字段
Select 字段列表 From 表名;
Select * From 表名; – 查询所有数据
2.去除重复记录
Select Distinct 字段列表 From 表名; – distinct是不同的 意思
3.起别名
As: As 也可以省略
比如 select 字段1 as 别名,字段2 as 别名,… from 表名;
在这里插入图片描述

开始实践基础查询

1.1准备工作,准备一些数据

-- 创建一个表 stu
CREATE TABLE stu ( id INT, NAME VARCHAR ( 5 ), age TINYINT, sex CHAR ( 1 ), math TINYINT, english TINYINT, birthday date );
DESC stu;
-- 为表添加数据
INSERT INTO STU ( id, NAME, age, sex, math, english, birthday )
VALUES ( 1, "马云", 55, "男", 66, 78, "1995-09-01" ),
( 2, "马化腾", 45, "男", 50, 90, "1998-01-13" ),(
	3,"马新亮",55,"男",99,88,"1992-09-01" ),(
	4,"柳白",20,"女",96,48,"1992-09-01" ),(
	5,"刘德花",57,"男",12,78,"1997-02-11" ),(
	6,"张学友",25,"男",88,28,"1995-02-01" ),(
	7,"德玛西亚",125,"男",26,28,"1999-09-01" 
);
-- 查看所有数据
SELECT * FROM STU;

在这里插入图片描述

1.2 查询多个字段 Select 字段列表 From 表名;
在这里插入图片描述
1.3 去除重复记录 Select Distinct 字段列表 From 表名;
我们看到马云和马新亮都是55岁,我们只想统计年龄的范围,不想关心重复的
在这里插入图片描述

1.4 起别名 as:别名

问题:有的时候查询出来结果后,我们并不知道某个字段是什么意思,这个时候可以给他们起别名。 为name 和 age字段起别名
在这里插入图片描述
在这里插入图片描述

2、DQL—条件查询WHERE、模糊查询

在这里插入图片描述

SELECT * from stu; -- 查询表内所有数据

-- 条件查询 =========

-- 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.查询入学日期在'1995-09-01' 到 '1995-02-01' 之间的学员信息
SELECT * FROM STU WHERE birthday between '1995-09-01' and '1999-02-01';

-- 5.查询年龄等于57岁的学员信息
SELECT * FROM STU WHERE age = 57;

-- 6.查询年龄不等于57岁的学员信息
SELECT * FROM STU WHERE age != 57;
SELECT * FROM STU WHERE age <> 57;

-- 7.查询年龄等于20岁 或者 等于25 岁 或者 年龄等于125岁的学员信息
SELECT * FROM STU WHERE age IN (20, 25, 125);

-- 8.查询英语成绩为null的学员信息
-- 注意:null值的比较不能使用 = !=。 需要使用 is is not 

SELECT * FROM STU WHERE english is null;
-- 9.模糊查询 
-- 1.查询姓马的学员信息
SELECT * FROM STU WHERE name LIKE  "马%";

-- 2.查询第二个字是'新'的学员信息
SELECT * FROM STU WHERE name LIKE  "_新%";

-- 3.查询第名字中包含'友'的学员信息
SELECT * FROM STU WHERE name LIKE  "%友%";

模糊查询的结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、DQL-- 排序查询ORDER BY

在这里插入图片描述

Select 字段列表 From 表名 ORDER BY 排序字段名1 排序方式1,排序字段名2 排序方式2,…;

/*
    排序方法:
					ASC:升序(默认)
					DESC:降序
					Select 字段列表 From 表名 ORDER BY 排序字段名1 排序方式1,排序字段名2 排序方式2,......;
*/

SELECT * from stu;
-- 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;

结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、DQL–分组查询的前提了解下聚合函数

分组查询的应用场景
在这里插入图片描述

聚合函数:
count(列名) 统计数量(一般选用不为Null的列)
max(列名) 最大值
min(列名) 最小值
sum(列名) 求和
avg(列名) 平均值
用法;
SELECT 聚合函数名(列名) FROM 表;

在这里插入图片描述

/**
		
		聚合函数:
					count(列名)  统计数量(一般选用不为Null的列)
						取值:
								1.主键
								2.* (推荐)
					max(列名)    最大值
					min(列名)    最小值
					sum(列名)    求和
					avg(列名)    平均值
*/

-- 1.统计班级一共有多少个学生  count 统计的列名下的数据不能为null
SELECT COUNT(id) FROM STU;  -- 7
SELECT COUNT(english) FROM STU;  -- 6

-- 推荐 *
SELECT COUNT(*) FROM STU; -- 只要一行有一个不为空,* 就能统计出来,而且计算速度快

-- 2.查询数学成绩的最高分
SELECT MAX(math) FROM STU; -- 99

-- 3.查询数学成绩的最低分
SELECT MIN(math) FROM STU; -- 12

-- 4.查询数学成绩的总分
SELECT SUM(math) FROM STU; -- 459

-- 5.查询数学成绩的平均分
SELECT AVG(math) FROM STU; -- 65.5714

-- 6.查询英语成绩的最低分(注意有一个英语为null)
-- null不参与运算,被排除在外。
SELECT MIN(english) FROM STU; -- 28

结果就不贴了,很easy~

5、DQL–分组查询GROUP BY

1.分组查询法

SELECT 字段列表 FROM 表名 WHERE 分组前条件限定 GROUP BY 分组字段名 HAVING 分组后条件过滤;

在这里插入图片描述

/*

		分组函数:
			SELECT 字段列表 FROM 表名 WHERE 分组前条件限定 GROUP BY 分组字段名 HAVING 分组后条件过滤;
*/
SELECT * FROM STU;
-- 1. 查询男同学和女同学各自的数学平均分
-- 注意 分组之后,查询(SELECT之后)的字段为聚合函数和分组字段,查询其他无意义。
SELECT sex,avg(math) FROM STU GROUP BY sex;

-- 2. 查询男同学和女同学各自的数学平均分,以及各自人数
SELECT sex,avg(math),count(*) FROM STU GROUP BY sex;

/* 3.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组*/
SELECT sex,avg(math),count(*) FROM STU WHERE math > 70 GROUP BY sex;

/* 4.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2*/
SELECT sex,avg(math),count(*) FROM STU WHERE math > 70 GROUP BY sex HAVING count(*) > 2;




在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、DQL—分页查询limit

1、分页查询语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询条目数;

起始索引是动态算出来的
在这里插入图片描述

/*
		SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询条目数;
		
*/

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;


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值