首页 > 数据库 >数据库查询

数据库查询

时间:2023-10-26 18:37:53浏览次数:25  
标签:join sub -- 数据库 查询 StudentNo StudentResult select

1、连接查询

  1. 内连接查询
    1. 与单表查询相似,都是使⽤select语句
    2. 可以把多张表放到select后边,并⽤逗号隔开
    3. 还可以结合as取别名,⽅便引⽤
    4. 如果要查询多个表中的字段,⽆重名的情况下,可以省略表的指定
  2. ⾮等值连接 迪卡尔积
  3. -- 内连接中的非等值链接。
    select * from grade,subject;
    
    -- 内连接中的等值连接
    select * 
    from grade g,subject s
    where g.GradeId= s.GradeId;
    
    -- 内连接
    select * 
    from grade g
    inner join subject s on g.GradeId=s.GradeId;
    
    -- 练习1 查询所有课程的名称和年级名称
    select s.SubjectName,g.GradeName
    from subject s
    inner join grade g on s.GradeId=s.GradeId;
    
    -- 练习2 查询学生姓名,课程名称,考试分数
    select s.StudentName,sub.SubjectName,r.StudentResult
    from student s
    inner join result r on s.StudentNo=r.StudentNo
    inner join subject sub on r.SubjectNo=sub.SubjectNo;

     

  4. 外连接
    1. 左连接
      1. 从左表中返回所有数据,即便在右表中没有匹配的⾏
      2. -- 左连接
        -- 查询所有年级学的课程
        select g.GradeName,s.SubjectName
        from grade g left join subject s
        on g.GradeId =s.GradeId;

         

    2. 右连接
      1. 从右表中返回所有的记录,即使在左表中没有匹配的⾏
      2. -- 右连接
        -- 查询所有年级学的课程
        select g.GradeName,s.SubjectName
        from grade g right join subject s
        on g.GradeId =s.GradeId;

         

  5. join对比
    1. inner join 表中有⾄少有⼀个匹配的,则返回行。
    2. left join 不论右表是否有匹配,都会返回左表的所有的行。
    3. right join 不论左表是否有匹配,都会返回右表的所有的行。

2、排序 order by

  1. 对select语句查询到的结果,按某些字段进行排序。
  2. 升序asc 和 降序desc 默认是升序asc。
  3. -- 排序
    -- 查询数据库结构-1的所有考试结果,并按成绩由高到低排序
    -- 显示姓名,课程名称,分数
    select s.StudentName,sub.SubjectName,r.StudentResult
    from student s
    inner join result r on s.StudentNo= r.StudentNo
    inner join subject sub on sub.SubjectNo=r.SubjectNo
    where sub.SubjectName="数据库结构-1"
    order by r.StudentResult desc;

     

3、limit 常⽤于分页显示

  1. limit [m,] n
    1. 限制select返回结果的⾏数。
    2. m 制定第⼀个返回记录的偏移量。
    3. n 制定返回记录⾏的最⼤数⽬。
  2. -- limit
    -- 返回成绩表中前5条记录
    select * from result limit 5;
    select * from result limit 0,5;
    
    -- 查询数据库结构-2的所有考试结果,并按成绩由高到低排序
    -- 显示学号,学生姓名,考试分数查询前5名
    select s.StudentNo,s.StudentName,r.StudentResult
    from student s
    inner join result r on s.StudentNo= r.StudentNo
    inner join subject sub on sub.SubjectNo=r.SubjectNo
    where sub.SubjectName="数据库结构-2"
    order by r.StudentResult desc
    limit 0,5;

     

4、子查询

  1. 在查询语句中的where 条件中,⼜嵌套了另外⼀个查询语句
  2. ⼦查询的结果⼀般都集合,建议使⽤in
  3. -- 子查询
    -- 查询课程为高等数学-2 且分数不小于80的学生编号和姓名
    -- 方式一
    select s.StudentNo,s.StudentName
    from student s
    inner join result r on s.StudentNo= r.StudentNo
    inner join subject sub on sub.SubjectNo=r.SubjectNo
    where sub.SubjectName="高等数学-2" and r.StudentResult >= 80;

     

  4. -- 方式二(子查询方式)
    -- 第一步先查询出高等数学的课程编号
    select sub.SubjectNo
    from student sub 
    where sub.StudentName="高等数学-2";
    -- 第二步查询课程编号为2的且分数大于等于80的学生编号
    select r.StudentNo
    from result r 
    where r.SubjectNo=2 and r.StudentResult>=80;
    -- 第三步根据学生编号查询学生姓名
    select s.StudentNo,s.StudentName
    from student s 
    where s.StudentNo in (select r.StudentNo
    from result r 
    where r.SubjectNo=2 and r.StudentResult>=80);
    -- 最终的
    select s.StudentNo,s.StudentName
    from student s 
    where s.StudentNo in (
    select r.StudentNo
    from result r 
    where r.SubjectNo=(
    select sub.SubjectNo
    from student sub 
    where sub.StudentName="高等数学-2")
    and r.StudentResult>=80);

     

5、统计函数

  1. count() 返回满⾜select 条件的记录的总和数。
  2. sum() 返回列的总和。
  3. avg() 返回列平均值。
  4. max() 返回列的最⼤值。
  5. min() 返回列的最⼩值。
  6. -- 统计函数
    -- 1、计数count
    -- 查询result表中有多少条记录
    select count(*) from result;
    -- 2、求和sum
    -- 求成绩大于98分的所有成绩的和
    select sum(StudentResult) from result where StudentResult>98;
    -- 3、求平均成绩 avg 
    -- 求成绩表中的平均成绩
    select avg(StudentResult) from result;
    -- 4、求最大值 max
    select max(StudentResult) from result;
    -- 5、求最小值 min
    select min(StudentResult) from result;

     

6.分组 group by 

  1. 可以对所有 数据进⾏⼀个分组统计
  2. 分组的依据字段是可以有多个的,并依次分组
  3. 与having 结合使⽤ 进⾏分组后的数据筛选
  4. -- 分组group by
    -- 按不同课程分组,分别计算出其平均分,最高分,最低分
    -- 对于低于80平均分的不显示
    select sub.SubjectName,avg(r.StudentResult),max(r.StudentResult),min(r.StudentResult)
    from subject sub inner join result r
    on sub.SubjectNo=r.SubjectNo
    group by sub.SubjectName
    having avg(r.StudentResult)>=80;

     

 

标签:join,sub,--,数据库,查询,StudentNo,StudentResult,select
From: https://www.cnblogs.com/hsk991213/p/17790054.html

相关文章

  • PostGIS安装及空间数据库的创建与shp数据导入
    PostGISisaspatialdatabaseextenderforPostgreSQLobject-relationaldatabase.ItaddssupportforgeographicobjectsallowinglocationqueriestoberuninSQL.PostGIS是空间数据库,是PostgreSQL的一个扩展,PostGIS提供如下空间信息服务功能:空间对象、空间索引、......
  • golang 获取 mongo 数据库状态
    命令行模式navicatgolangpackagemainimport( "context" "encoding/json" "fmt" "log" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-drive......
  • MySQL建数据库排序规则选择
    MySQL建数据库排序规则选择引言在MySQL数据库中,选择适合的排序规则对于数据的存储和检索非常重要。排序规则决定了字符比较的方式,影响数据库的数据排序和查询结果。本文将介绍MySQL中常见的排序规则,并提供相应的代码示例来帮助读者理解和选择适合自己需求的排序规则。排序规则......
  • zblog数据库结构 表和字段详解
    表结构说明:表名储存信息zbp_category分类表zbp_comment评论表zbp_config插件配置表zbp_member用户表zbp_module模块表zbp_post文章表zbp_tag标签表zbp_upload附件表分类表:zbp_category表数据结构CREATETABLEzbp_category(......
  • 批量手机号码归属地查询工具
    在日常工作和生活中,手机号码归属地的查询需求越来越普遍。这款查询软件,具有高效、便捷、隐私保护等诸多优势,让您轻松解决手机号码归属地查询问题。可以快速批量查询手机号码归属地,为您节省宝贵的时间和精力。无需联网即可进行查询。无需上传号码到远程服务器,确保您的数据安全,本地......
  • mysql表关联查询-索引失效问题
    问题:两张关联表索引字段的字符集不一致导致索引失效。解决方案:先用EXPLAIN检查关联字段是否使用了索引,查看两张表的字段不一致导致将两张表索引字段的字符集发现字符集不一致,重新将字符集统一为utf8mb4。 ......
  • MySQL 查询优化
     我们在写一些mysql语句时。可能会写一些耗费性能的语句。这时候我们可以利用查询重写将糟糕的语句转化成某种可以高效执行的形式。 条件化简将我们写的复杂表达式进行简化。 1.移除不必要的括号举例:可将SELECT*FROM(t1,(t2,t3))WHERE...化简为SELECT*......
  • 10月《中国数据库行业分析报告》已发布,深度剖析甲骨文大会Oracle技术新趋势
    为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》,持续传播数据技术知识、努力促进技术创新与行业生态发展,目前已更至第十七期,并发布了共计1......
  • EF Core无法翻译groupby等子查询
    烦人的表达式转化错误varquery1=emps.Grouby(v=>v.DeptId).Select(g=>new{DeptId=g.Key,Salary=g.Max(x=>x.Salary);varresult=fromdindeptsjoinqinquery1ond.Idequalsq.DeptIdselectnew{d.Name,q.Salary};上面代码运行起......
  • 数据库中的中英文术语大全
    一、基础理论基础理论英文术语中文释义data数据database(DB)数据库databasesystem(dbs)数据库系统databasemanagementsystem数据库管理系统databaseadministrator数据库管理员relationalmodel关系模型relationaldatabase关系型数据库relation关系table表column列attribute属性row......