MySql数据库(4)DQL查询数据(重点)
1.DQL
(Data Query LANGUAGE:数据查询语言)
-
-
所有的查询操作都用它 Select
-
简单的查询,复杂的查询都可以做
-
数据库中最核心的语言,最重要的语句
-
使用频率最高的语句
-
2.指定查询字段
语法:SELECT 字段,...... FROM 表
有时候,列名字不是那么的见名知意。我们起别名AS 字段名 as 别名 表名 as 别名
查询全部学生 例如有一个学生表
SELECT *FROM `student`;
查询指定字段
SELECT `studentno`,`studentname` FROM `student`;
别名,给结果起一个别名 as 可以给字段起别名,也可以给表名起别名
SELECT `studentno` AS 学号,`studentname` AS 姓名 FROM `student` AS s;
函数 Concat(a,b)
SELECT CONCAT('姓名:',studentname) AS 姓名 FROM `student`;
去重 distinct
作用:去除SELECT 查询出来的结果中重复的数据,重复的数据只显示一条
SELECT DISTINCT `studentno` FROM `result`;
学员考试成绩 +1分查看
SELECT `studentresult`+1 AS 考试成绩 FROM `result` ;
数据库中的表达式:文本值,列,Null,函数,计算表达式,系统变量......
select 表达式 from 表
3.where 条件字句
作用:检索数据中 符合条件 的值
搜索的条件由一个或者多个表达式组成!结果 布尔值
查询考试成绩在 95-100 分之间
SELECT `studentno`,`studentresult` FROM result
WHERE `studentresult` BETWEEN 80 AND 100; -- 模糊查询(区间)
SELECT `studentno`,`studentresult`FROM result
WHERE `studentresult`>=80 AND `studentresult` <=100
模糊查询:比较运算符
like结合 %(代表0到任意个字符) _(一个字符)
in (具体的一个或者多个值)
查询姓张的同学
SELECT `studentno`,`studentname` FROM `student` WHERE `studentname` LIKE '张_'
查询广东深圳的同学
SELECT `studentno`,`studentname` FROM `student` WHERE `address` IN ('广东深圳');
4.联表查询
思路:1.分析需求,分析查询的字段来自那些表(连接查询)
2.确定使用那种连接查询? 7种 确定交叉点*(这两个表中的那个数据是相同的)
3.判定的条件:学生表的中 studentNo= 成绩表中 studentNo
查询参加考试的同学(学号,姓名,科目编号,分数)
SELECT s.`studentno` AS 学号,s.studentname AS 姓名,r.subjectno AS 科目编号,r.studentresult AS 学生成绩
FROM student AS s INNER JOIN result r ON s.`studentno`=r.`studentno`
-
-
inner join 如果表中至少有一个匹配,就返回行
-
left join 会从左表中返回所有的值,即使右表中没有匹配
-
-
-
right join 会从右表中返回所有的值,即使左表中没有匹配
-
5.自连接
自己的表和自己的表连接,核心:一张表拆为两张一样的表即可
查询父子信息:把一张表看为两个一模一样的表
SELECT a.`categoryname` AS 父栏目,b.`categoryname` AS 子栏目 FROM `category` AS a,
`category` AS b WHERE a.`categoryid`=b.`pid`
6.分页和排序
排序: 升序ASC ,降序DDSC
ORDER BY 通过那个字段排序,怎么排
查询的结果根据,成绩降序,排序
SELECT s.studentno AS 学号,studentname AS 学生姓名,studentresult AS 考试成绩 FROM
student AS s INNER JOIN result AS r ON s.studentno=r.studentno WHERE s.studentno=1000
ORDER BY studentresult DESC;
分页:limit (查询下标起始值,页面的大小)
第N页:(n-1)*pagesize,pagesize pagesize:页面大小
SELECT s.studentno AS 学号,studentname AS 学生姓名,studentresult AS 考试成绩 FROM
student AS s INNER JOIN result AS r ON s.studentno=r.studentno WHERE s.studentno=1000
ORDER BY studentresult DESC LIMIT 0,5
7.子查询
where(这个值是就算出来的)
本质:在where语句中嵌套一个子查询
-- 高等数学-1分数不小于80分的学生的学号和姓名
SELECT DISTINCT s.`studentno`,`studentname` FROM `student` AS s
INNER JOIN `result` AS r ON s.`studentno`=r.`studentno`
WHERE `studentresult` >=80 AND `subjectno`=(SELECT `subjectno` FROM
`subject` WHERE `subjectname`='高等数学-1');
8.分组和过滤
-- 查询不同课程的平均分,最高分,最低分
SELECT `subjectname`,AVG(`studentresult`) AS 平均值 ,MAX(`studentresult`) FROM result AS r
INNER JOIN `subject` AS s ON s.`subjectno`=r.`subjectno`
GROUP BY r.`subjectno` -- 通过什么字段来分组
HAVING 平均值>=80
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现