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

 

posted @   十三加油哦  阅读(64)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示