MySQL中DQL的单表查询

本文详细介绍了MySQL中的单表查询操作,包括基础查询、条件查询、排序查询、聚合函数、分组查询及分页查询等。通过创建名为`stu`的表并插入数据,展示了各种查询语法的实例,如查询所有学生信息、按条件筛选、去重、排序、分组及聚合计算等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-- 单表查询对应练习题    https://blog.csdn.net/ksaar_/article/details/103811410

 

-- 创建表

CREATE TABLE stu  (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(32),
  age int(11),
  sex varchar(1),
  address varchar(20),
  math double(5, 2) NOT NULL DEFAULT 0.00,
  english double(5, 2) NOT NULL DEFAULT 0.00,
  PRIMARY KEY (id)
) AUTO_INCREMENT = 1;

-- 添加数据

INSERT INTO `stu` VALUES (1, '浩诚', 35, '女', '阿富汗', 90.00, 30.00);
INSERT INTO `stu` VALUES (2, '彭超', 20, '男', '阿富汗', 70.00, 60.00);
INSERT INTO `stu` VALUES (3, '余旭', 20, '男', '阿富汗', 50.00, 30.00);
INSERT INTO `stu` VALUES (4, '刘诚', 18, '女', '湖北', 90.00, 98.00);
INSERT INTO `stu` VALUES (5, '雨晴', 19, '女', '上海', 60.00, 70.00);
INSERT INTO `stu` VALUES (6, '唐三藏', 35, '男', '东土大唐', 0.00, 00.00);
INSERT INTO `stu` VALUES (7, '孙悟空', 500, '男', '花果山', 10.00, 00.00);
INSERT INTO `stu` VALUES (8, '猪悟能', 360, '男', '高老庄', 0.00, 00.00);
INSERT INTO `stu` VALUES (9, '沙悟净', 180, '男', '瑶池', 30.00, 10.00);
INSERT INTO `stu` VALUES (10, '白龙马', 100, '男', '东海龙宫', 50.00, 30.00);
INSERT INTO `stu` VALUES (11, '柯南', 15, '男', '日本', 90.00, 100.00);
INSERT INTO `stu` VALUES (12, '李太宗', 50, '男', '东土大唐', 50.00, 10.00);
INSERT INTO `stu` VALUES (13, '西王母', 1000, '女', '瑶池', 0.00, 00.00);
INSERT INTO `stu` VALUES (14, '马云', 55, '男', '杭州', 66.00, 78.00);
INSERT INTO `stu` VALUES (15, '马化腾', 45, '女', '深圳', 98.00, 87.00);
INSERT INTO `stu` VALUES (16, '马景涛', 55, '男', '香港', 56.00, 77.00);
INSERT INTO `stu` VALUES (17, '柳岩', 20, '女', '湖南', 76.00, 65.00);
INSERT INTO `stu` VALUES (18, '柳青', 20, '男', '湖南', 86.00, 00.00);
INSERT INTO `stu` VALUES (19, '刘德华', 57, '男', '香港', 99.00, 99.00);
INSERT INTO `stu` VALUES (20, '马德', 22, '女', '香港', 99.00, 99.00);
INSERT INTO `stu` VALUES (21, '德玛西亚', 18, '男', '南京', 56.00, 65.00);

 

-- 查询的书写顺序
-- SELECT ... FROM 表名 WHERE 条件 GROUP BY 分组 HAVING 条件 ORDER BY 排序 LIMIT 分页    
-- 查询的解析(运行)顺序
-- FROM 表名 WHERE 条件 GROUP BY 分组 SELECT ... HAVING 条件 ORDER BY 排序 LIMIT 分页    

 

-- 基础查询  SELECT
-- 查询学生中的所有学生信息
SELECT * FROM stu;
-- 查询学生中的所有学生的姓名
SELECT name FROM stu;

 

-- 条件查询   WHERE 条件
-- 查询所有男性的信息
SELECT * FROM stu WHERE sex = '男';

-- AND,&& 并且
-- 查询所有男性中数学成绩大于80的信息
SELECT * FROM stu WHERE sex = '男' AND math > 80;
SELECT * FROM stu WHERE sex = '男' && math > 80;

-- OR,|| 或者
-- 查询所有女性的数学成绩,或者成绩大于90的信息
SELECT * FROM stu WHERE sex = '女' OR math > 90;
SELECT * FROM stu WHERE sex = '女' || math > 90;

-- NOT,!  非
-- 查询所有非男性的信息
SELECT * FROM stu WHERE sex != '男';

-- DISTINCT 去重
-- 查询居住地有多少种
SELECT DISTINCT address FROM stu;

-- BETWEEN a AND b    a 和 b 之间
-- 查询再数学成绩早90到100之间的所有信息
SELECT * FROM stu WHERE math BETWEEN 90 AND 100;

-- IN(a,b,c,...)     再a,b,c...之中
-- 查询数学成绩等于90和等于10的人
SELECT * FROM stu WHERE math IN(90,10);

-- LIKE 好像 后面加 _ 表示一个未知字符  % 表示未知字符,也不知的个数,可以是0个
-- 查询姓柯的,并且名字只有两个子的人
SELECT * FROM stu WHERE name LIKE '柯_';
-- 查询名字为三个字的人的信息
SELECT * FROM stu WHERE name LIKE '___';
-- 查询姓马的人
SELECT * FROM stu WHERE name LIKE '马%';

SELECT * FROM stu WHERE SUBSTRING(`name`,1,1) = '马';
-- 查询名字中有马的人
SELECT * FROM stu WHERE name LIKE '%马%';

 


-- 排序查询  ORDER BY
-- 查询所有学生的信息,按照数学成绩 从小到大,升序(ASC),排序....不加排序规则默认升序
SELECT * FROM stu ORDER BY math;
SELECT * FROM stu ORDER BY math ASC;
-- 查询所有学生的信息,按照英语成绩 从大到小,升序(DESC),排序
SELECT * FROM stu ORDER BY english DESC;
-- 查询所有学生的信息,先按数学成绩的从小到大(默认) 排序,数学成绩相同,按照英语成绩从大到小排序
SELECT * FROM stu ORDER BY math,english DESC;

 


-- 聚合函数
-- 查询数据的条数
SELECT COUNT(*) FROM stu;
-- 查询数学最高分
SELECT MAX(math) FROM stu;
-- 查询数学最低分
SELECT MIN(math) FROM stu;
-- 查询数学总分
SELECT SUM(math) FROM stu;
-- 查询数学平均分
SELECT AVG(math) FROM stu;

 


-- 分组查询   GROUP BY  
-- 一但分组之后,查询的结果也应该是分组字段,或者聚合函数
-- 按照性别分组,分别查询男,女同学的平均分数,人数
SELECT sex,AVG(math),COUNT(*) FROM stu GROUP BY sex;
-- 按照性别分组,分别查询男,女同学的平均分数,人数 , 要求:成绩大于60的才参与分组
SELECT sex,AVG(math),COUNT(*) FROM stu WHERE math > 60 GROUP BY sex;

-- HAVING 条件判断
-- 按照性别分组,分别查询男,女同学的平均分数,人数 , 要求:成绩大于60的才参与分组 , 并且分组后的人数要大于5 才显示
SELECT sex,AVG(math),COUNT(*) 人数 FROM stu WHERE math > 60 GROUP BY sex HAVING 人数 > 5;
-- WHERE 与 HAVING 的区别
-- WHERE 是对分组前表的数据进行过滤的,WHERE 后面不能使用聚合函数,
-- HAVING 是对分组后形成的分组表进行过滤的,HAVING 后面可以使用聚合函数,

 


-- 分页查询  LIMIT 开始的索引,查询的条数    LIMIT是MySQL的方言
-- 每页显示5条数据
-- 公式: 开始的索引 = (当前的页码 -1) * 每页显示的条数
SELECT * FROM stu LIMIT 0,5;   -- 第一页
SELECT * FROM stu LIMIT 5,5;   -- 第二页
SELECT * FROM stu LIMIT 10,5;   -- 第三页

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值