查询MySQL
-- 删除stu表
drop table if exists stu;
-- 创建stu表
CREATE TABLE stu (
id int, -- 编号
name varchar(20), -- 姓名
age int, -- 年龄
sex varchar(5), -- 性别
address varchar(100), -- 地址
math double(5,2), -- 数学成绩
english double(5,2), -- 英语成绩
hire_date date -- 入学时间
);
-- 添加数据
INSERT INTO stu(id,NAME,age,sex,address,math,english,hire_date)
VALUES
(1,'马运',55,'男','杭州',66,78,'1995-09-01'),
(2,'马花疼',45,'女','深圳',98,87,'1998-09-01'),
(3,'马斯克',55,'男','香港',56,77,'1999-09-02'),
(4,'柳白',20,'女','湖南',76,65,'1997-09-05'),
(5,'柳青',20,'男','湖南',86,NULL,'1998-09-01'),
(6,'刘德花',57,'男','香港',99,99,'1998-09-01'),
(7,'张学右',22,'女','香港',99,99,'1998-09-01'),
(8,'德玛西亚',18,'男','南京',56,65,'1994-09-02');
SELECT * from stu;
-- 基础查询 ================
-- 查询name age 两列
SELECT name,age from stu;
-- 查询所有列的数据, 列名的列表可以使用*来替代
SELECT * FROM stu;
-- 查询地址这一列 (去除重复记录)
SELECT address FROM stu;
-- 去除重复记录DISTINCT 关键字
SELECT DISTINCT address from stu;
-- 查询姓名, 数学成绩, 英语成绩 AS 起别名
SELECT name,math as 数学成绩,english as 英语成绩 FROM stu;
*************************
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 && age <= 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的学员信息
-- 注意 null值的比较不能使用 = != 需要使用is is not
SELECT * from stu WHERE english = null; -- 不行的
SELECT * from stu WHERE english is null;
SELECT * from stu WHERE english is not null;
**************
-- 模糊查询 like================
/*
(1)_ : 代表单个任意字符
(2)% : 代表任意个数字符
*/
-- 1.查询姓'马'的学员信息
SELECT * from stu WHERE name LIKE '马%';
-- 2.查询第二个字是'花'的学员信息
SELECT * from stu WHERE name LIKE '_花%';
-- 3.查询名字中包含 '德' 的学员信息
SELECT * from stu WHERE name LIKE '%德%';
*************
/*
排序查询:
*语法: SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
*排序方式:
ASC : 升序排列 (默认值)
DESC : 降序排列
*/
-- 1.查询学生信息,按照年龄升序排列
SELECT * FROM stu ORDER BY age asc; -- 不写asc 也是默认
-- 2.查询学生信息,按照数学成绩降序排列
SELECT * FROM stu ORDER BY math desc;
-- 3.查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
SELECT * FROM stu ORDER BY math desc , english asc;
**************
-- 聚合函数 ================
-- 聚合函数语法
-- SELECT 聚合函数名(列名) FROM 表;
-- 注意:null 值不参与所有聚合函数运算
/*
*count 统计数量
*取值:1.主键 2.*
*max 求最大值
*min 求最小值
*sum 求和
*avg 求平均值
*/
-- 1.统计班级一共有多少个学生
SELECT * from stu;
SELECT COUNT(id) from stu; -- count 统计的列名不能为null
SELECT COUNT(english) from stu;
-- 2.查询数学成绩的最高分
SELECT MAX(math) from stu;
-- 3.查询数学成绩的最低分
SELECT min(math) from stu;
-- 4.查询数学成绩的总分
SELECT sum(math) from stu;
-- 5.查询数学成绩的平均分
SELECT avg(math) from stu;
-- 6.查询英语成绩的最低分
SELECT min(english) from stu;
****************
面试题
-- 分组查询==============
-- 语法: SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
-- 注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
SELECT * from stu;
-- 1.查询男同学和女同学各自的数学平均分
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;
*************************
-- 分叶查询==============
-- 语法: 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) * 每页显示的条数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构